java.lang.ClassCastException
vermanaveen May 1, 2007 8:34 AMPlease 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.