2 Replies Latest reply on Oct 29, 2008 12:34 PM by wili

    SOAP onto the bus, persist synchronously and retrieve messag

    wili

      scenario:
      A client sends a SOAP message to a JBossWS endpoint on the bus. There the message is persisted with a classification e.g. "new". On success, the client receives a SUCCESS response. A (scheduled) service will retrieve all new Messages out of the store and process their bodies.
      A client must be sure that JBoss ESB will deliver the message even if it crashes (this is the reason for persisting).

      The following code snippets don't really work:

      @WebService(name = "LockingWS", targetNamespace="http://united/locking")
      public class LockingWS {
      
       @WebMethod
       @WebResult(name="result")
       public String lock(@WebParam(name="param1") String message) throws MessageDeliverException {
       Message esbMessage = SOAPProcessor.getMessage();
      
       if(esbMessage != null) {
      
       ServiceInvoker si = new ServiceInvoker("MyServiceCategory","PersistService");
      
       try {
       si.deliverSync(esbMessage, 1000);
       } catch (Exception e) {
       e.printStackTrace();
       return "ERROR";
       }
       return "SUCCESS";
       }
       return "ERROR";
       }
      
      }



      <jbossesb
       xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"
       parameterReloadSecs="5">
      
       <providers>
       <jms-provider name="JBossMQ"
       connection-factory="ConnectionFactory">
      
       <jms-bus busid="quickstartGwChannel">
       <jms-message-filter dest-type="QUEUE"
       dest-name="queue/quickstart_webservice_producer_gw" />
       </jms-bus>
       <jms-bus busid="quickstartEsbChannel">
       <jms-message-filter dest-type="QUEUE"
       dest-name="queue/quickstart_webservice_producer_esb" />
       </jms-bus>
       </jms-provider>
       <jbr-provider name="JBR-Http" protocol="http"
       host="localhost">
       <jbr-bus busid="Http-1" port="8765" />
       </jbr-provider>
       </providers>
      
       <services>
       <service category="MyServiceCategory" name="MyWSProducerService"
       description="WS Frontend speaks natively to the ESB">
       <listeners>
       <jbr-listener name="Http-Gateway" busidref="Http-1"
       is-gateway="true" />
       <jms-listener name="JMS-ESBListener"
       busidref="quickstartEsbChannel" />
       </listeners>
       <actions>
       <action name="JBossWSAdapter"
       class="org.jboss.soa.esb.actions.soap.SOAPProcessor">
       <property name="jbossws-endpoint" value="LockingWS" />
       </action>
       </actions>
       </service>
      
       <service name="PersistService" category="MyServiceCategory"
       description="persisitiert alle einkommenden Messages" invmScope="GLOBAL">
       <actions>
       <action name="PersistAction"
       class="org.jboss.soa.esb.actions.MessagePersister">
       <property name="classification" value="new" />
       <property name="message-store-class"
       value="org.jboss.internal.soa.esb.persistence.format.db.DBMessageStoreImpl" />
       </action>
       </actions>
       </service>
       </services>
      </jbossesb>


      I think there is a better way to do this, but how?