[jbossws-issues] [JBoss JIRA] Commented: (JBWS-1402) Ejb3 JMSTransportSupport
Richard Opalka (JIRA)
jira-events at lists.jboss.org
Mon Feb 18 07:00:26 EST 2008
[ http://jira.jboss.com/jira/browse/JBWS-1402?page=comments#action_12399710 ]
Richard Opalka commented on JBWS-1402:
--------------------------------------
What is the relation of this bug to bug http://jira.jboss.org/jira/browse/JBWS-1911? Isn't it fixed already?
> Ejb3 JMSTransportSupport
> ------------------------
>
> Key: JBWS-1402
> URL: http://jira.jboss.com/jira/browse/JBWS-1402
> Project: JBoss Web Services
> Issue Type: Patch
> Security Level: Public(Everyone can see)
> Components: jbossws-native
> Environment: I made these changes to work with JBossWS 1.0.3 and JBoss AS 4.0.4.
> Reporter: John Gilbert
> Fix For: jbossws-native-2.0.4
>
>
> Allow the use of Ejb3 MDBs to support soap over jms. Note: This is a different solution then outlined in the referenced forum discussion.
> Here is a sample Ejb3 MDB which is also annotated with JWS annotations:
> @MessageDriven(activationConfig = {
> @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
> @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/AuthorizationCallbackQueue"),
> @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "AUTO_ACKNOWLEDGE"),
> @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable") })
> @WebService(name = "AuthorizationCallbackService", serviceName = "AuthorizationCallbackService")
> @SOAPBinding(style = Style.RPC, use = Use.LITERAL, parameterStyle = ParameterStyle.BARE)
> @SOAPMessageHandlers( { @SOAPMessageHandler(className = "org.jboss.ws.wsse.WSSecurityHandlerInbound") })
> @SecurityDomain("portal")
> public class AuthorizationCallbackMDB extends JMSTransportSupport implements MessageListener {
> @WebMethod
> @Oneway
> public void authorizationResponse(@WebParam(name = "paymentId") long paymentId, @WebParam(name = "status") boolean status) throws java.rmi.RemoteException {
> ...
> }
> }
> The following changes where made to get this to work:
> jbossws-core.jar -> org.jboss.ws.server.ServiceEndpointInfo constructor
> } else if (udi.type == UnifiedDeploymentInfo.Type.JSR181_EJB3) {
> String ejbName = sepMetaData.getLinkName();
> UnifiedApplicationMetaData applMetaData = (UnifiedApplicationMetaData) udi.metaData;
> UnifiedBeanMetaData beanMetaData = (UnifiedBeanMetaData) applMetaData
> .getBeanByEjbName(ejbName);
> if (beanMetaData instanceof UnifiedMessageDrivenMetaData) {
> this.type = Type.MDB21;
> } else {
> this.type = Type.SLSB30;
> }
> }
> jbossws-jboss-integration.jar -> org.jboss.ws.integration.jboss.DeployerInterceptorEJB3
> protected UnifiedDeploymentInfo createUnifiedDeploymentInfo(DeploymentInfo di) throws Exception {
> ...
> for (Object container : ejb3Module.getContainers().values()) {
> if (container instanceof StatelessContainer) {
> StatelessContainer slc = (StatelessContainer) container;
> UnifiedBeanMetaData uslc = new UnifiedBeanMetaData();
> uslc.setEjbName(slc.getEjbName());
> uslc.setEjbClass(slc.getBeanClassName());
> beans.add(uslc);
> }
> if (container instanceof MDB) {
> MDB mdc = (MDB) container;
> if (mdc.resolveAnnotation(WebService.class) != null) {
> UnifiedBeanMetaData umdc = new UnifiedMessageDrivenMetaData();
> umdc.setEjbName(mdc.getEjbName());
> umdc.setEjbClass(mdc.getBeanClassName());
> ActivationConfigPropertyMetaData p = (ActivationConfigPropertyMetaData) mdc
> .getActivationConfigProperties().get("destination");
> ((UnifiedMessageDrivenMetaData) umdc)
> .setDestinationJndiName(p.getValue());
> beans.add(umdc);
> }
> }
> }
> ...
> }
> protected boolean isWebserviceDeployment(DeploymentInfo di) {
> ...
> for (Object manager : ejb3Module.getContainers().values()) {
> if (manager instanceof StatelessContainer) {
> StatelessContainer container = (StatelessContainer) manager;
> if (container.resolveAnnotation(WebService.class) != null) {
> isWebserviceDeployment = true;
> break;
> }
> }
> if (manager instanceof MDB) {
> MDB container = (MDB) manager;
> if (container.resolveAnnotation(WebService.class) != null) {
> isWebserviceDeployment = true;
> break;
> }
> }
> }
> ...
> }
> The only thing I couldn't fix was the generated endpoint address in the wsdl. It still comes out like this
> <soap:address location='http://localhost:8080/payment-authorizer-0/AuthorizationCallbackMDB'/>
> instead of something like this
> <soap:address location='jms://localhost/queue/AuthorizationCallbackQueue'/>
> On a similar note I have created a straight forward jboss remoting JmsClientInvoker. It only works with Oneway messages, which is reasonable.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jbossws-issues
mailing list