PDA

View Full Version : JMSTemplate102 - weblogic 8.1.4 => Consumer is closed



paquerette
Aug 3rd, 2005, 04:44 AM
Hi,

I'm trying to use servicemix to connect to a weblogic 8.1.4 JMS but I get
a Consumer Is Closed Exception.

ServiceMix rely on JMSTemplate102, that's why I'm posting here (also i can get much help from google and servicemix mailing list... :'( )

When running in debug mode, i can see that it successfully connect to
the JMS Server (getting it's name).

Do anyone have an idea of what's wrong? Why i loose the connection to the JMS?

Thanks for help ;o)

Manson Thomas.

Here is some details :

here is the console log :

(Http11Protocol.java:142) - Initialisation de Coyote HTTP/1.1 sur http-8080
( Catalina.java:514) - Initialization processed in 1719 ms
(StandardService.java:472) - Démarrage du service Catalina
(StandardEngine.java:467) - Starting Servlet Engine: Apache Tomcat/5.0.30
(StandardHost.java:787) - XML validation disabled
(XmlBeanDefinitionReader.java:147) - Loading XML bean definitions from
class path resource [jbi.xml]
(AbstractRefreshableApplicationContext.java:90) - Bean factory for
application context
[org.springframework.context.support.ClassPathXmlAp plicationContext;hashCode=29493424]:
org.springframework.beans.factory.support.DefaultL istableBeanFactory
defining beans [jndiTemplate,jmsConnectionFactory,jmsFactory,jmsDe stinationResolver,jmsTemplate,jbi];
root of BeanFactory hierarchy
(AbstractApplicationContext.java:289) - 6 beans defined in application
context [org.springframework.context.support.ClassPathXmlAp plicationContext;hashCode=29493424]
( CollectionFactory.java:61) - JDK 1.4+ collections available
(CollectionFactory.java :66) - Commons Collections 3.x available
(AbstractApplicationContext.java:422) - Unable to locate MessageSource
with name 'messageSource': using default
[org.springframework.context.support.DelegatingMess ageSource@1d32e45]
(AbstractApplicationContext.java:444) - Unable to locate
ApplicationEventMulticaster with name 'applicationEventMulticaster':
using default [org.springframework.context.event.SimpleApplicatio nEventMulticaster@1347124]
(DefaultListableBeanFactory.java:262) - Pre-instantiating singletons
in factory [org.springframework.beans.factory.support.DefaultL istableBeanFactory
defining beans [jndiTemplate,jmsConnectionFactory,jmsFactory,jmsDe stinationResolver,jmsTemplate,jbi];
root of BeanFactory hierarchy]
(AbstractBeanFactory.java:219) - Creating shared instance of singleton
bean 'jndiTemplate'
(AbstractBeanFactory.java:219) - Creating shared instance of singleton
bean 'jmsConnectionFactory'
(AbstractBeanFactory.java:219) - Creating shared instance of singleton
bean 'jmsFactory'
(AbstractBeanFactory.java:219) - Creating shared instance of singleton
bean 'jmsDestinationResolver'
(AbstractBeanFactory.java:219) - Creating shared instance of singleton
bean 'jmsTemplate'
(AbstractBeanFactory.java :219) - Creating shared instance of
singleton bean 'jbi'
(AbstractBeanFactory.java:525) - Destroying singletons in factory
{org.springframework.beans.factory.support.Default ListableBeanFactory
defining beans [jndiTemplate,jmsConnectionFactory,jmsFactory,jmsDe stinationResolver,jmsTemplate,jbi];
root of BeanFactory hierarchy}
(StandardContext.java:4324) - Error listenerStart
(StandardContext.java:4349) - Erreur de démarrage du contexte suite
aux erreurs précédentes
(StandardHost.java:1024) - Create Host deployer for direct deployment
( non-jmx )
(Http11Protocol.java:176) - Démarrage de Coyote HTTP/1.1 sur http-8080
(ChannelSocket.java:363) - JK2: ajp13 listening on /0.0.0.0:8009
(JkMain.java:355) - Jk running ID=0 time=0/297 config=null
(Catalina.java:563) - Server startup in 21203 ms


The stack trace :

2005-08-02 10:48:30 StandardContext[/JBI-Test]Exception lors de
l'envoi de l'évènement contexte initialisé (context initialized) à
l'instance de classe d'écoute (listener)
fr.RS2i.services.DBIListener.SpringListener
org.springframework.beans.factory.BeanCreationExce ption: Error
creating bean with name 'myJmsReceiver' defined in class path resource
[jbi.xml]: Initialization of bean failed; nested exception is
weblogic.jms.common.IllegalStateException: Consumer is closed
weblogic.jms.common.IllegalStateException: Consumer is closed
at weblogic.jms.client.JMSConsumer.checkClosed(JMSCon sumer.java:467)
at weblogic.jms.client.JMSConsumer.setMessageListener (JMSConsumer.java:295)
at org.servicemix.components.jms.JmsReceiverComponent .afterPropertiesSet(JmsReceiverComponent.java:43)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:966)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:358)
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveInnerBeanDefinition(Bea nDefinitionValueResolver.java:147)
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveValueIfNecessary(BeanDe finitionValueResolver.java:96)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.applyPropertyValues(Abs tractAutowireCapableBeanFactory.java:920)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.populateBean(AbstractAu towireCapableBeanFactory.java:731)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:340)
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveInnerBeanDefinition(Bea nDefinitionValueResolver.java:147)
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveValueIfNecessary(BeanDe finitionValueResolver.java:96)
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveManagedList(BeanDefinit ionValueResolver.java:193)
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveValueIfNecessary(BeanDe finitionValueResolver.java:109)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.applyPropertyValues(Abs tractAutowireCapableBeanFactory.java:920)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.populateBean(AbstractAu towireCapableBeanFactory.java:731)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:340)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:223)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:147)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:277)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:312)
at org.springframework.context.support.ClassPathXmlAp plicationContext.<init>(ClassPathXmlApplicationContext.java:80)
at org.springframework.context.support.ClassPathXmlAp plicationContext.<init>(ClassPathXmlApplicationContext.java:65)
at org.springframework.context.support.ClassPathXmlAp plicationContext.<init>(ClassPathXmlApplicationContext.java:56)
at fr.RS2i.services.DBIListener.SpringListener.contex tInitialized(SpringListener.java:12)
at org.apache.catalina.core.StandardContext.listenerS tart(StandardContext.java:3831)
at org.apache.catalina.core.StandardContext.start(Sta ndardContext.java:4323)
at org.apache.catalina.core.ContainerBase.start(Conta inerBase.java:1083)
at org.apache.catalina.core.StandardHost.start(Standa rdHost.java:789)
at org.apache.catalina.core.ContainerBase.start(Conta inerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(Stan dardEngine.java:478)
at org.apache.catalina.core.StandardService.start(Sta ndardService.java:480)
at org.apache.catalina.core.StandardServer.start(Stan dardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalin a.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootst rap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstr ap.java:425)


Spring Config :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:foo="http://servicemix.org/cheese/">
<container id="jbi">
<components>
<component id="myJmsReceiver" service="foo:myJmsReceiver"
endpoint="myJmsReceiver"

class="org.servicemix.components.jms.JmsReceiverComponent"
destinationService="foo:trace">
<property name="template">
<ref local="jmsTemplate"/>
</property>

</component>

<component id="jmsTrace" service="foo:trace"
class="org.servicemix.components.groovy.GroovyComponent">
<property name="createOutput" value="false"/>
<property name="scriptText">
<value><![CDATA[
log.info "Received message $inMessage with body: $inMessage.bodyText"
]]></value>
</property>
</component>
</components>
</container>


<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://someIp:somePort</prop>
</props>
</property>
</bean>

<!-- Internal JMS Queue Connection Factory -->
<bean id="jmsConnectionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="jndiTemplate"/>
</property>
<property name="jndiName">
<value>weblogic.jms.ConnectionFactory</value>
</property>
</bean>




<bean id="jmsFactory"
class="org.springframework.jms.connection.SingleConnectio nFactory">
<property name="targetConnectionFactory">
<ref bean="jmsConnectionFactory"/>
</property>
</bean>


<!-- JMS Destination Resolver -->
<bean id="jmsDestinationResolver"
class="org.springframework.jms.support.destination.JndiDe stinationResolver">
<property name="jndiTemplate">
<ref bean="jndiTemplate"/>
</property>
<property name="cache">
<value>true</value>
</property>
</bean>


<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate102">
<property name="connectionFactory">
<ref local="jmsFactory"/>
</property>
<property name="destinationResolver">
<ref bean="jmsDestinationResolver"/>
</property>
<property name="pubSubDomain">
<value>true</value>
</property>
<property name="defaultDestinationName">
<value>com.RS2i.infocentre.jms.ICMessagerJMSTopic</value>
</property>
</bean>
</beans>

Juergen Hoeller
Aug 3rd, 2005, 05:28 AM
This really looks like a ServiceMix issue. The call that fails doesn't even go through JmsTemplate102: It rather seems to call setMessageListener directly on a given MessageConsumer, completely outside JmsTemplate.

Juergen

radical_dreamer
Aug 22nd, 2005, 10:21 AM
Hi, I've seen some code who "hack" into the SpringFramework to get a session in this way :


SessionCallback sessionCallback = new SessionCallback() {
public Object doInJms(Session session) throws JMSException {
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(messageListener);
return consumer;
}};
jmsTemplate.execute(sessionCallback, true);


In fact, they try to use the session create by JmsTemplate, BUT the end of the method execute() close the session with no pity. That's why the listener is "close" with the same mean...

But why doing all this ? Just to have a MessageListener desperately...

see :
http://forum.springframework.org/showthread.php?t=14940