[JBossWS] - Re: Ejb3 JMSTransportSupport
by jgilbert
This could be handle generically without writing code. Just define the mdb in the deployment descriptor with an env-entry for the real service.
<enterprise-beans>
| <message-driven>
| <ejb-name>AuthorizationCallbackMDB</ejb-name>
| <ejb-class>
| org.jboss.webservice.transport.jms.JMSTransportSupport
| </ejb-class>
| <messaging-type>javax.jms.MessageListener</messaging-type>
| <transaction-type>Container</transaction-type>
| <message-destination-type>javax.jms.Queue</message-destination-type>
| </message-driven>
| <env-entry>
| <env-entry-name>serviceName</env-entry-name>
| <env-entry-type>String</env-entry-type>
| <env-entry-value>AuthorizationCallbackServiceMockBean</env-entry-value>
| </env-entry>
| </enterprise-beans>
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3986251#3986251
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3986251
18 years, 2 months
[JBossWS] - Re: Ejb3 JMSTransportSupport
by jgilbert
I extended JMSTransportSupport and overrode processSOAPMessage() to get something to work with Ejb3 MDBs.
For starters the the WebService is implements per usual as a SLSB. I am just using the MDB as an alternate path in the WebService.
The MDB just defines the ObjectName for the real web service.
| @MessageDriven(activationConfig = {...})
| public class AuthorizationCallbackMDB extends MyJmsTransportSupport implements
| MessageListener {
| ObjectName getObjectName() {
| try {
| return new ObjectName(
| "jboss.ws:context=payment-authorizer-0,endpoint=AuthorizationCallbackServiceMockBean");
| } catch (Exception e) {
| throw new RuntimeException(e);
| }
| }
| }
|
| public abstract class MyJmsTransportSupport extends JMSTransportSupport {
|
| private static final long serialVersionUID = 1L;
|
| abstract ObjectName getObjectName();
|
| protected SOAPMessage processSOAPMessage(String fromName,
| InputStream reqMessage) throws SOAPException, IOException,
| RemoteException {
| try {
| ServiceEndpointManagerFactory factory = ServiceEndpointManagerFactory
| .getInstance();
| ServiceEndpointManager epManager = factory
| .getServiceEndpointManager();
| ServiceEndpoint sep = epManager
| .getServiceEndpointByID(getObjectName());
| return sep.handleRequest(null, null, reqMessage);
| } catch (BindingException ex) {
| throw new WSException("Cannot bind incomming soap message", ex);
| }
| }
| }
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3986246#3986246
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3986246
18 years, 2 months