2016-03-24 5 views
0

Ein Fehler Invalid Session ID ist auf Mule eine Anwendung, die SOAP mit SugarCRM Connector (http://mulesoft.github.io/sugarcrm-connector/) verwenden.Mule: Ungültige Session ID

Aber diese Fehler auftreten in diesem Szenario:

  1. App startet und Prozess alle Poll (Datenbankabfrage)
  2. SOAP funktioniert
  3. Die App bleibt ein neues Update warten/einfügen
  4. Nach von einer Zeit (24 Stunden, pe) ein neues Update/einfügen auftritt
  5. Der Fluss wird in der App verarbeitet
  6. Aber der folgende Fehler tritt auf (repreat immer):

EDIT:

2016-03-24 12: 31: 30.470 [pool-106-thread-1] ERROR org.mule.retry. notifiers.ConnectNotifier - Fehler beim connect/reconnect: Arbeitsbeschreibung. Root-Ausnahme war: Ungültige Sitzungs-ID. Typ: Klasse org.apache.cxf.binding.soap.SoapFault 2016.03.24 12: 31: 30.471 [Pool-106-thread-1] ERROR org.mule.exception.DefaultMessagingExceptionStrategy - ***** ************************************************** ************************* Message: Fehler beim Aufruf von getEntryList. Nachrichtennutzlast ist vom Typ: GetEntryListRequest Code: MULE_ERROR-29999 ----------------------------------- --------------------------------------------- Der Ausnahme-Stack ist: 1. Ungültige Sitzungs-ID (org.apache.cxf.binding.soap.SoapFault) org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor: 84 (null) 2. Ungültige Sitzungs-ID (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. Fehler beim Aufrufen von "getEntryList". Nachrichtennutzdaten ist vom Typ: GetEntryListRequest (org.mule.api.MessagingException)
org.mule.devkit.processor.DevkitBasedMessageProcessor: 133 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html) ---------------- -------------------------------------------------- -------------- Stammausnahmestapel-Trace: org.apache.cxf.binding.soap.SoapFault: Ungültige Sitzungs-ID unter org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor .unmarshalFault (Soap11FaultInInterceptor.java:84) bei org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage (Soap11FaultInInterceptor.java:51) bei org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor .handleMessage (Soap11FaultInInterceptor.jav a: 40) + 3 weitere (set Debug-Level Protokollierung oder '-Dmule.verbose.exceptions = true' für alles)


2016-03-24 12: 31: 40.471 [pool-106-thread -1] FEHLER org.mule.retry.notifiers.ConnectNotifier - Fehler beim connect/reconnect: Arbeitsbeschreibung. Root-Ausnahme war: Ungültige Sitzungs-ID. Typ: Klasse org.apache.cxf.binding.soap.SoapFault 2016-03-24 12: 31: 40,472 [pool-106-thread-1] FEHLER org.mule.exception.DefaultMessagingExceptionStrategy - *********************************************** ********************************* Message: Fehler beim Aufruf von getEntryList. Nachrichtennutzlast ist vom Typ: GetEntryListRequest Code: MULE_ERROR-29999 ----------------------------------- --------------------------------------------- Der Ausnahme-Stack ist: 1. Ungültige Sitzungs-ID (org.apache.cxf.binding.soap.SoapFault) org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor: 84 (null) 2. Ungültige Sitzungs-ID (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. Fehler beim Aufrufen von "getEntryList". Nachrichtennutzdaten ist vom Typ: GetEntryListRequest (org.mule.api.MessagingException)
org.mule.devkit.processor.DevkitBasedMessageProcessor: 133 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html) ---------------- -------------------------------------------------- -------------- Stammausnahmestapel-Trace: org.apache.cxf.binding.soap.SoapFault: Ungültige Sitzungs-ID unter org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor .unmarshalFault (Soap11FaultInInterceptor.java:84) bei org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage (Soap11FaultInInterceptor.java:51) bei org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor .handleMessage (Soap11FaultInInterceptor.jav a: 40) + 3 weitere (Set Debug-Level-Protokollierung oder '-Dmule.verbose.exceptions = true' für alles)


I konfiguriert das Bild unten Wiederverbindung accord, aber nicht der Fehler weiterhin.

enter image description here

EDIT:

XML-Konfiguration (vereinfacht)

<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> 

Was ocurring werden könnte? Gibt es ein Formular, um dieses Problem zu lösen?

+0

Ist es möglich, dass die Sitzungs-ID abgelaufen ist? Wie hast du es überhaupt bekommen? –

+0

Die Sitzung auf dem Server ist möglicherweise abgelaufen (durch Zeitüberschreitung), ja. Aber in diesem Fall sollte Mule wieder verbinden, richtig (Wiederverbindungsstrategie)? Das erste Mal wurde die Verbindung durch den Mule-Server hergestellt, wenn er/sie über die Sugar Connection-Parameter gestartet wurde. Oben bearbeitet, um die XML-Konfiguration einzuschließen. – Muka

Antwort

0

am source code of the connector suchen, können wir sehen, dass die Zuckerverbindung durch die bloße Anwesenheit einer Sitzungs-ID nur gültig betrachtet wird:

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

Das bedeutet, dass selbst wenn die Sitzung abgelaufen ist, wird die Verbindung sein als aktiv angesehen. Dies könnte als Fehler angesehen und an MuleSoft gemeldet werden.

Beachten Sie, dass mit der Neuverbindungsstrategie vorhanden, würde das erwartete Verhalten sein:

  • ein Outbound-Betrieb versucht wird,
  • es ausfällt,
  • die Neuverbindungsstrategie ruft connect,
  • die Die ausgehende Operation wird wiederholt und ist nun erfolgreich. Diese Wiederholung sollte von der Anwendung als Teil einer reliability pattern durchgeführt werden.

Wenn Sie dieses Verhalten nicht beobachten, d. H.Wenn die Reconnection-Strategie nach der fehlgeschlagenen ausgehenden Operation nicht eintritt, handelt es sich wahrscheinlich um einen Fehler, der MuleSoft gemeldet werden muss.

+0

Ich habe dieses Problem im Bug-Tracker MuleSoft geöffnet: https://www.mulesoft.org/jira/browse/MULE-9516. Danke für die Hilfe! – Muka

+0

Hätten Sie Vorschläge für eine Problemumgehung für dieses Problem? – Muka

+0

Es hängt davon ab :) Sehen Sie die Reconnection-Strategie, wenn die ausgehende Operation fehlschlägt? –