In this blog we will create a startup class for WebLogic which can connect to the AQ queues and topics.
First I made a new jdeveloper 11G application with 3 projects.
The first is wls10.3. This project generates a startup class jar ( I imported the wls10 and jms1.1 code from Robert) In this project there is also a password file generator for the database user / password. WLS uses this password file to connect to the Oracle database .
The MDB project is my Message Driven Bean which will enqueue the AQ messages.
The last project is JmsClient which can dequeue or enqueue new messages to AQ through WLS. Not directly to the database.
For these projects I need the AQ and Weblogic 10.3 remote-client library.
Now we can create a new jar ( deploy project wls10.3 to jar ) called WLS103AQJMSStartupClass.jar
Let's create in the scott/tiger schema a jms queue table called TEST_TABLE and a queue TEST
begin
sys.dbms_aqadm.create_queue_table(
queue_table => 'TEST_TABLE',
queue_payload_type => 'SYS.AQ$_JMS_MESSAGE',
sort_list => 'PRIORITY',
compatible => '10.0.0',
primary_instance => 0,
secondary_instance => 0,
storage_clause => 'tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited )');
end;
/
begin
sys.dbms_aqadm.create_queue(
queue_name => 'TEST',
queue_table => 'TEST_TABLE',
queue_type => sys.dbms_aqadm.normal_queue,
max_retries => 5,
retry_delay => 0,
retention_time => 0);
end;
/
Make sure to start the queue
Next step is to generate the password files which holds the scott/tiger username password.
We do this by running the AQJMSPasswordUtility class. Delete the aqjms.dat and aqjms_user.properties files.
com.oracle.oems.weblogic.AQJMSPasswordUtility -username scott -password tiger
this will generate the password files agian
I use in this blog the Weblogic server of jdeveloper 11g. In this middleware home I create a new folder jms_lib ( D:\oracle\Middleware\jms_lib ) . In this folder I copied the following files WLS103AQJMSStartupClass.jar, aqapi.jar , aqjms.dat, aqjms_user.properties and aqjms.properties files.
Change the aqjms.properties file so it matches with your database and queue.
# Oracle database connection-related properties#
Server=XPCND7010XMP
Port=1521
DBInstance=orcl
These are important settings ( I will use AQJMS_QueueConnectionFactory as my jndi connection factory lookup, I have a queue and I don't use XA )
XAQueueConnectionFactoryJNDIName=AQJMS_XAQueueConnectionFactory
QueueConnectionFactoryJNDIName=AQJMS_QueueConnectionFactory
XATopicConnectionFactoryJNDIName=AQJMS_XATopicConnectionFactory
TopicConnectionFactoryJNDIName=AQJMS_TopicConnectionFactory
Change QueueName1 to TEST ( the name of the Queue in the scott schema)
QueueName1=TEST
#QueueName2=JMSDEMO_QUEUE2
#TopicName1=JMSDEMO_TOPIC1
Give the queue name a jndi name so we can use this name in the JNDI lookup of the queue
QueueJNDIName1=ORAQ_TEST
#QueueJNDIName2=ORAQ_JMSDEMO_QUEUE2
#TopicJNDIName1=ORAQ_JMSDEMO_TOPIC1
We are ready with changing this file. Now we can configure Weblogic so it uses the startup class.
first open the setDomainEnv.cmd file located in D:\oracle\Middleware\jdeveloper\system\system11.1.1.0.31.51.56\DefaultDomain\bin
Add -Doracle.jms.useEmulatedXA=false -Doracle.jms.useNativeXA=true to the JAVA_PROPERTIES variable
and Add D:\oracle\Middleware\jms_lib\WLS103AQJMSStartupClass.jar;D:\oracle\Middleware\jms_lib\aqapi.jar to the PRE_CLASSPATH variable
Start the WebLogic Server where we will create a new Startup Class
Or you can change the config.xml and add the startupclass to this xml
<startup-class>
<name>AQStartUpClass</name>
<target>DefaultServer</target>
<deployment-order>1000</deployment-order>
<class-name>com.oracle.oems.weblogic.AQJMSStartupClass</class-name>
<arguments>AQJMSPropertiesFile=aqjms.properties,AQJMSPasswordFile=aqjms_user.properties,AQJMSSecretFile=aqjms.dat,AQJMSConfigDirectory=D:/oracle/Middleware/jms_lib</arguments>
<failure-is-fatal>true</failure-is-fatal>
<load-before-app-deployments>true</load-before-app-deployments>
<load-before-app-activation>true</load-before-app-activation>
</startup-class>
Restart Weblogic and deploy the Message Driven Bean to WLS or use the dequeue / enqueue class to connect to weblogic / aq.
Here is some code from the dequeue java class which can connect to weblogic.
String queueName = "ORAQ_TEST";
String queueConnectionFactoryName = "AQJMS_QueueConnectionFactory";
Context ctx;
try {
Properties parm = new Properties();
parm.setProperty("java.naming.factory.initial","weblogic.jndi.WLInitialContextFactory");
parm.setProperty("java.naming.provider.url","t3://localhost:7101");
parm.setProperty("java.naming.security.principal","weblogic");
parm.setProperty("java.naming.security.credentials","weblogic");
ctx = new InitialContext(parm);
QueueConnectionFactory connectionFactory =
(QueueConnectionFactory)ctx.lookup(queueConnectionFactoryName);
connection = connectionFactory.createQueueConnection();
connection.start();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queue = (Queue)ctx.lookup(queueName);
receiver = session.createReceiver(queue);
try {
javax.jms.TextMessage textMessage = (javax.jms.TextMessage)receiver.receive();
System.out.println("Receiving message [" + textMessage.getJMSMessageID() + "] enqueued at " + new Timestamp(textMessage.getJMSTimestamp()).toString());
String xmlText = textMessage.getText();
System.out.println(xmlText);
} catch (JMSException jmse) {
jmse.printStackTrace();
}
receiver.close();
session.close();
connection.close();
} catch (JMSException je) {
throw new RuntimeException("Fout opgetreden bij het starten ",je);
} catch (Throwable t) {
throw new RuntimeException("Fout opgetreden bij het starten ",t);
Download the 11g example project here
Thanks Edwin for the post. I am also looking for a MDB listening to AQ. I have query on the startup class that dequeues the message when you restart the server. Would the java class be listening to the message continously like MDB which gets triggered onMessage event ? If not how can we configure the java class that keeps listening to this AQ continously.
ReplyDeleteHi, you should create a mdb bean and a deployment descriptor
ReplyDeletehere the code for the mdb
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode" , propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType" , propertyValue = "javax.jms.Queue")
},
mappedName = "weblogic.wsee.DefaultQueue",
name = "AQJMS_QueueMDB"
)
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MessageDrivenEJBBean implements MessageListener {
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage)message;
}
}
and here is the weblogic-ejb-jar.xml file
<?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar">
<weblogic-enterprise-bean>
<ejb-name>AQJMS_QueueMDB</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>10</max-beans-in-free-pool>
<initial-beans-in-free-pool>10</initial-beans-in-free-pool>
</pool>
<destination-jndi-name>ORAQ_JMS_IN</destination-jndi-name>
<connection-factory-jndi-name>AQJMS_XAQueueConnectionFactory</connection-factory-jndi-name>
</message-driven-descriptor>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
Thanks Edwin for your feedback. Just these settings on MDB and Weblogicejbjar.xml would be sufficient or should I need to configure foreign JMS provider in Weblogic admin. I am using Weblogic 10g Rel 3 server. Kindly guide.
ReplyDeleteHi,
ReplyDeleteif you this startup class then this is enough.
thanks
Thanks Edwin for your quick response.
ReplyDeleteCan't we have a simple logic of receiving it from MDB using FOreign JMS server in WL Server rather than using the start up class.
Kindly apologise if I am deviating from your intended post.
Hi,
ReplyDeleteI tried it but I don't got it working, I used a jms bridge, not the foreign jndi provider ( maybe this will work). I think you will get some serial id class errors
good luck and let me know if it works
Forgot to tell, I also tried using Bridge, but it gives out of memory error for which Oracle suggests to try using JROCKIT JVM. Unfortunately our deployment environment is IBM AIX for which there is only IBM supplied JDK.
ReplyDeleteSetting up a AQ Foreign JMS server works fine with Weblogic 10.3.1 (the one that is part of FMW 11G). If you want to avoid MDB you could also write a simple web service (using @WebService annotation) that listens and can post to AQ. I got this to work too. So it can be done without startup class. See this link for some good official documentation
ReplyDeleteLooks like you have a new blog that talks about how to do it using 10.3.1. Too bad I saw this one first based on the google key words I used. But I 'm glad you wrote that new one. For others who come here first but are using 10.3.1 you may want to look at his new blog
ReplyDelete"15.10.2009 17:20:55 EEST" "Warning" "EJB" "BEA-010061" "The Message-Driven EJB: MDBMobile is unable to connect to the JMS destination: AQJMS_MOBILE_QUEUE. The Error was:
ReplyDelete[EJB:011013]The Message-Driven EJB attempted to connect to the JMS connection factory with the JNDI name: AQJMS_QueueConnectionFactory. However, the object with the JNDI name: AQJMS_QueueConnectionFactory is not a JMS connection factory. NestedException Message is :com.oracle.oems.weblogic.AQJMSQueueConnectionFactory"
Hi Avia,
ReplyDeleteCan you send me more information, and did you take a look at the foreign server in wls 10.3.1
thanks Edwin
Weblogic@twist> cat aqjms.properties
ReplyDeleteServer=10.0.10.10
Port=1521
DBInstance=twistdb
QueueConnectionFactoryJNDIName=AQJMS_QueueConnectionFactory
TopicConnectionFactoryJNDIName=AQJMS_TopicConnectionFactory
XAQueueConnectionFactoryJNDIName=AQJMS_XAQueueConnectionFactory
XATopicConnectionFactoryJNDIName=AQJMS_XATopicConnectionFactory
QueueName1=AQJMS_MOBILE_QUEUE
QueueJNDIName1=AQJMS_MOBILE_QUEUE
Weblogic@twist> cat aqjms_user.properties
AQJMS.username={3DES}/aBC0muajS0\=
AQJMS.password={3DES}ynHYW/RbJtM\=
AQStartUpClass: PropertiesFile=aqjms.properties,AQJMSPasswordFile=aqjms_user.properties,AQJMSSecretFile=aqjms.dat,AQJMSConfigDirectory=/oracle/weblogic/jms_lib/
Weblogic@twist> cat setDomainEnv.sh
JAVA_PROPERTIES="${JAVA_PROPERTIES} -Doracle.jms.useEmulatedXA=false -Doracle.jms.useNativeXA=true "
PRE_CLASSPATH="/oracle/weblogic/jms_lib/AQJMSStartupClass.jar:/oracle/weblogic/jms_lib/aqapi.jar"
Weblogic@twist> cat weblogic-ejb-jar.xml
[?xml version = '1.0' encoding = 'UTF-8'?>
[!--weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar "
xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar"-->
[weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar">
[weblogic-enterprise-bean>
[ejb-name>MDBMobile[/ejb-name>
[message-driven-descriptor>
[destination-jndi-name>AQJMS_MOBILE_QUEUE[/destination-jndi-name>
[connection-factory-jndi-name>AQJMS_QueueConnectionFactory[/connection-factory-jndi-name>
[!--destination-jndi-name>jms/JMSSST_Queue_Mobile[/destination-jndi-name-->
[!--connection-factory-jndi-name>jms/JMSSST_Connection_Factory_DB[/connection-factory-jndi-name-->
[/message-driven-descriptor>
[/weblogic-enterprise-bean>
[/weblogic-ejb-jar>
Weblogic@twist> cat log
[15.10.2009 17:57:17 EEST> [Info> [WebLogicServer> [BEA-000288> [com.oracle.oems.weblogic.AQJMSStartupClass reports: SUCCESS: Bound the following Oracle AQ objects into WebLogic JNDI:
XAQueueConnectionFactory -> AQJMS_XAQueueConnectionFactory
QueueConnectionFactory -> AQJMS_QueueConnectionFactory
XATopicConnectionFactory -> AQJMS_XATopicConnectionFactory
TopicConnectionFactory -> AQJMS_TopicConnectionFactory
Queue(s):
1.) AQJMS_MOBILE_QUEUE -> AQJMS_MOBILE_QUEUE
[16.10.2009 9:25:22 EEST> [Warning> [EJB> [BEA-010096> [The Message-Driven EJB: MDBMobile is unable to connect to the JMS destination or bind to JCA resource adapter: AQJMS_MOBILE_QUEUE. Connection failed after 5 569 attempts. The MDB will attempt to reconnect/rebind every 10 seconds. This log message will repeat every 600 seconds until the condition clears.>
[16.10.2009 9:25:22 EEST> [Warning> [EJB> [BEA-010061> [The Message-Driven EJB: MDBMobile is unable to connect to the JMS destination: AQJMS_MOBILE_QUEUE. The Error was:
[EJB:011013]The Message-Driven EJB attempted to connect to the JMS connection factory with the JNDI name: AQJMS_QueueConnectionFactory. However, the object with the JNDI name: AQJMS_QueueConnectionFactory is not a JMS connection factory. NestedException Message is :com.oracle.oems.weblogic.AQJMSQueueConnectionFactory>
foreign server is not set.
ReplyDelete:)
difficult to imagine how to configure
Very Strange,
ReplyDeleteit looks fine. I will try your configuration back home. Can you see the jndi objects in the jndi browser and when wls start is there an error of the startup class or logging that it successfully started.
thanks Edwin
I find another way
ReplyDeleteupdate weblogic to 10.3.1
remove all startup classes, aqapi.jar and other libraries
configure foreign server
<foreign-server name="AQForeignServer_DB">
<sub-deployment-name>AQForeignServer_DB</sub-deployment-name>
<default-targeting-enabled>false</default-targeting-enabled>
<foreign-destination name="MOBILE_QUEUE">
<local-jndi-name>jms/aq/MOBILE_QUEUE</local-jndi-name>
<remote-jndi-name>Queues/AQJMS_MOBILE_QUEUE</remote-jndi-name>
</foreign-destination>
<foreign-connection-factory name="DBConnectionFactory">
<local-jndi-name>ms/aq/DBConnectionFactory</local-jndi-name>
<remote-jndi-name>QueueConnectionFactory</remote-jndi-name>
</foreign-connection-factory>
<initial-context-factory>oracle.jms.AQjmsInitialContextFactory</initial-context-factory>
<jndi-property>
<key>datasource</key>
<value>jdbc/scottDS</value>
</jndi-property>
</foreign-server>
Queues/AQJMS_MOBILE_QUEUE
Queues/scott.AQJMS_MOBILE_QUEUE
Where Queues is system sysnonym for javax.jms.Queue and AQJMS_MOBILE_QUEUE database queue
QueueConnectionFactory - system synonym for
javax.jms.QueueConnectionFactory
@MessageDriven(name = "MDBMobile", mappedName = "weblogic.wsee.DefaultQueue")
@TransactionManagement(TransactionManagementType.BEAN)
@TransactionAttribute(TransactionAttributeType.NEVER)
public class MDBMobile implements MessageDrivenBean, MessageListener {
public void onMessage(Message message) {
oracle.jms.AQjmsTextMessage mm = (oracle.jms.AQjmsTextMessage)message;
String ACTION = mm.getStringProperty("ACTION");
}
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>MDBMobile</ejb-name>
<message-driven-descriptor>
<destination-jndi-name>jms/aq/MOBILE_QUEUE</destination-jndi-name>
<connection-factory-jndi-name>jms/aq/DBConnectionFactory</connection-factory-jndi-name>
<jms-polling-interval-seconds>1</jms-polling-interval-seconds>
</message-driven-descriptor>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
http://forums.oracle.com/forums/thread.jspa?messageID=3813024
http://download.oracle.com/docs/cd/E12839_01/web.1111/e13738/aq_jms.htm#CJAECHCC
Edwin,
ReplyDeleteMy jms config for my jms module has something like :
foreign-server name="AQJMSForeignServer">
11GEvalSubDeployment
false
Queue/MandInvcERRJMSQueue
Queues/AIA_MANDINVCERRJMSQUEUE
aqjms/XAQueueConnectionFactory
XAQueueConnectionFactory
oracle.jms.AQjmsInitialContextFactory
datasource
jdbc/AQDataSource
I have created a new outbound connection jndi in the deployed JMSAdapter and updated the ConnectionFactoryLocation as aqjms/XAQueueConnectionFactory (as per the jms config file above). Even then I am unable to connect to the Queue mentioned. Its giving me the error as per the bpel snippet :
Exception occured when binding was invoked. Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'Produce_Message' failed due to: ERRJMS_ERR_CR_QUEUE_PROD. ERRJMS_ERR_CR_QUEUE_PROD. Unable to create Queue producer due to JMSException. ". The invoked JCA adapter raised a resource exception. Please examine the above error message carefully to determine a resolution.
JMS-190: Queue Queue/MandInvcERRJMSQueue not found
Can you please look into this? Looking desperately for a solution to this.
Thanks,
Aparajeeta
Hi,
ReplyDeletecan you send your config.xml and make some pics of the important steps, resource adapter , jms server & jms module targets , sub deployment and jms adapter steps in soa suite.
biemond at gmail dot com
thanks Edwin
Edwin,
ReplyDeleteI tried to utilize the startup class with modifications to the aqjms.properties and aqjms_user.properties as per my Queue, QCF configs.
I got no error during binding but the startup class invocation failed with the following error :
#### <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> Failed to invoke startup class "AQJMSStartupClass", java.lang.UnsupportedOperationException: WebLogic server side components must use AQ JMS datasource configuration
java.lang.UnsupportedOperationException: WebLogic server side components must use AQ JMS datasource configuration
at oracle.jms.AQjmsQueueConnectionFactory.createQueueConnection(AQjmsQueueConnectionFactory.java:329)
at com.oracle.oems.weblogic.AQJMSStartupClass.startup(AQJMSStartupClass.java:439)
at weblogic.management.deploy.classdeployment.ClassDeploymentManager.invokeStartup(ClassDeploymentManager.java:278)
at weblogic.management.deploy.classdeployment.ClassDeploymentManager.invokeClass(ClassDeploymentManager.java:256)
at weblogic.management.deploy.classdeployment.ClassDeploymentManager.access$000(ClassDeploymentManager.java:54)
at weblogic.management.deploy.classdeployment.ClassDeploymentManager$1.run(ClassDeploymentManager.java:205)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.management.deploy.classdeployment.ClassDeploymentManager.invokeClassDeployment(ClassDeploymentManager.java:198)
at weblogic.management.deploy.classdeployment.ClassDeploymentManager.runStartupsBeforeAppDeployments(ClassDeploymentManager.java:145)
at weblogic.management.deploy.classdeployment.ClassDeploymentService.start(ClassDeploymentService.java:20)
at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
>
Can you tell what went wrong here?
Thanks,
Aparajeeta
Hi
ReplyDeletewhat version of wls do you use. I tested this in 10.3.0 in a higher version of wls you can use Foreign Server.
thanks
Can be this use with XA connetion? I need to dequeue on one AQ a enqueue on another AQ within one transaction
ReplyDeleteHi,
ReplyDeletethat should work.
thanks
ok, and should I use this as well?: "-Doracle.jms.useEmulatedXA=false -Doracle.jms.useNativeXA=true"
ReplyDeleteWell, there is a bug in WLS causing ClassCastException when using these with OSB and XA. The bug is going to be fixed in OSB 11g.
ReplyDeleteThanks Edvin for this great post.
ReplyDeleteI have a stand-alone java application (client) which runs on JDK 1.4 on SCO Unix operating system and this client needs to enqueue and dequeue AdtMessage (or jms_message)messages into WLS 10.3.1 AQ queues which are created in oracle 11g r2.
I'm wondering if your solution works under jdk 1.4?if so, could you please suggest which jar files I need in order to run your sample in such environment.
Thanks
Hi,
ReplyDeleteYou can try to enqueue and dequeue on wls with AQ. But maybe you will have 2 problems. first need a wlfullclient. with 11g you can generate one for jdk 1.5 and 1.6
second dont think it is seriazable because of AQ classes.
but you don't need wls , you can do it directly or first lookup a datasource in wls.
here some blogs of mine to help you
http://biemond.blogspot.com/2008/02/jndi-connections-lookup-with-rmi-and.html
or this
http://biemond.blogspot.com/2008/10/lookup-oracle-database-queue-aq-with.html
Help - I am getting the exception below. Has this been resolved?
ReplyDeleteCaused by: java.lang.ClassCastException: weblogic.jdbc.rmi.SerialConnection_weblogic_jdbc_rmi_internal_ConnectionImpl_weblogic_jdbc_wrapper_JTAConnection_weblogic_jdbc_wrapper_XAConnection_oracle_jdbc_driver_LogicalConnection_1033_WLStub cannot be cast to oracle.jdbc.internal.OracleConnection
at oracle.jms.AQjmsGeneralDBConnection.getProviderKey(AQjmsGeneralDBConnection.java:96)
at oracle.jms.AQjmsGeneralDBConnection.(AQjmsGeneralDBConnection.java:65)
at oracle.jms.AQjmsDBConnMgr.getConnection(AQjmsDBConnMgr.java:566)
... 5 more
Hi,
ReplyDeleteare you trying to lookup this queue in a other jmv then the weblogic jvm.
this is not supported, you can do it in a mdb, soa suite or a webapp deployed on this wls server.
thanks
Hello Edwin,
ReplyDeleteYour example supports sending a message from OWS to an Oracle database. Is it also possible to send a JMS message from an Oracle database to an Oracle Weblogic Server using AQ? If so how is it done? If not, what approach would you use?
Thanks,
Vince
Hi,
ReplyDeletethis is old , now you can use jms foreign server with AQ ( jms text message )
http://biemond.blogspot.com/2009/07/using-aq-jms-text-message-in-wls-1031.html
and it works in all directions from wls to aq and back.
thanks
Hi Edwin. I was looking for the code posted in your first reply comment in this post (April 22, 2009 4:16 PM). I am new in this topic. I was googling but there is not a tutorial specifically of WL10 + JMS (with examples), and the explanation of each tag, and the relation with weblogic-ejb-jar.xml For example, I found in the code that the property mappedName is not used. If you know of a tutorial with a huge explanation please let me know. Thanks, Esteban
ReplyDeleteHi Edwin,
ReplyDeleteI have configured the startup class the sameway that you mentioned. The jar is added to the classpath. But the class is not beiing invoked. The logs inside the startup class are not written and this suggests that the method is not invoked.
But If I remove the jar from classpath class not found exception is thrown.
Can you help me with this issue.