2014-12-05 1 views
0

닫혀 나는이 예외JMS 프로듀서가 Hornetq를 통해 제이보스와 JMS를 사용

javax.ejb.EJBTransactionRolledbackException: Producer is closed 

이 발생 한 번 또는 두 번 몇 시간마다 얻었다. 다음과 같이

Caused by: javax.jms.IllegalStateRuntimeException: Producer is closed 
     at org.hornetq.jms.client.JmsExceptionUtils.convertToRuntimeException(JmsExceptionUtils.java:60) [hornetq-jms-client-2.4.1.Final.jar:] 
     at org.hornetq.jms.client.HornetQJMSProducer.send(HornetQJMSProducer.java:112) [hornetq-jms-client-2.4.1.Final.jar:] 
     at org.hornetq.jms.client.HornetQJMSProducer.send(HornetQJMSProducer.java:230) [hornetq-jms-client-2.4.1.Final.jar:] 
     at com.turbineam.tradeagent.message.MessageSender.sendMessage(MessageSender.java:26) [classes:] 
     at com.turbineam.tradeagent.agent.TradeAgent.sendMessage(TradeAgent.java:36) [classes:] 
     at com.turbineam.tradeagent.agent.TradeAgent.handleMessage(TradeAgent.java:82) [classes:] 
     at sun.reflect.GeneratedMethodAccessor273.invoke(Unknown Source) [:1.8.0_05] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_05] 
     at java.lang.reflect.Method.invoke(Method.java:483) [rt.jar:1.8.0_05] 
     at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) 
     at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407) 
     at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final] 
     at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final] 
     at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) 
     at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final] 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407) 
     at org.jboss.as.ejb3.concurrency.ContainerManagedConcurrencyInterceptor.processInvocation(ContainerManagedConcurrencyInterceptor.java:104) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final] 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407) 
     at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05] 
     at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final] 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final] 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
     at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.as.ejb3.component.singleton.SingletonComponentInstanceAssociationInterceptor.processInvocation(SingletonComponentInstanceAssociationInterceptor.java:52) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final] 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309) 
     at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:251) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final] 
     ... 201 more 
Caused by: javax.jms.IllegalStateException: Producer is closed 
     at org.hornetq.jms.client.HornetQMessageProducer.checkClosed(HornetQMessageProducer.java:537) [hornetq-jms-client-2.4.1.Final.jar:] 
     at org.hornetq.jms.client.HornetQMessageProducer.send(HornetQMessageProducer.java:206) [hornetq-jms-client-2.4.1.Final.jar:] 
     at org.hornetq.jms.client.HornetQMessageProducer.send(HornetQMessageProducer.java:200) [hornetq-jms-client-2.4.1.Final.jar:] 
     at org.hornetq.ra.HornetQRAMessageProducer.send(HornetQRAMessageProducer.java:145) 
     at org.hornetq.jms.client.HornetQJMSProducer.send(HornetQJMSProducer.java:107) [hornetq-jms-client-2.4.1.Final.jar:] 
     ... 240 more 

보낸 사람이 만들어집니다 :

@Slf4j 
public class MessageSender { 

    @Inject 
    @JMSConnectionFactory("java:jboss/DefaultJMSConnectionFactory") 
    private JMSContext context; 

    public void sendMessage(Destination destination, String messageId, Serializable serializable) throws NamingException, JMSException { 

     log.debug("Sending a message: " + serializable.toString()); 
     context.createProducer().setJMSCorrelationID(messageId).send(destination, serializable); 
    } 
} 

어쩌면 내가 뭔가를보고 싶어하지만, 그런 일이 왜 이해가 안 돼요. 올바르게 처리하는 방법? 나는이 메시지가 아무 문제없이 보내질 것을 확실히 요구한다. 미리 감사드립니다.

편집 :

WARN [org.hornetq.core.client] (ejb) HQ214021: Invalid concurrent session usage. Sessions are not supposed to be used by more than one thread concurrently. 

콩 나는 주입 :

내가 그이 문제를 해결하기 위해 저를 이끌어 추측 가장 중요한 부분은 때때로 내가 (폐쇄 프로듀서 외에) 가지고 있다는 것입니다 MessageSender에 @Stateless 주석이 추가되었습니다.

답변

2

좋아,이 문제를 해결하기 위해 여러 번 시도해 보았습니다. 이 설정의 잘못된 점은 MessageSender에 범위 지정 결정 범위가 제공되지 않으면 @Dependent라는 것입니다. 그리고 그것이 주입 된 콩의 범위 였음을 의미합니다. 그 경우에는 @Stateless. 생성 된 세션은 하나뿐입니다. @Stateless bean의 메소드가 동시에 실행될 수 있으며 그 것이 문제의 주요 원인이었습니다. sendMeasge가 동일한 JMS 세션을 사용했습니다. 이 문제를 해결하는 가장 간단한 방법은 sendMessage에 항상 하나의 thred가 있는지 확인하거나 여러 세션을 만드는 것입니다. 내가 찾은 솔루션 중 하나는 다음과 같은 방법으로 @RequestScope을 사용할 수 없습니다 : 우리가 메시지를 보낼 때마다 세션을 생성 위의 예에서

@Slf4j 
@RequestScope 
public class MessageSender { 

    @Inject 
    @JMSConnectionFactory("java:jboss/DefaultJMSConnectionFactory") 
    private JMSContext context; 

    public void sendMessage(Destination destination, String messageId, Serializable serializable) throws NamingException, JMSException { 

     log.debug("Sending a message: " + serializable.toString()); 
     context.createProducer().setJMSCorrelationID(messageId).send(destination, serializable); 
    } 
} 

- 그래서 거기에 동시 세션 사용의 문제는 더 이상하고 그것을 폐쇄 된 생산자와의 문제 또한 사라졌다. 완전히 같은 문제가 http://www.mastertheboss.com/jboss-server/jboss-jms/jms-20-tutorial-on-wildfly-as

+0

: 누군가가 관심을 가질만한 경우

나는에서 학습과 독서를 권장합니다! 우리는 JTA 트랜잭션을 사용하고 있으며 여기에 대한 설명은 https://issues.jboss.org/browse/WFLY-3338에서 발견했습니다. –

관련 문제