[
http://jira.jboss.com/jira/browse/JBWS-1324?page=all ]
Darran Lofthouse updated JBWS-1324:
-----------------------------------
Workaround Description:
Add the following code to your endpoint implementation to sleep while waiting for the
service endpoint to be ready to process the message: -
@Override
protected SOAPMessage processSOAPMessage(String fromName, InputStream reqMessage)
throws SOAPException, IOException,
RemoteException
{
ServiceEndpointManagerFactory factory =
ServiceEndpointManagerFactory.getInstance();
ServiceEndpointManager epManager = factory.getServiceEndpointManager();
ObjectName sepID = getServiceEndpointForDestination(epManager, fromName);
ServiceEndpoint sep = epManager.getServiceEndpointByID(sepID);
long startTime = System.currentTimeMillis();
State state = sep.getState();
log.info("State=" + state);
while (state != State.STARTED && (System.currentTimeMillis() - startTime
< 60000))
{
try
{
Thread.sleep(1000);
state = sep.getState();
log.info("State=" + state);
}
catch (InterruptedException e)
{
throw new EJBException(e);
}
}
return super.processSOAPMessage(fromName, reqMessage);
}
private ObjectName getServiceEndpointForDestination(ServiceEndpointManager epManager,
String fromName)
{
ObjectName sepID = null;
for (ObjectName aux : epManager.getServiceEndpoints())
{
String jmsProp = aux.getKeyProperty("jms");
if (jmsProp != null && jmsProp.equals(fromName))
{
sepID = aux;
break;
}
}
return sepID;
}
was:
Use the barrier controler service and make the message driven bean depend on the server
startup being complete. This means that for restarting the server the first message will
not be delivered until after everything is deployed.
This workaround does not work for hot redeployments of the bean.
JMS Endpoint - Message delivery starts before endpoint is ready.
----------------------------------------------------------------
Key: JBWS-1324
URL:
http://jira.jboss.com/jira/browse/JBWS-1324
Project: JBoss Web Services
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: jbossws-jaxws
Affects Versions: jbossws-1.0.3
Reporter: Darran Lofthouse
Fix For: jbossws-2.0.3
For most endpoints we need the EJB to be initialised before we initialise the web
service, this way we know the session bean will be ready to process requests before the
first request from a client is received.
For message driven beans we need the web service to be initialised before the first
message is processed by the MDB, however the same logic is used as is used for session
beans so it is possible that the first message will be received while the web service is
still being initialised.
12:53:51,277 ERROR [SOAPFaultHelperJAXRPC] SOAP request exception
javax.xml.rpc.soap.SOAPFaultException: Endpoint cannot handle requests in state: CREATED
at
org.jboss.ws.core.server.ServiceEndpoint.processRequest(ServiceEndpoint.java:176)
at
org.jboss.ws.integration.jboss42.jms.JMSMessageDispatcher.dipatchMessage(JMSMessageDispatcher.java:94)
at
org.jboss.ws.integration.jboss42.jms.JMSTransportSupport.processSOAPMessage(JMSTransportSupport.java:139)
at
org.jboss.ws.integration.jboss42.jms.JMSTransportSupport.onMessage(JMSTransportSupport.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
at
org.jboss.ejb.MessageDrivenContainer$ContainerInterceptor.invoke(MessageDrivenContainer.java:495)
--
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