[Messaging, JMS & JBossMQ] - java.lang.ClassCastException
by vermanaveen
Please help.
I am using jboss-4.0.5.GA and have defined JMS connection factories and queues. Everything is fine in the AppServer and all MDB's are deployed and work fine. I get a ClassCastException while trying to do a lookup for the QueueConnectionFactory. The class being returned by JBoss is org.jboss.resource.adapter.jms.JmsConnectionFactoryImpl inline to javax.jms.QueueConnectionFactory which is what i expect to get.
The connectionfactory is defined as below in the jms-ds.xml file in jboss..
| --------------------------------------------------------------------------------
|
| <tx-connection-factory>
| <jndi-name>jms/novaJMSConnectionFactory</jndi-name>
| <xa-transaction/>
| <use-java-context>false</use-java-context>
| <track-connection-by-tx/>
| <rar-name>jms-ra.rar</rar-name>
| <connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition>
| <security-domain-and-application>JmsXARealm</security-domain-and-application>
| </tx-connection-factory>
|
| --------------------------------------------------------------------------------
|
The client program does a simple lookup for the connection factory and the relevent section is as shown below..
queueConnectionFactory = (javax.jms.QueueConnectionFactory) jndiContext.lookup("jms/novaJMSConnectionFactory");
The above line fails with a ClassCastException because JBoss is not returning the connection factory typecasted to javax.jms.QueueConnectionFactory; but is returning an object to javax.naming.Reference.
Below is my ejb-jar.xml that I use for creating the EAR file.
| <?xml version="1.0" encoding="UTF-8"?>
| <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
|
| <!-- EJB jar xml used on Onshore Development Enviroment-->
|
| <!--
| ** This file was automatically generated by EJBGen 2.16
| ** Build: 20041105-1607
| -->
| <ejb-jar>
| <enterprise-beans>
| <message-driven>
| <ejb-name>MQManager</ejb-name>
| <ejb-class>com.ebw.ejb.mdb.MQManager</ejb-class>
| <transaction-type>Container</transaction-type>
| <message-selector>
| <![CDATA[
| Message_Redirector IS NULL AND Message_Type <> 'Data'
| ]]>
| </message-selector>
| <message-driven-destination>
| <destination-type>javax.jms.Queue</destination-type>
| </message-driven-destination>
|
| <resource-ref>
| <res-ref-name>jms/novaJMSConnectionFactory</res-ref-name>
| <res-type>javax.jms.QueueConnectionFactory</res-type>
| <res-auth>Container</res-auth>
| </resource-ref>
|
| <!--
| <resource-env-ref>
| <resource-env-ref-name>jms/novaJMSConnectionFactory</resource-env-ref-name>
| <resource-env-ref-type>javax.jms.QueueConnectionFactory</resource-env-ref-type>
| </resource-env-ref>
| -->
|
| <security-identity>
| <run-as>
| <role-name>admin</role-name>
| </run-as>
| </security-identity>
| </message-driven>
| </enterprise-beans>
| <assembly-descriptor>
| <security-role>
| <description>Administrator</description>
| <role-name>admin</role-name>
| </security-role>
| <container-transaction>
| <method>
| <ejb-name>MQManager</ejb-name>
| <method-name>*</method-name>
| </method>
| <trans-attribute>NotSupported</trans-attribute>
| </container-transaction>
| </assembly-descriptor>
| <ejb-client-jar>novaEJBClient.jar</ejb-client-jar>
| </ejb-jar>
|
|
Please also find my JBoss.xml file below.
| <?xml version="1.0" encoding="UTF-8"?>
| <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN"
| "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
| <!-- jboss xml used on for JBoss deployement-->
|
| <jboss>
| <enterprise-bean>
| <message-driven>
| <ejb-name>MQManager</ejb-name>
| <!--
| @Naveen: commented for the time being
| <pool>
| <instance-pool>15</instance-pool>
| </pool>
| -->
| <destination-jndi-name>jms/novaRequestQueue</destination-jndi-name>
| <resource-ref>
| <res-ref-name>jms/novaJMSConnectionFactory</res-ref-name>
| <res-type>javax.jms.QueueConnectionFactory</res-type>
| <jndi-name>QueueConnectionFactory</jndi-name>
| </resource-ref>
| <!-- <resource-env-ref>
| <resource-env-ref-name>jms/novaJMSConnectionFactory</resource-env-ref-name>
| <jndi-name>QueueConnectionFactory</jndi-name>
| </resource-env-ref> -->
|
| </message-driven>
| </enterprise-bean>
|
| <security-role-assignment>
| <role-name>admin</role-name>
| <principal-name>server</principal-name>
| </security-role-assignment>
| </jboss>
|
Lastly, my build.xml is as follow.
| <?xml version="1.0" ?>
| <project name="nova" default="buildEar">
| <property file="serverbuild.properties" />
| <echo>
| Starting to Build Server. Make sure to change MQ.properties and Persistance.properties
| </echo>
|
| <target name="setupDir">
| <mkdir dir="${dest}" />
| <mkdir dir="${build}" />
| <mkdir dir="${lib}" />
| <mkdir dir="${metainf}" />
| </target>
|
| <target name="clean">
| <mkdir dir="${dest}" />
| <delete includeemptydirs="true">
| <fileset dir="${dest}" includes="**/*" />
| </delete>
| <mkdir dir="${build}" />
| <mkdir dir="${lib}" />
| <mkdir dir="${metainf}" />
| </target>
|
| <path id="project.class.path">
| <pathelement location="${code}/lib/cglib-2.1.3.jar" />
| <pathelement location="${code}/lib/colt.jar" />
| <pathelement location="${code}/lib/commons-collections-2.1.1.jar" />
| <pathelement location="${code}/lib/commons-logging-1.0.4.jar" />
| <pathelement location="${code}/lib/concurrent-1.3.2.jar" />
| <pathelement location="${code}/lib/dom4j-1.6.1.jar" />
| <pathelement location="${code}/lib/ehcache-1.1.jar" />
| <pathelement location="${code}/lib/hibernate3.jar" />
| <pathelement location="${code}/lib/jboss-cache.jar" />
| <pathelement location="${code}/lib/jboss-system.jar" />
| <pathelement location="${code}/lib/jboss-jmx.jar" />
| <pathelement location="${code}/lib/jboss-common.jar" />
| <pathelement location="${code}/lib/jboss-minimal.jar" />
| <pathelement location="${code}/lib/jboss-j2ee.jar" />
| <pathelement location="${code}/lib/jgroups-2.2.7.jar" />
| <pathelement location="${code}/lib/log4j-1.2.11.jar" />
| <pathelement location="${code}/lib/odmg-3.0.jar" />
| <pathelement location="${code}/lib/oro.jar" />
| <pathelement location="${code}/lib/protomatter.jar" />
| <pathelement location="${code}/lib/xerces-2.6.2.jar" />
| <pathelement location="${code}/lib/xml-apis.jar" />
| <pathelement location="${code}/lib/djep-full-latest.jar" />
| <pathelement location="${code}/lib/commons-beanutils-bean-collections.jar" />
| <pathelement location="${code}/lib/commons-beanutils-core.jar" />
| <pathelement location="${code}/lib/commons-beanutils.jar" />
| <pathelement location="${code}/lib/JoSQL-1.3.jar" />
| <pathelement location="${code}/lib/gentlyWEB-utils-1.1.jar" />
| <pathelement location="${code}/lib/asm.jar" />
| <pathelement location="${code}/lib/asm-attrs.jar" />
| <pathelement location="${code}/lib/jcommon-0.9.6.jar" />
| <pathelement location="${code}/lib/trove.jar" />
| <pathelement location="${code}/lib/jh.jar" />
| <pathelement location="${code}/lib/jfreechart-0.9.21.jar" />
| <pathelement location="${code}/lib/jintegra.jar" />
| <pathelement location="${code}/lib/junit-3.8.1.jar" />
| <pathelement location="${code}/lib/jdom.jar" />
| <pathelement location="${code}/lib/javax.servlet.jar" />
| <pathelement location="${code}/lib/javax.servlet.jsp.jar" />
| <pathelement location="${code}/lib/jax-qname.jar" />
| <pathelement location="${code}/lib/bcel.jar" />
| <pathelement location="${code}/lib/jnp-client.jar" />
| <!-- <pathelement location="${code}/lib/jbossall-client.jar" />-->
| <pathelement location="${code}/lib/jbossmq-client.jar" />
| <pathelement location="${code}/lib/jboss-system-client.jar" />
|
|
| <pathelement location="${code}/lib/javax.jms.jar" />
| <pathelement location="${code}/lib/excel2000.jar" />
|
| <!-- Jars for report scheduler utility -->
| <pathelement location="${code}/lib/axis.jar" />
| <pathelement location="${code}/lib/commons-discovery.jar" />
| <pathelement location="${code}/lib/idapi.jar" />
| <pathelement location="${code}/lib/webservices.jar" />
| </path>
|
| <target name="compile">
| <javac destdir="${build}" fork="true" debug="on" deprecation="on" memoryInitialSize="512m" memoryMaximumSize="1024m">
| <src path="${code}/src" />
| <include name="**/*.java" />
| <exclude name="com/novarum/nova/util/JIntegraServer.java" />
| <exclude name="com/ebw/nova/client/**" />
| <exclude name="com/ssmb/**" />
| <exclude name="com/ebw/nova/common/Batch*.*" />
| <classpath refid="project.class.path" />
| </javac>
| <mkdir dir="${code}/web/AccessControl/WEB-INF/classes" />
| <javac destdir="${code}/web/AccessControl/WEB-INF/classes" debug="on" deprecation="on">
| <src path="${code}/web/AccessControl/WEB-INF/src" />
| <include name="**/*.java" />
| <classpath refid="project.class.path" />
| <classpath>
| <pathelement location="${code}/web/AccessControl/WEB-INF/lib/struts.jar" />
| <pathelement location="${build}" />
| </classpath>
| </javac>
|
| </target>
|
| <target name="NovaJar">
| <jar destfile="${lib}/nova.jar" basedir="${build}">
| <include name="com/**" />
| <exclude name="**/JIntegraServer.class" />
| <exclude name="com/ebw/ejb/**" />
| <exclude name="com/novarum/nova/application/client/**" />
| <exclude name="com/novarum/nova/application/Help/**" />
| <exclude name="com/novarum/nova/application/local/**" />
| </jar>
| <jar destfile="${lib}/nova.jar" basedir="${code}/res" update="true" >
| <exclude name="images/**" />
| <exclude name="meta-inf/help/**" />
| <exclude name="reportTrigger/**" />
| <exclude name="properties/**" />
| </jar>
| </target>
|
| <target name="BeanJar">
| <ejbjar srcdir="${build}" descriptordir="${code}/build/descriptors/MQManager" basejarname="novaejb" flatdestdir="true">
| <dtd publicid="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" location="file:///${code}/build/dtds/ejb-jar_2_0.dtd" />
| <dtd publicid="-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" location="file:///${code}/build/dtds/application_1_3.dtd" />
| <dtd publicId="-//JBoss//DTD JBOSS 4.0//EN" location="../dtd/jboss_4_0.dtd"/>
| <dtd publicid="-//JBoss//DTD JBOSS 4.0//EN" location="file:///${code}/build/dtds/jboss-app_4_0.dtd" />
| <jboss destdir="${dest}"/>
| </ejbjar>
| </target>
|
| <target name="NovaSar">
| <jar destfile="${dest}/myapp.sar" basedir="${lib}" >
| <include name="nova.jar"/>
| <!--include name="com/ebw/nova/util/ApplicationStartupMBean.class"/-->
| </jar>
| <jar destfile="${dest}/myapp.sar" basedir="${code}/src" update="true" >
| <include name="META-INF/jboss-service.xml" />
| <exclude name="com/**" />
| </jar>
| </target>
|
| <target name="AccessControlWar">
| <war destfile="${dest}/acl.war" webxml="${code}/web/AccessControl/WEB-INF/web.xml">
| <fileset dir="${code}/web/AccessControl" excludes="${code}/web/AccessControl/WEB-INF/src, **/web.xml, **/MANIFEST.MF" />
| </war>
|
| <!-- Deleting .class files after creating war. -->
| <delete includeemptydirs="true">
| <fileset dir="${code}/web/AccessControl/WEB-INF/classes" includes="**/*" />
| </delete>
| </target>
|
| <target name="LibCopy">
| <copy file="${code}/lib/cglib-2.1.3.jar" todir="${lib}" />
| <copy file="${code}/lib/colt.jar" todir="${lib}" />
| <copy file="${code}/lib/commons-collections-2.1.1.jar" todir="${lib}" />
| <copy file="${code}/lib/commons-logging-1.0.4.jar" todir="${lib}" />
| <copy file="${code}/lib/concurrent-1.3.2.jar" todir="${lib}" />
| <copy file="${code}/lib/ehcache-1.1.jar" todir="${lib}" />
| <copy file="${code}/lib/jboss-cache.jar" todir="${lib}" />
| <copy file="${code}/lib/jboss-system.jar" todir="${lib}" />
| <copy file="${code}/lib/jgroups-2.2.7.jar" todir="${lib}" />
| <copy file="${code}/lib/jboss-jmx.jar" todir="${lib}" />
| <copy file="${code}/lib/jboss-common.jar" todir="${lib}" />
| <copy file="${code}/lib/jboss-minimal.jar" todir="${lib}" />
| <copy file="${code}/lib/jboss-j2ee.jar" todir="${lib}" />
| <copy file="${code}/lib/jax-qname.jar" todir="${lib}" />
| <copy file="${code}/lib/hibernate3.jar" todir="${lib}" />
| <copy file="${code}/lib/odmg-3.0.jar" todir="${lib}" />
| <copy file="${code}/lib/oro.jar" todir="${lib}" />
| <copy file="${code}/lib/protomatter.jar" todir="${lib}" />
| <copy file="${code}/lib/jdom.jar" todir="${lib}" />
| <copy file="${code}/lib/dom4j-1.6.1.jar" todir="${lib}" />
| <copy file="${code}/lib/log4j-1.2.11.jar" todir="${lib}" />
| <copy file="${code}/lib/xerces-2.6.2.jar" todir="${lib}" />
| <copy file="${code}/lib/xml-apis.jar" todir="${lib}" />
| <copy file="${code}/lib/vendor.jar" todir="${lib}" />
| <copy file="${code}/lib/asm.jar" todir="${lib}" />
| <copy file="${code}/lib/asm-attrs.jar" todir="${lib}" />
| <copy file="${code}/lib/djep-full-latest.jar" todir="${lib}" />
| <copy file="${code}/lib/commons-beanutils-bean-collections.jar" todir="${lib}" />
| <copy file="${code}/lib/commons-beanutils-core.jar" todir="${lib}" />
| <copy file="${code}/lib/commons-beanutils.jar" todir="${lib}" />
| <copy file="${code}/lib/JoSQL-1.3.jar" todir="${lib}" />
| <copy file="${code}/lib/trove.jar" todir="${lib}" />
| <copy file="${code}/lib/javax.jms.jar" todir="${lib}" />
| <copy file="${code}/lib/bcel.jar" todir="${lib}" />
| <copy file="${code}/lib/jnp-client.jar" todir="${lib}" />
| <!-- <copy file="${code}/lib/jbossall-client.jar" todir="${lib}" />-->
| <copy file="${code}/lib/jbossmq-client.jar" todir="${lib}" />
| <copy file="${code}/lib/jboss-system-client.jar" todir="${lib}" />
|
| <copy file="${code}/lib/gentlyWEB-utils-1.1.jar" todir="${lib}" />
| <copy file="${code}/build/descriptors/application.xml" todir="${metainf}" />
| <copy file="${code}/build/descriptors/jboss-app.xml" todir="${metainf}" />
|
|
|
| <!-- Jars for report scheduler utility -->
| <copy file="${code}/lib/axis.jar" todir="${lib}" />
| <copy file="${code}/lib/commons-discovery.jar" todir="${lib}" />
| <copy file="${code}/lib/idapi.jar" todir="${lib}" />
| </target>
|
| <target name="buildEarClean" depends="clean,compile,NovaJar,BeanJar,NovaSar,AccessControlWar,LibCopy">
| <delete includeemptydirs="true">
| <fileset dir="${build}" includes="**/*" />
| </delete>
| <jar destfile="${dest}/nova.ear" basedir="${dest}">
| <exclude name="bin/**" />
| </jar>
| <delete includeemptydirs="true">
| <fileset dir="${dest}" includes="**/*" excludes="nova.ear" />
| </delete>
| </target>
|
| <target name="buildEar" depends="setupDir,compile,NovaJar,BeanJar,NovaSar,AccessControlWar,LibCopy">
| <jar destfile="${dest}/nova.ear" basedir="${dest}">
| <exclude name="bin/**" />
| <exclude name="nova.ear" />
| </jar>
| <delete includeemptydirs="true">
| <fileset dir="${dest}" includes="**/*">
| <exclude name="bin/**" />
| <exclude name="nova.ear" />
| </fileset>
| </delete>
| </target>
|
| <!-- Target to build report scheduler -->
| <property name="rptFolderName" value="reportTrigger" />
| <property name="rptTrgBase" location="${build}/${rptFolderName}" />
| <target name="buildReportTrigger" depends="setupDir">
| <delete includeemptydirs="true" failonerror="false">
| <fileset dir="${rptTrgBase}" includes="**/*"></fileset>
| </delete>
| <delete includeemptydirs="true">
| <fileset dir="${dest}" includes="reportTrigger.zip"/>
| </delete>
| <mkdir dir="${rptTrgBase}/lib" />
| <mkdir dir="${rptTrgBase}/com/ebw/nova/common" />
| <mkdir dir="${rptTrgBase}/com/novarum/nova/bean" />
| <copy file="${code}/res/reportTrigger/LogMgr.txt"
| tofile="${rptTrgBase}/com/novarum/nova/bean/LogMgr.java" />
| <copy file="${code}/res/reportTrigger/ReportTrigger_MQ.properties"
| tofile="${rptTrgBase}/MQ.properties" />
| <copy todir="${rptTrgBase}/com/ebw/nova/common">
| <fileset dir="${code}/src/com/ebw/nova/common"
| includes="MessagingHelper.java, NovaExtConstant.java, TriggerMessage.java" />
| </copy>
| <copy todir="${rptTrgBase}">
| <fileset dir="${code}/res/reportTrigger" includes="**/*"
| excludes="LogMgr.txt, ReportTrigger_MQ.properties" />
| </copy>
| <javac destdir="${rptTrgBase}"
| classpath="${code}/lib/jbossmq-client.jar:${code}/lib/protomatter.jar">
| <src path="${rptTrgBase}" />
| <include name="**/*.java" />
| </javac>
|
| <delete includeemptydirs="true" failonerror="false">
| <fileset dir="${rptTrgBase}" includes="**/*.java" />
| </delete>
| <!--
| <jar destfile="${rptTrgBase}/reportTrigger.jar"
| basedir="${rptTrgBase}">
| <manifest>
| <attribute name="Class-Path" value="wljmsclient.jar" />
| <attribute name="Main-Class"
| value="com.ebw.nova.common.TriggerMessage" />
| </manifest>
| </jar>
| -->
| <copy todir="${rptTrgBase}/lib">
| <fileset dir="${code}/lib/" includes="jbossmq-client.jar, jboss-j2ee.jar"/>
| </copy>
|
| <zip destfile="${dest}/reportTrigger.zip" basedir="${rptTrgBase}/.." includes="${rptFolderName}/**/*" />
|
| <delete includeemptydirs="true" failonerror="false">
| <fileset dir="${rptTrgBase}" includes="**/*" />
| <fileset dir="${rptTrgBase}/.." includes="${rptFolderName}" />
| </delete>
| </target>
|
| </project>
Please help. I am struggling to fix it.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4042061#4042061
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4042061
17 years, 10 months
[Management, JMX/JBoss] - Re: how to get mbean to deploy after ejb is bound
by mazz@jboss.com
I've had to do this very thing in my app. The easist thing to do is:
1) In your MBean, do not do anything that requires the EJBs in your start() method (that is, do not expect the EJBs to be deployed when your MBean is deployed).
2) Create a "reallyStartNow" method in your MBean - this is when it can perform its startup routines that require the EJBs to be deployed
3) if you don't already have a war in your ear, create one
4) create a StartupServlet and make sure it is loaded at startup (defined in web.xml appropriately)
5) in your StartupServlet's init() method, use JMX to find your MBean and invoke the "reallyStartNow" method.
MBeans are deployed first, then EJBs within your EAR, then Webapps within your EAR are started last. So, your init() method is called at a point in time when you know everything else is ready.
This works perfectly for me.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4042058#4042058
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4042058
17 years, 10 months