Hi all My JMS client application running on JBoss 4.2.3 fails to create a remote JMS Session on startup due to a NullpointerException. The JMS server is JBM 1.4.4 on JBoss AS 4.2.3. Threads mentioned below already discuss the issue, but even when trying to change the scoping/loader the issue remains.
13:37:18,980 INFO [StartupListener] ~~ Creating JMS Session ... | 13:37:18,989 FATAL [StartupListener] | java.lang.NullPointerException | at org.jboss.jms.client.container.FailoverValveInterceptor.invoke(FailoverValveInterceptor.j | ava:87) | at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:105) | at org.jboss.jms.client.delegate.ClientConnectionDelegate$createSessionDelegate_605233526772 | 4906805.invokeNext(ClientConnectionDelegate$createSessionDelegate_6052335267724906805.java) | at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:170) | at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:105) | at org.jboss.jms.client.delegate.ClientConnectionDelegate$createSessionDelegate_605233526772 | 4906805.invokeNext(ClientConnectionDelegate$createSessionDelegate_6052335267724906805.java) | at org.jboss.jms.client.delegate.ClientConnectionDelegate.createSessionDelegate(ClientConnec | tionDelegate.java) | at org.jboss.jms.client.JBossConnection.createSessionInternal(JBossConnection.java:269) | at org.jboss.jms.client.JBossConnection.createSession(JBossConnection.java:91) This standalone WAR file connects to the JBM server from the ServletContextListener.contextInitialized() callback method to poll for messages. The code was tested on windows platform(on 1 machine) but now fails during linux deployments where both servers are remote. http://www.jboss.org/index.html?module=bb&op=viewtopic&t=110051&postdays=0&postorder=asc&start=0 https://jira.jboss.org/jira/browse/JBMESSAGING-980 http://www.jboss.org/community/wiki/ClassLoadingconfiguration On the client server I removed the server/default/deploy/jms folder to remove JBossMQ. In the WEB-INF/lib of my WAR I've provided jboss-remoting.jar (v2.2.3) and jboss-messaging-client.jar (v1.4.4). Here is my Spring configuration: <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> | <property name="environment"> | <props> | <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop> | <prop key="java.naming.provider.url">jnp://someIP:1099</prop> | <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop> | </props> | </property> | </bean> | | <bean id="threadPoolSize" class="java.lang.Integer"> | <constructor-arg value="${threadPoolSize}"/> | </bean> | | <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> | <property name="jndiTemplate"><ref bean="jndiTemplate" /></property> | <property name="jndiName" value="/ConnectionFactory"/> | </bean> | | <bean id="requestQueue" class="org.springframework.jndi.JndiObjectFactoryBean"> | <property name="jndiTemplate"><ref bean="jndiTemplate" /></property> | <property name="jndiName" value="${queue}"/> | </bean> and here is the code that initializes the connection: public class StartupListener implements ServletContextListener { | private static final Log log = LogFactory.getLog(StartupListener.class); | private static Connection connection; | private static Session session; | private static MessageConsumer consumer; | private static Boolean run = Boolean.TRUE; | private static ExecutorService pool; | private static Thread daemonThread; | private static final String PREFIX = " ~~ "; | private static MeteoService metService; | | /** | * Startup trigger of the application. | */ | public void contextInitialized(ServletContextEvent ctx) { | log.info("==== Initializing ServiceBroker"); | | logInfo("Creating polling thread ..."); | daemonThread = new Thread(new MessageDispatcher()); | | try { | ApplicationContext _ctx = WebApplicationContextUtils.getWebApplicationContext(ctx.getServletConte | xt()); | initializeWorkerThreadPool(_ctx); | initializeJMSEnvironment(_ctx); | | metService = (MeteoService) _ctx.getBean("metService"); | | logInfo("Starting the Session ..."); | connection.start(); | | logInfo("Starting a Daemon Thread responsible for message dispatching ..."); | daemonThread.start(); | | log.info("==== ServiceBroker initialized successfully"); | } catch (Throwable e) { | log.fatal(e.getMessage(), e); | } | } | | /** | * This is a context lifecycle (callback) method. | * The Servlet Context is being destroyed by the Container due to a shutdown. | * As a result we need to clean up our privately managed resources. | */ | public void contextDestroyed(ServletContextEvent ctx) { | synchronized (run) { | log.info("==== Shutting down PilotBriefing ServiceBroker ..."); | run = Boolean.FALSE; | | logInfo("Interrupting polling thread ..."); | daemonThread.interrupt(); | | if (session != null) { | try { | logInfo("Closing JMS Session ..."); | session.close(); | } catch (JMSException e) { | log.error(e.getMessage(), e); | } | } | | if (connection != null) { | try { | logInfo("Closing JMS Connection ..."); | connection.close(); | } catch (JMSException e) { | log.error(e.getMessage(), e); | } | } | | if (pool != null) { | logInfo("Shutting down ThreadPool"); | pool.shutdownNow(); | } | | log.info("==== ServiceBroker shutdown complete"); | } | } | | private void logInfo(String msg) { | log.info(PREFIX + msg); | } | | /** | * Initialization of JMS environment. | * @param _ctx external configuration parameters | * @throws NamingException | * @throws JMSException | */ | private void initializeJMSEnvironment(ApplicationContext _ctx) throws NamingException, JMSException | { | Queue queue = (Queue) _ctx.getBean("requestQueue"); | | logInfo("Lookup of ConnectionFactory ..."); | ConnectionFactory cf = (ConnectionFactory) _ctx.getBean("jmsConnectionFactory"); | | logInfo("Creating JMS Connection ..."); | connection = cf.createConnection(); | | logInfo("Creating JMS Session ..."); | session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); | | logInfo("Creating MessagConsumer ..."); | consumer = session.createConsumer(queue); | } | | /** | * Setup a pool of worker threads for message handling. | * @param _ctx external configuration parameters | */ | private void initializeWorkerThreadPool(ApplicationContext _ctx) { | int poolSize = (Integer) _ctx.getBean("threadPoolSize"); | logInfo("Initializing Thread Pool [#" + poolSize + "] ..."); | pool = Executors.newFixedThreadPool(poolSize); | } | | /** | * Daemon thread for the dispatching of incoming messages to a pooled Worker Thread that will handl | e the request. | * This class is implemented as a Thread because otherwise the Servlet Container Thread that execut | es this listener class, | * fails to complete as a result of the polling-loop. | */ | class MessageDispatcher implements Runnable { | public void run() { | try { | while (run) { | TextMessage message = (TextMessage) consumer.receive(); | if (message != null) { | JMSUtils.printMessage("Received request", message); | pool.execute(createMessageHandler(message)); | } | } | } catch (Throwable t) { | log.error(t.getMessage(), t); | } | } | | /** | * Factory method. | * @param message | * @return | * @throws JMSException | */ | private Runnable createMessageHandler(TextMessage message) throws JMSException { | return new MessageHandler(metService, session, message.getJMSReplyTo(), message.getJMSMessageID() | , message.getText()); | } | } I've searched and tried every possible thing but I cannot get past this issue. Any help is much appreciated. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4257831#4257831 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4257831 _______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
