2016-03-24 2 views
0

Ошибка Invalid Session ID происходит на Mule и приложение, использующее SOAP с SugarCRM Connector (http://mulesoft.github.io/sugarcrm-connector/).Mule: Invalid Session ID

Но эта ошибка происходит в этом случае:

  1. App начинается и процесс весь Опрос (запрос к базе данных)
  2. SOAP работает отлично
  3. Приложение остается в ожидании нового обновления/вставить
  4. После времени (24 часа, pe) происходит новое обновление/вставка
  5. Поток обрабатывается в приложении
  6. Но возникает следующая ошибка (repreat навсегда):

РЕДАКТИРОВАТЬ:

2016-03-24 12: 31: 30470 [бассейн-106-нить-1] ОШИБКА org.mule.retry. notifiers.ConnectNotifier - Ошибка connect/reconnect: дескриптор работы. Исключение корня: Недопустимый Идентификатор сеанса. Тип: класс org.apache.cxf.binding.soap.SoapFault 2016-03-24 12: 31: 30,471 [pool-106-thread-1] ОШИБКА org.mule.exception.DefaultMessagingExceptionStrategy - ***** ************************************************** Сообщение *************************: Не удалось вызвать getEntryList. Полезная информация сообщения имеет тип: GetEntryListRequest Код: MULE_ERROR-29999 ----------------------------------- --------------------------------------------- Исключительный стек: 1. Недействительный идентификатор сеанса (org.apache.cxf.binding.soap.SoapFault) org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor: 84 (null) 2. Недопустимый идентификатор сеанса (javax.xml.ws. soap.SOAPFaultException) org.apache.cxf.jaxws.JaxWsClientProxy: 158 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/xml/ws/soap/SOAPFaultException.html) 3. Не удалось вызвать getEntryList. Полезная нагрузка сообщение имеет тип: GetEntryListRequest (org.mule.api.MessagingException)
org.mule.devkit.processor.DevkitBasedMessageProcessor: 133 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html) ---------------- -------------------------------------------------- -------------- Трассировка стека прерываний корня: org.apache.cxf.binding.soap.SoapFault: Недопустимый идентификатор сеанса: org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor .unmarshalFault (Soap11FaultInInterceptor.java:84) на org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage (Soap11FaultInInterceptor.java:51) на org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor .handleMessage (Soap11FaultInInterceptor.jav а: 40) + 3 больше (набор каротажа уровень отладки или '-Dmule.verbose.exceptions = TRUE' для всего)


2016-03-24 12: 31: 40471 [бассейн-106-нить -1] ОШИБКА org.mule.retry.notifiers.ConnectNotifier - Ошибка connect/reconnect: дескриптор работы. Исключение корня: Недопустимый Идентификатор сеанса. Тип: class org.apache.cxf.binding.soap.SoapFault 2016-03-24 12: 31: 40,472 [pool-106-thread-1] ОШИБКА org.mule.exception.DefaultMessagingExceptionStrategy - *********************************************** Сообщение *********************************: Не удалось вызвать getEntryList. Полезная информация сообщения имеет тип: GetEntryListRequest Код: MULE_ERROR-29999 ----------------------------------- --------------------------------------------- Исключительный стек: 1. Недействительный идентификатор сеанса (org.apache.cxf.binding.soap.SoapFault) org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor: 84 (null) 2. Недопустимый идентификатор сеанса (javax.xml.ws. soap.SOAPFaultException) org.apache.cxf.jaxws.JaxWsClientProxy: 158 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/xml/ws/soap/SOAPFaultException.html) 3. Не удалось вызвать getEntryList. Полезная нагрузка сообщение имеет тип: GetEntryListRequest (org.mule.api.MessagingException)
org.mule.devkit.processor.DevkitBasedMessageProcessor: 133 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html) ---------------- -------------------------------------------------- -------------- Трассировка стека прерываний корня: org.apache.cxf.binding.soap.SoapFault: Недопустимый идентификатор сеанса: org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor .unmarshalFault (Soap11FaultInInterceptor.java:84) на org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage (Soap11FaultInInterceptor.java:51) на org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor .handleMessage (Soap11FaultInInterceptor.jav а: 40) + 3 больше (набор отладки регистрации уровня или '-Dmule.verbose.exceptions = True' для всего)


Я настроил переподключение согласие изображение ниже, но не ошибка продолжается.

enter image description here

EDIT:

XML конфигурации (упрощенный)

<db:oracle-config name="Oracle_Configuration" host="${db.host}" port="${db.port}" instance="${db.instance}" user="${db.user}" password="${db.password}" doc:name="Oracle Configuration"> 
    <db:pooling-profile/> 
</db:oracle-config> 
<sugar:config name="Sugar__Configuration" username="${crm.ws.user}" password="${crm.ws.password}" endpoint="${crm.ws.endpoint}" doc:name="Sugar: Configuration"> 
    <sugar:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/> 
    <reconnect-forever frequency="60000"/> 
</sugar:config>  
<flow name="produto-precoFlow" processingStrategy="synchronous"> 
    <poll doc:name="Poll" doc:description="Produto"> 
     <fixed-frequency-scheduler frequency="10000"/> 
     <watermark variable="carimboTempo" default-expression="2016-02-24 00:00:00" selector="MAX" selector-expression="#[message.payload.datalt]"/> 
     <db:select config-ref="Oracle_Configuration" doc:name="Database"> 
      <db:parameterized-query><![CDATA[SELECT * FROM PRODUTO WHERE TO_CHAR(DATALT, 'yyyy-mm-dd hh24:mi:ss') > #[flowVars.carimboTempo]]]></db:parameterized-query> 
     </db:select> 
    </poll> 
    <foreach doc:name="For Each"> 
     <enricher target="#[payload.produtoPrecoSugar]" doc:name="Message Enricher Produto"> 
      <flow-ref name="produto-precoSub_FlowProduto" doc:name="produto-precoSub_FlowProduto"/> 
     </enricher> 
     // [...] mode code here (original) 
     <scripting:component doc:name="Groovy Inserir/Alterar"> 
      <scripting:script engine="Groovy"><![CDATA[import org.mule.modules.sugarcrm.request.SetEntryRequest; 
import com.sugarcrm.sugarcrm.NameValue; 
req = new SetEntryRequest(); 
req.setModuleName("AOS_Products"); 
nameValues = []; 
for (e in message.payload) { 
    nameValue = new NameValue(); 
    nameValue.setName(e.key); 
    nameValue.setValue(e.value.toString()); 
    nameValues.add(nameValue);   
} 
req.setNameValueList(nameValues); 
return req;]]></scripting:script> 
     </scripting:component> 
     <sugar:set-entry config-ref="Sugar__Configuration" doc:name="Sugar Inserir/Alterar"/> 
    </foreach> 
</flow> 
<sub-flow name="produto-precoSub_FlowProduto"> 
    <scripting:component doc:name="Groovy Id Produto"> 
     <scripting:script engine="Groovy"><![CDATA[import org.mule.modules.sugarcrm.request.GetEntryListRequest; 

req = new GetEntryListRequest(); 
req.setModuleName("AOS_Products"); 

whereQuery = "aos_products.deleted = 0"; 

for (e in message.payload) { 
    if (e.key == "sapiens_codtpr_c" || e.key == "sapiens_datini_c" || e.key == "sapiens_codser_c") { 
     whereQuery = whereQuery + " and " + e.key + " = '" + e.value.toString() + "'"; 
    } else if (e.key == "sapiens_codemp_c" || e.key == "sapiens_qtdmax_c") { 
     whereQuery = whereQuery + " and " + e.key + " = " + e.value.toString();  
    } 
} 

req.setQuery(whereQuery); 
req.setSelectFields(["id"]); 
req.setDeleted(0); 

return req; 

]]></scripting:script> 
    </scripting:component> 
    <sugar:get-entry-list config-ref="Sugar__Configuration" doc:name="Sugar Id Produto e Preço"/> 
</sub-flow> 

Что может быть ocurring? Есть ли форма для решения этой проблемы?

+0

Возможно ли, что идентификатор сеанса истек? Как вы его получили? –

+0

Возможно, сеанс на сервере истек (по таймауту), да. Но в этом случае Мул должен снова подключиться, правильно (стратегия пересоединения)? В первый раз соединение было выполнено сервером Mule при запуске/первом запросе через параметры Sugar Connection. Отредактировано выше, чтобы включить конфигурацию XML. – Muka

ответ

0

Глядя на source code of the connector, мы можем видеть, что соединение сахара считается действительным только при простом присутствии сеанса ID:

@ValidateConnection 
public boolean isConnected() { 
    return sessionId != null; 
} 

Это означает, что даже если сессия истек, то соединение будет считается активным. Это можно было бы назвать ошибкой и сообщить MuleSoft.

Обратите внимание, что со стратегией пересоединения в месте, ожидаемое поведение будет:

  • исходящая операция предпринимается,
  • это не удается,
  • стратегия переподключение называет connect,
  • в исходящая операция повторена и теперь преуспевает. Это повторение должно выполняться приложением, как часть reliability pattern.

Если вы не соблюдаете это поведение, т.е.если стратегия пересоединения не срабатывает после неудачной исходящей операции, это, вероятно, ошибка, требующая отчетов для MuleSoft.

+0

Я открыл эту проблему в трекерах MuleSoft: https://www.mulesoft.org/jira/browse/MULE-9516. Спасибо за помощь! – Muka

+0

У вас есть предложения по обходному пути к этой проблеме? – Muka

+0

Это зависит от :) Вы видите, что стратегия пересоединения срабатывает, когда не работает исходящая операция? –

Смежные вопросы