JBoss message driven bean calling a session bean
Hi guys, can you please help me? I want my mdb to call my session bean....can you provide me some examples of ejb-jar.xml and jboss.xml with regards to this configuration....thanks...im creating my deployment descriptors manually
Here is a little example, I hope it will help you.
ejb-jar.xml
=============================================
<?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 >
<enterprise-beans>
<!-- Session Beans -->
<session >
<display-name>TestSessionEJB</display-name>
<ejb-name>TestSession</ejb-name>
<home>mdbtest.interfaces.TestSessionHome</home>
<remote>mdbtest.interfaces.TestSession</remote>
<local-home>mdbtest.interfaces.TestSessionLocalHome</local-home>
<local>mdbtest.interfaces.TestSessionLocal</local>
<ejb-class>mdbtest.session.TestSessionEJB</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
... </session>
<!-- Message Driven Beans -->
<message-driven >
<description><![CDATA[]]></description>
<display-name>TestMessageEJB</display-name>
<ejb-name>TestMessage</ejb-name>
<ejb-class>mdbtest.message.TestMessageEJB</ejb-class>
<transaction-type>Container</transaction-type>
<message-selector></message-selector>
<acknowledge-mode>Auto-acknowledge</acknowledge-mode>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
<subscription-durability>NonDurable</subscription-durability>
</message-driven-destination>
<ejb-local-ref >
<ejb-ref-name>ejb/TestEjb</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>mdbtest.interfaces.TestSessionLocalHome</local-home>
<local>mdbtest.interfaces.TestSessionLocal</local>
<ejb-link>TestSession</ejb-link>
</ejb-local-ref>
</message-driven>
</enterprise-beans>
</ejb-jar>
jboss.xml:
=============================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">
<jboss>
<enterprise-beans>
<session>
<ejb-name>TestSession</ejb-name>
<jndi-name>ejb/MdbTest/TestSession</jndi-name>
<local-jndi-name>TestSessionLocal</local-jndi-name>
<configuration-name>Standard Stateless SessionBean</configuration-name>
</session>
<message-driven>
<ejb-name>TestMessage</ejb-name>
<destination-jndi-name>queue/MyTestQueue</destination-jndi-name>
<configuration-name>Standard Message Driven Bean</configuration-name>
</message-driven>
</enterprise-beans>
<resource-managers>
</resource-managers>
</jboss>
Similar Messages
-
Call session bean in message driven bean
Is it a best practice calling a session bean every time arrive a message in a message driven bean?
Regards
Message was edited by:
gionnyDeepWhy not?
You can call Session Bean from a Message Driven Bean as long as your J2EE Server is able to handle the messages. -
JNDI Naming Problem accessing Session Bean from Message Driven Bean
Hi,
I am facing a very strange problem in JNDI look up accessing a Session Bean from a Message Driven Bean. I have a session fa�ade bean(Remote Bean) which is being called from Struts Action class getting the home reference from the ServiceLocator (I have implemented ServiceLocator pattern to obtain JNDI reference for all EJBs). When I am calling the session fa�ade EJB from the Struts Action class everything is working fine.
But when I am trying to call the same EJB from my Message Driven Bean, I am getting a JNDI exception (NameNotFoundException - No Object bound to name �java:comp/env/ejb/EJBJNDIName�). I am trying to get the remote reference from the same ServiceLocator which is successfully providing me a reference while calling from the struts action class. But the same ServiceLocator is not able to provide me a reference while calling from the Message Driven Bean. If I use the JNDI name directly like �EJBJNDIName� in the lookup it is working fine. The lookup for the name is working fine and I am able to call the Session Fa�ade bean with that reference.
I am really not sure what exactly the problem is. If I have any problem in the ServiceLocator, it should have given me the same error while calling from Struts Action class. But it is working fine with the full name �java:comp/env/ejb/EJBJNDIName� calling from the struts action class. I am not sure whether Message Driven Bean has something to do with it. Why I am not able to get a reference of the EJB with the full name? Please Help.
Thanks
AmitHi Bhagya,
Thanks for your response. I think from EJB container we can call Local EJBs with the full JNDI name. The session facade bean which is being called is a remote bean. From the session facade bean I am calling a local stateless session bean for database access. I am getting the reference of the local EJB from my session facade bean with full JNDI name "java:comp/env/ejb/EJBJNDIName". It is working fine with out any problem. My servicelocator is able to provide me the reference of the local EJB from the session facade remote bean with Full JNDI name. I am only having this problem calling from the MDB. I am really not sure whether what is causing it?
Thanks
Amit -
Message Driven Beans: how to receive and send in a single session?
Hello
How to receive and send JMS messages in a message driven bean using a single session?
Thanks.Are you referring to writing code within the onMessage method itself to receive JMS messages?
If so, that is not a pattern that is recommended, especially not in the case of a blocking JMS
receieve. If you must write an explicit JMS receive within an EJB component it's best to use
a "check the queue" approach where you give a very small timeout for the receive. That way
if the message is there it will be returned but if not the call will not block.
You'll also need to take the transactional settings of the onMessage method into account.
If your are sending a message and then waiting for a response, those two actions can
not be done within the same global transaction. For that, you'll need to either use
BMT and perform each in its own transaction or just not use global transactions at all,
in which case each send and receive operation will be atomic.
--ken -
Best way to call web service from Message Driven Bean
I'm q'ing msgs up and would like to use a message driven bean to forward them to
an external web service. Weblogic workshop does not seem to support web service
controls in an EJB project. Any suggestions?
Thanks,
PaulPaul,
A non-trivial alternative, since you have the WSDL, would be to forget about trying
to use generated client code and just use JAX-RPC dynamic invocation instead.
That's how I call external web services from within an EJB in situations in which
generated client code cannot be incorporated prior to deployment. Minimally all
that is required is the WSDL and the service name, port name, and operation name,
although if non-builtin parameter types are used then you will have to manipulate
the service's type mapping registry.
Mark
"Paul" <[email protected]> wrote:
>
I've taken our wsdl and generated a web service in Workshop 8.1 using
XMLBeans.
This produces a web page that contains a link"Java Proxy" for downloading
generated
client code. I assume this is the same as clientgen. It's interesting
that
it does not
use XMLBeans like the web service that generated it. It uses a different
serialization
method.
I've used this generated code to call the web service. Although the
client seems
to run
successfully to completion, I get the following error in the weblogic
server console:
<Sep 29, 2003 7:46:24 AM EDT> <Error> <WLW> <000000> <Failure=com.bea.wlw.runtim
e.core.request.ResponseValidationException: java.lang.RuntimeException:
Protocol
'http-soap' not available on this operation. [ServiceException]>
<Sep 29, 2003 7:46:24 AM EDT> <Warning> <WLW> <000000> <Returning HTTP
500 due
t
o SOAP fault occurring on DispFile=pjm.srcm.webservices.face.Receptor>
Frustrating...
Bruce Stephens <[email protected]> wrote:
Hi Paul,
Could you not first use clientgen on the external webservice, then take
the stubs it created, then add these to your code along with the
onMessage(Message msg) and roll it into the MBean?
We don't have exactly that example, but you might take a look at this
one to get some ideas:
http://webservice.bea.com/message.zip
Hope this helps,
Bruce
Paul wrote:
Bruce,
Don't think this will work for us. We are receiving data internallythrough
a JMS queue. We need to pull it off the queue (MDB), massage it alittle and
send it to an external web service. The link you sent me was howto implement
a web service with JMS.
I started out by trying to use the Web Service and JMS controls butit doesn't
seem like I can use a JMS control because that requires a conversationID,
which we don't have because nothing is comming in through a web services.
Paul
Bruce Stephens <[email protected]> wrote:
Hi Paul,
There is a chapter in the docs on this. See if this helps,
http://edocs.bea.com/wls/docs81/webserv/jms.html#1067060
Thanks,
Bruce
Paul wrote:
I'm q'ing msgs up and would like to use a message driven bean to
forward
them to
an external web service. Weblogic workshop does not seem to supportweb service
controls in an EJB project. Any suggestions?
Thanks,
Paul -
Message Driven Bean: problem with @RunAs annotation
I am having a problem using the @RunAs annotation in a message driven bean.
I would like the code in my onMessage() method to be executed with a specific role/user, so I want to use the @RunAs annotation to achieve this.
I am running weblogic 10.0.
I have created the following in weblogic console:
- Group "TestGroup"
- User "TestUser", member of "TestGroup"
- Global Role "TestRole", role condition: "Group : TestGroup"
The MDB:
package be.cegeka.test.mdb;
import javax.annotation.Resource;
import javax.annotation.security.RunAs;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.Message;
import javax.jms.MessageListener;
@MessageDriven(
mappedName = "testQueue",
name = "TestMDB",
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
@RunAs("TestRole")
public class TestMDB implements MessageListener {
@Resource
private MessageDrivenContext mdContext;
* {@inheritDoc}}
public void onMessage(Message msg) {
System.out.println("Handling message for user "
+ mdContext.getCallerPrincipal().getName());
}[u]The ejb-jar.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
<assembly-descriptor>
<security-role>
<description>
Test Role.
</description>
<role-name>TestRole</role-name>
</security-role>
</assembly-descriptor>
</ejb-jar>
The weblogic-ejb-jar.xml file:
<weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/10.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/10.0 http://www.bea.com/ns/weblogic/10.0/weblogic-ejb-jar.xsd">
<security-role-assignment>
<role-name>TestRole</role-name>
<principal-name>TestUser</principal-name>
</security-role-assignment>
</weblogic-ejb-jar>I would have thought that the onMessage of the MDB would print "Handling message for user TestUser", but instead it prints "Handling message for user <anonymous>".
It seems as though the @RunAs annotation has no effect. Although I specified the role TestRole (mapped to the user TestUser), the code still seems to be executed by user anonymous.
Am I missing something?
Any help would be much appreciated! I've been looking at this poblem for quite a while now.Both beans (the MDB on WLS 10 and the session bean on WLS 8.1) use container managed transactions.
For the MDB I do not explicitly set the transaction attributes, so it should default to container managed transactions.
For the stateless session bean I have specified the following in the ejb-jar.xml file:
<ejb-jar>
<display-name>Weblogic8Service</display-name>
<enterprise-beans>
<session>
<ejb-name>Weblogic8Service</ejb-name>
<home>be.cegeka.rszv.test.session.Weblogic8ServiceRemoteHome</home>
<remote>be.cegeka.rszv.test.session.Weblogic8ServiceRemote</remote>
<ejb-class>be.cegeka.rszv.test.session.Weblogic8ServiceBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>Weblogic8Service</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>So as far as I understand it the transaction starts at the MDB (upon receival of a message). The transaction for the remote call to the stateless session bean (in the onMessage() of the MDB) is included in the transaction of the MDB and gets committed when the onMessage() method finishes and the transaction of the MDB itself gets committed.
Correct me if I'm wrong here. -
Message Driven Bean Concurrency
Hi:
I am working with message-driven beans (MDB). My understanding was that
these beans would read and execute concurrently. My tests show they do
not. I have setup a single MDB which contains the following trivial
implementation of onMessage...
public void onMessage(javax.jms.Message message) {
System.err.println("onMessage()");
try{
TextMessage tm = (TextMessage) message;
String text = tm.getText();
System.err.println("Received new message: " + text);
// Simulate non-trivial business process that takes ~10
seconds.
Thread.currentThread().sleep(10000);
}catch(Exception e){
e.printStackTrace();
Now I have a little test application that throws ten messages into the
queue. Each message is consumed from the queue SEQUENTIALLY which is
not my understanding of concurrent processing. So in all sending ten
messages to the queue each message is processed in turn taking 100 seconds
for the whole thing to complete instead of 10 MDB instances all chewing on
a different message and the whole thing would complete in roughly 10
seconds.
Is there a setup step that I have missed? I have bumped the
default.properties file messagebean.pool.size=30 from its default of 3.
It does create 10 bean instances, what for I don't know...
Thanks
SteveMessage beans are used for asynchronous calls, meaning that the container decides in what order to execute them. If you want to achieve concurrent calls consider using Session Beans.
Regards,
Dimitar -
Message Driven Bean reading multiple times from a jms queue
Hi,
I am facing a strange problem with my message driven bean. Its configured to read message from a jms queue. But sometimes it read the same message multiple times from the jms queue.
We are using weblogic server 8.1 sp5.
Please find below our descriptor files
ejb-jar.xml
<ejb-jar>
<display-name>ClarifyCRM_Process_Manager_13.1</display-name>
<enterprise-beans>
<session>
<display-name>ProcessManager</display-name>
<ejb-name>ProcessManager</ejb-name>
<home>com.clarify.procmgr.ejb.ProcessManagerHome</home>
<remote>com.clarify.procmgr.ejb.ProcessManagerRemote</remote>
<ejb-class>com.clarify.procmgr.ejb.ProcessManagerEJB</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
<message-driven>
<display-name>ProcessManagerListener</display-name>
<ejb-name>ProcessManagerListener</ejb-name>
<ejb-class>com.clarify.procmgr.ejb.ProcessManagerMDB</ejb-class>
<transaction-type>Bean</transaction-type>
<acknowledge-mode>Auto-acknowledge</acknowledge-mode>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>ProcessManager</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
weblogic-ejb-jar.xml
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>ProcessManager</ejb-name>
<stateless-session-descriptor>
<pool>
<max-beans-in-free-pool>100</max-beans-in-free-pool>
<initial-beans-in-free-pool>10</initial-beans-in-free-pool>
</pool>
</stateless-session-descriptor>
<enable-call-by-reference>False</enable-call-by-reference>
<jndi-name>ProcessManagerHome</jndi-name>
<dispatch-policy>PMExecuteQueue</dispatch-policy>
<remote-client-timeout>0</remote-client-timeout>
</weblogic-enterprise-bean>
<weblogic-enterprise-bean>
<ejb-name>ProcessManagerListener</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>100</max-beans-in-free-pool>
<initial-beans-in-free-pool>10</initial-beans-in-free-pool>
</pool>
<destination-jndi-name>clarify.procmgr.jms.queue.Execution</destination-jndi-name>
<connection-factory-jndi-name>clarify.procmgr.jms.factories.ExecConnection</connection-factory-jndi-name>
</message-driven-descriptor>
<enable-call-by-reference>True</enable-call-by-reference>
<dispatch-policy>PMListenerExecuteQueue</dispatch-policy>
<remote-client-timeout>0</remote-client-timeout>
</weblogic-enterprise-bean>
</weblogic-ejb-jar> The MDB is sometimes reading multiple times from clarify.procmgr.jms.queue.Execution
Also i would like to add here that the connection factory we are using clarify.procmgr.jms.factories.ExecConnection is having the following properties
ServerAffinity Enabled=true
XA connection factory enabled=false.
Please help me out here!!Maybe, your MDB "sometimes" throws an Exception in onMessage.
Check if this happens when you set <max-beans-in-free-pool>1</max-beans-in-free-pool>. -
Message-driven bean CMT can not be supported
Hi,
I�m trying to use IBM MQSeries 5.3 with S1AS7. The AS and MQ run under W2K SP3. At first I had no problem with deploying and running samples. I used C:\Sun\AppServer7\samples\ejb\mdb\simple\
I was able to put a test message into MQSeries queue and I saw it was processed by the MDB
Then I decided to change <transaction-type> from �Bean� to �Container� and I added <assembly-descriptor> where I set <trans-attribute> as �Required�.
Here is my new ejb-jar.xml
<?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'>
<!-- Copyright 2002 Sun Microsystems, Inc. All rights reserved. -->
<ejb-jar>
<display-name>SimpleMessageJAR</display-name>
<enterprise-beans>
<message-driven>
<display-name>SimpleMessageEJB</display-name>
<ejb-name>SimpleMessageEJB</ejb-name>
<ejb-class>samples.ejb.mdb.simple.ejb.SimpleMessageBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>SimpleMessageEJB</ejb-name>
<method-name>onMessage</method-name>
<method-params>
<method-param>javax.jms.Message</method-param>
</method-params>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
In this case I have the following server.log
[15/Dec/2002:15:29:00] FINE ( 1700): Requesting Server Session at: 1039955340843
[15/Dec/2002:15:29:00] FINE ( 1700): Got Server Session at: 1039955340859(1039955340843)
[15/Dec/2002:15:29:00] INFO ( 1700): CORE3282: stdout: In SimpleMessageBean.SimpleMessageBean()
[15/Dec/2002:15:29:00] FINEST ( 1700): Thread[MQQueueAgent (MYASQUEUE),5,RMI Runtime]: got session: com.sun.enterprise.jms.SessionWrapperBase@3c9616 from com.iplanet.ias.ejb.containers.IASServerSessionImpl@3508c0
[15/Dec/2002:15:29:00] INFO ( 1700): CORE3282: stdout: In SimpleMessageBean.setMessageDrivenContext()
[15/Dec/2002:15:29:00] INFO ( 1700): CORE3282: stdout: In SimpleMessageBean.ejbCreate()
[15/Dec/2002:15:29:00] FINEST ( 1700): start(): calling notify... com.iplanet.ias.ejb.containers.IASServerSessionImpl@3508c0
[15/Dec/2002:15:29:00] FINEST ( 1700): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@3508c0
[15/Dec/2002:15:29:00] FINEST ( 1700): Thread[Thread-28,5,RMI Runtime]: run(): calling Session.run() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@3508c0
[15/Dec/2002:15:29:00] FINEST ( 1700): Thread[Thread-28,5,RMI Runtime]: message-driven bean container onMessage :
JMS Message class: jms_text
JMSType: null
JMSDeliveryMode: 1
JMSExpiration: 0
JMSPriority: 0
JMSMessageID: ID:414d5120514d5f636c6f7564202020200628fc3d2000020f
JMSTimestamp: 1039955340820
JMSCorrelationID:null
JMSDestination: null
JMSReplyTo: null
JMSRedelivered: false
JMS_IBM_PutDate:20021215
JMSXAppID:C:\WINNT\system32\mmc.exe
JMS_IBM_Format:MQSTR
JMS_IBM_PutApplType:11
JMS_IBM_MsgType:8
JMSXUserID:alex
JMS_IBM_PutTime:12290082
JMSXDeliveryCount:1
111111111111111111
[15/Dec/2002:15:29:00] FINEST ( 1700): beforeMessageDelivery() not called
[15/Dec/2002:15:29:00] INFO ( 1700): MDB00040: [mdb-simple:SimpleMessageEJB]: Message-driven bean CMT can not be supported.
[15/Dec/2002:15:29:00] SEVERE ( 1700): MDB0008: Session.run() throws Exception [Message-driven bean CMT can not be supported.]
[15/Dec/2002:15:29:00] SEVERE ( 1700): MDB0009: Session.run() throws Exception
java.lang.RuntimeException: Message-driven bean CMT can not be supported.
at com.sun.enterprise.jms.SessionWrapperBase.run(SessionWrapperBase.java:200)
at com.iplanet.ias.ejb.containers.IASServerSessionImpl.run(IASServerSessionImpl.java:191)
at java.lang.Thread.run(Thread.java:536)
[15/Dec/2002:15:29:00] FINEST ( 1700): Thread[Thread-28,5,RMI Runtime]: in run(): return object com.iplanet.ias.ejb.containers.IASServerSessionImpl@3508c0 to pool ...
[15/Dec/2002:15:29:00] FINEST ( 1700): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@3508c0
If I use internal AS JMS I don�t have any trouble. Everything works fine.
Why it is possible to use MDB CMT with internal AS JMS provider?
What should I do to create MDB CMT with IBM MQSeries?
Alexei GladkovHi Alexei,
Sun ONE Application Server 7 does not support CMT MDBs with 3rd party JMS providers. (As you note, BMT MDBs work with MQSeries and Sun ONE App Server).
With the advent of the next J2EE CA spec version (1.5) and J2EE 1.4, a standard means of hooking JMS providers into app servers and MDBs will be made available. Shortly after J2EE 1.4 is released, you'll see this support in Sun ONE App Server.
From the J2EE 1.4 spec: "The Connector API now supports integration with asynchronous messaging systems, including the ability to plug in JMS providers."
Thanks,
Chris -
Jndi-name in Message Driven Bean
Hi
I have successfully created the ejb jar file for deployment using sun one studio . I created the message driven bean and I right clicked on the ejb and used the customize option to set the bean properties . But my problem is that the jndi-name in the <ejb> tags takes the value jms/(ejbname) instead of jms/(queuename) . I am attaching the xml file with this . Can any one tell how to set the jndi-name to queue value using studio
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 EJB 2.0//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-ejb-jar_2_0-0.dtd">
<sun-ejb-jar>
<enterprise-beans>
<name>ejb</name>
<ejb>
<ejb-name>Suneesh</ejb-name>
<jndi-name>jms/Suneesh</jndi-name> <resource-ref>
<res-ref-name>QueueConnectionFactory</res-ref-name>
<jndi-name>jms/QueueConnectionFactory</jndi-name>
</resource-ref>
<resource-env-ref>
<resource-env-ref-name>TestQueue</resource-env-ref-name>
<jndi-name>jms/TestQueue</jndi-name>
</resource-env-ref>
<pass-by-reference>false</pass-by-reference>
</ejb>
<ejb>
<ejb-name>Suneesh1</ejb-name>
<jndi-name>jms/Suneesh1</jndi-name>
<resource-ref>
<res-ref-name>QueueConnectionFactory</res-ref-name>
<jndi-name>jms/QueueConnectionFactory</jndi-name>
</resource-ref>
<resource-env-ref>
<resource-env-ref-name>TestQueue1</resource-env-ref-name>
<jndi-name>jms/TestQueue1</jndi-name>
</resource-env-ref>
<pass-by-reference>false</pass-by-reference>
</ejb>
</enterprise-beans>
</sun-ejb-jar>Hi Bhagya,
Thanks for your response. I think from EJB container we can call Local EJBs with the full JNDI name. The session facade bean which is being called is a remote bean. From the session facade bean I am calling a local stateless session bean for database access. I am getting the reference of the local EJB from my session facade bean with full JNDI name "java:comp/env/ejb/EJBJNDIName". It is working fine with out any problem. My servicelocator is able to provide me the reference of the local EJB from the session facade remote bean with Full JNDI name. I am only having this problem calling from the MDB. I am really not sure whether what is causing it?
Thanks
Amit -
How to transaction in the message driven bean?
hello
i write a message driven bean,that monitor the weblogic message queue,when a "Order"
object is witten to the queue,the mdb get it and write it to a entity bean "Orderinfo".all
of above logic is within the "onMessage" method of the mdb.
i want to encapsulate the flow in a transaction,see my code snippet of the onMessage
method:
ObjectMessage objMsg = (ObjectMessage) msg;
OrderVO orderVO = (OrderVO) objMsg.getObject();
System.out.println(orderVO.booklist);
OrderinfoHome orderinfoHome = (OrderinfoHome) ctx.lookup(
"java:/comp/env/orderinfo");
Orderinfo orderinfo = orderinfoHome.create(orderVO.orderID);
orderinfo.setAddress(orderVO.address);
orderinfo.setCustname(orderVO.custName);
orderinfo.setEmail(orderVO.email);
orderinfo.setBooklist(orderVO.booklist);
orderinfo.setPrice(new BigDecimal(orderVO.price));
and deploy descriptor snippet(ejb-jar.xml):
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>orderMDB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
i think during this transaction,there are two action:geting the object from the
queue and saving it to entity bean.in order to test the transaction,i modify the
jndi name of entity bean in the code to a WRONG one.redeploy my program,and send
a message to the queue,the mdb is activated,then the exception is thrown because
of the wrong jndi name.after that,i check the message queue,find that it is empty.why?i
think if the second action of the transaction is fail,the transaction should roll
back,the message should be send BACK to the queue.
i also ty to use the "javax.transaction.UserTransaction" in the onMessage method,but
the follwing exception is thrown:
javax.transaction.NotSupportedException: Another transaction is associated with
this thread.................................
who can help me,if any wrong with me,and how to use the transaction with the message
driven bean?
thank you.
The transaction should rollback if the MDB throws an
exception. Try changing your MDB code to
call "setRollbackOnly()" on the EJB
context (instead of throwing an exception) to see
if that works. If calling "setRollbackOnly()" fixes
the problem - then please contact customer support
and report a bug.
zbcong wrote:
> hello
>
> i write a message driven bean,that monitor the weblogic message queue,when a "Order"
> object is witten to the queue,the mdb get it and write it to a entity bean "Orderinfo".all
> of above logic is within the "onMessage" method of the mdb.
> i want to encapsulate the flow in a transaction,see my code snippet of the onMessage
> method:
>
>
> ObjectMessage objMsg = (ObjectMessage) msg;
> OrderVO orderVO = (OrderVO) objMsg.getObject();
> System.out.println(orderVO.booklist);
> OrderinfoHome orderinfoHome = (OrderinfoHome) ctx.lookup(
> "java:/comp/env/orderinfo");
> Orderinfo orderinfo = orderinfoHome.create(orderVO.orderID);
> orderinfo.setAddress(orderVO.address);
> orderinfo.setCustname(orderVO.custName);
> orderinfo.setEmail(orderVO.email);
> orderinfo.setBooklist(orderVO.booklist);
> orderinfo.setPrice(new BigDecimal(orderVO.price));
>
>
> and deploy descriptor snippet(ejb-jar.xml):
>
>
> <assembly-descriptor>
> ............
> ...........
>
> <container-transaction>
> <method>
> <ejb-name>orderMDB</ejb-name>
> <method-name>*</method-name>
> </method>
> <trans-attribute>Required</trans-attribute>
> </container-transaction>
> </assembly-descriptor>
>
>
> i think during this transaction,there are two action:geting the object from the
> queue and saving it to entity bean.in order to test the transaction,i modify the
> jndi name of entity bean in the code to a WRONG one.redeploy my program,and send
> a message to the queue,the mdb is activated,then the exception is thrown because
> of the wrong jndi name.after that,i check the message queue,find that it is empty.why?i
> think if the second action of the transaction is fail,the transaction should roll
> back,the message should be send BACK to the queue.
>
> i also ty to use the "javax.transaction.UserTransaction" in the onMessage method,but
> the follwing exception is thrown:
>
> javax.transaction.NotSupportedException: Another transaction is associated with
> this thread.................................
>
> who can help me,if any wrong with me,and how to use the transaction with the message
> driven bean?
>
> thank you.
>
>
-
Exception in setting up message-driven bean container: [MQJMS1010: not impl
Problem
=======
We are trying to configure and deploy a Message Driven
Bean to listen on a WebSphere MQ queue, using LDAP to
share knowledge of the Queue & Connection Factory.
But when we start the Sun One domain we get an exception:
javax.jms.JMSException: MQJMS1010: not implemented
(see log file at the end of this email)
Can anybody help please ?
The configuration of the various components are listed
below:
WebSphere MQ Configuration
==========================
Version 5.3
Queue Manager
QM_Test
Queues
PATH_MFP.Case.Request
Queue Type: Local
Channels
Channel_Test
Channel Type: Server Connection
Protocol Type: TCP/IP
LDAP configuration
==================
ldap://localhost/o=mqtest
cn=MFP_LOCAL_Factory
javaFactory=com.ibm.mq.jms.MQQueueConnectionFactoryFactory
javaClassName=com.ibm.mq.jms.MQQueueConnectionFactory
javaReferenceAddress=#3#QMGR#QM_Test
javaReferenceAddress=#6#CHAN#Channel_Test
javaReferenceAddress=#14#TM#SYSTEM.DEFAULT.MODEL.QUEUE
cn=MFP_LOCAL_Case_Request_Queue
javaFactory=com.ibm.mq.jms.MQQueueFactory
javaClassName=com.ibm.mq.jms.MQQueue
javaReferenceAddress=#9#QU#PATH_MFP.Case.Request
javaReferenceAddress=#10#QMGR#QM_Test
EJB configuration
=================
ejb-jar.xml
<message-driven>
<display-name>ServerMessageDrivenBean</display-name>
<ejb-name>ServerMessageDrivenBean</ejb-name>
<ejb-class>nz.co.acc.emi.server.connector.mdb.ServerMessageDrivenBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
sun-ejb-jar.xml
<ejb>
<ejb-name>ServerMessageDrivenBean</ejb-name>
<jndi-name>MFP_LOCAL_Case_Request_Queue</jndi-name>
<mdb-connection-factory>
<jndi-name>MFP_LOCAL_Factory</jndi-name>
</mdb-connection-factory>
</ejb>
Sun One configuration
=====================
MFPProcessing: JNDI: External Resources
MFP_LOCAL_Factory Enabled javax.jms.QueueConnectionFactory
JNDI Name: MFP_LOCAL_Factory
Resource Type: javax.jms.QueueConnectionFactory
JNDI Lookup: cn=MFP_LOCAL_Factory
Factoryclass: com.sun.jndi.ldap.LdapCtxFactory
Properties:
java.naming.provider.url ldap://localhost:389/o=mqtest
java.naming.security.authentication none
MFP_LOCAL_Case_Request_Queue Enabled javax.jms.Queue
JNDI Name: MFP_LOCAL_Case_Request_Queue
Resource Type: javax.jms.Queue
JNDI Lookup: cn=MFP_LOCAL_Case_Request_Queue
Factoryclass: com.sun.jndi.ldap.LdapCtxFactory
Properties:
java.naming.provider.url ldap://localhost:389/o=mqtest
server.xml
<mdb-container steady-pool-size="10" pool-resize-quantity="2" max-pool-size="60" idle-timeout-in-seconds="600" monitoring-enabled="true" log-level="FINEST" />
<jms-service port="1240" admin-user-name="admin" admin-password="admin" init-timeout-in-seconds="30" enabled="true" log-level="FINE" />
Sun One log file
================
server.log
[01/Mar/2004:10:06:48] INFO ( 657): CORE1116: Sun ONE Application Server 7.0.0_01
[01/Mar/2004:10:06:51] INFO ( 657): CORE5076: Using [Java HotSpot(TM) Server VM, Version 1.4.2_01] from [Sun Microsystems Inc.]
[01/Mar/2004:10:07:09] INFO ( 657): JMS5023: JMS service successfully started. Instance Name = domain1_MFPProcessing, Home = [C:/Sun/AppServer7/imq/bin].
[01/Mar/2004:10:07:13] INFO ( 657): JTS5014: Recoverable JTS instance, serverId = [100]
[01/Mar/2004:10:07:14] INFO ( 657): RAR5060: Install JDBC Datasources ...
[01/Mar/2004:10:07:14] INFO ( 657): RAR5059: Binding [JDBC DataSource Name: jdbc/MfsDataSourceJConn, Pool Name: MFSConnectionPool]
[01/Mar/2004:10:07:15] INFO ( 657): JMS5015: Install JMS resources ...
[01/Mar/2004:10:07:47] WARNING ( 657): [EntityContainer] Created EntityContainer....
[01/Mar/2004:10:07:49] INFO ( 657): LDR5010: All ejb(s) of [mfs] loaded successfully!
[01/Mar/2004:10:07:52] INFO ( 657): MDB00044: Deploying message-driven bean [emi:ServerMessageDrivenBean], consuming from [MFP_LOCAL_Case_Request_Queue]
[01/Mar/2004:10:07:52] FINE ( 657): Messages delivery is part of a container-managed tx
[01/Mar/2004:10:07:52] FINE ( 657): emi:ServerMessageDrivenBean:reconnect-delay-in-seconds=60, reconnect-max-retries=60, reconnect-enabled=true
[01/Mar/2004:10:07:53] INFO ( 657): MDB00028: [emi:ServerMessageDrivenBean]: Message-driven bean container using external connection factory object: [com.ibm.mq.jms.MQQueueConnectionFactory]
[01/Mar/2004:10:07:55] FINE ( 657): emi:ServerMessageDrivenBean: Setting message-driven bean pool max-pool-size=60, steady-pool-size=10, pool-resize-quantity=2, idle-timeout-in-seconds=600
[01/Mar/2004:10:07:55] FINE ( 657): Initializing server session factory
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@11576d7
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@2d5534
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@34d75f
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@127d15e
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@12297d7
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@1ecfeb
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@11576d7
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@2d5534
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@34d75f
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@127d15e
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@12297d7
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@1ecfeb
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@e4776b
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@15c458c
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@da1515
[01/Mar/2004:10:07:55] FINE ( 657): Created server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@19e3e24
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@e4776b
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@15c458c
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@da1515
[01/Mar/2004:10:07:55] FINEST ( 657): run(): before wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@19e3e24
[01/Mar/2004:10:07:55] INFO ( 657): MDB0001: Create message-driven bean pool with maximum pool size [60], bean idle timeout [600] seconds
[01/Mar/2004:10:07:55] SEVERE ( 657): MDB00030: [emi:ServerMessageDrivenBean]: Exception in setting up message-driven bean container: [MQJMS1010: not implemented]
[01/Mar/2004:10:07:55] FINE ( 657): MDB00018: [emi:ServerMessageDrivenBean]: Closing message-driven bean container connection
[01/Mar/2004:10:07:55] WARNING ( 657): [AbstractPool]: Cancelled pool timer task at: Mon Mar 01 10:07:55 NZDT 2004
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@11576d7
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@11576d7
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@2d5534
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@2d5534
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@2d5534
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@34d75f
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@34d75f
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@127d15e
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@127d15e
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@127d15e
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@11576d7
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@34d75f
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@12297d7
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@12297d7
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@1ecfeb
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@1ecfeb
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@e4776b
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@e4776b
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@12297d7
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@e4776b
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@15c458c
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@15c458c
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@da1515
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@da1515
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@1ecfeb
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@15c458c
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@da1515
[01/Mar/2004:10:07:55] FINEST ( 657): Thread[main,5,main]: in cleanup() ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@19e3e24
[01/Mar/2004:10:07:55] FINE ( 657): Destroyed server session: com.iplanet.ias.ejb.containers.IASServerSessionImpl@19e3e24
[01/Mar/2004:10:07:55] SEVERE ( 657): MDB00017: [ServerMessageDrivenBean]: Exception in creating message-driven bean container: [javax.jms.JMSException: MQJMS1010: not implemented]
[01/Mar/2004:10:07:55] FINEST ( 657): run(): after wait ... com.iplanet.ias.ejb.containers.IASServerSessionImpl@19e3e24
[01/Mar/2004:10:07:55] SEVERE ( 657): javax.jms.JMSException
javax.jms.JMSException: MQJMS1010: not implemented
at com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:418)
at com.ibm.mq.jms.MQQueueConnection.createConnectionConsumer(MQQueueConnection.java:602)
at com.sun.enterprise.jms.ConnectionWrapperBase.createConnectionConsumer(ConnectionWrapperBase.java:151)
at com.sun.ejb.containers.MessageBeanHelperQueueImpl.doSetup(MessageBeanHelperQueueImpl.java:67)
at com.sun.ejb.containers.MessageBeanHelperBase.setup(MessageBeanHelperBase.java:419)
at com.sun.ejb.containers.MessageBeanContainer.<init>(MessageBeanContainer.java:206)
at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:173)
at com.iplanet.ias.server.AbstractLoader.loadEjbs(AbstractLoader.java:345)
at com.iplanet.ias.server.ApplicationLoader.load(ApplicationLoader.java:81)
at com.iplanet.ias.server.AbstractManager.load(AbstractManager.java:134)
at com.iplanet.ias.server.ApplicationLifecycle.onStartup(ApplicationLifecycle.java:168)
at com.iplanet.ias.server.ApplicationServer.onStartup(ApplicationServer.java:269)
at com.iplanet.ias.server.J2EERunner.confPostInit(J2EERunner.java:162)
[01/Mar/2004:10:07:55] SEVERE ( 657): EJB5090: Exception in creating EJB container [javax.jms.JMSException: MQJMS1010: not implemented]
[01/Mar/2004:10:07:55] SEVERE ( 657): appId=emi moduleName=emiEjb_jar ejbName=ServerMessageDrivenBean
[01/Mar/2004:10:07:55] SEVERE ( 657): LDR5004: UnExpected error occured while creating ejb container
javax.jms.JMSException: MQJMS1010: not implemented
at com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:418)
at com.ibm.mq.jms.MQQueueConnection.createConnectionConsumer(MQQueueConnection.java:602)
at com.sun.enterprise.jms.ConnectionWrapperBase.createConnectionConsumer(ConnectionWrapperBase.java:151)
at com.sun.ejb.containers.MessageBeanHelperQueueImpl.doSetup(MessageBeanHelperQueueImpl.java:67)
at com.sun.ejb.containers.MessageBeanHelperBase.setup(MessageBeanHelperBase.java:419)
at com.sun.ejb.containers.MessageBeanContainer.<init>(MessageBeanContainer.java:206)
at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:173)
at com.iplanet.ias.server.AbstractLoader.loadEjbs(AbstractLoader.java:345)
at com.iplanet.ias.server.ApplicationLoader.load(ApplicationLoader.java:81)
at com.iplanet.ias.server.AbstractManager.load(AbstractManager.java:134)
at com.iplanet.ias.server.ApplicationLifecycle.onStartup(ApplicationLifecycle.java:168)
at com.iplanet.ias.server.ApplicationServer.onStartup(ApplicationServer.java:269)
at com.iplanet.ias.server.J2EERunner.confPostInit(J2EERunner.java:162)
[01/Mar/2004:10:07:55] WARNING ( 657): CORE5021: Application NOT loaded: [emi]
[01/Mar/2004:10:07:55] INFO ( 657): WEB0100: Loading web module [mfs:mfs.war] in virtual server [MFPProcessing] at [mfs]
[01/Mar/2004:10:08:31] INFO ( 657): HTTP3072: HTTP listener http-listener-1 [http://ch042dysz0405:1080] ready to accept requests
[01/Mar/2004:10:08:31] INFO ( 657): CORE3274: successful server startup
[01/Mar/2004:10:08:33] INFO ( 657): CORE5053: Application onReady complete.Hi,
You have not created the jms destination queue object
jms/Warehouse
Your server logs says it cannot find the destination queue object.It has got nothing to do with jndi name of your bean
Create jms destination queue object using
asadmin>create-jms-resource instance <instance_name> resourcetype javax.jms.Queue --property imqDestinationName=<NAme> jms/Warehouse
Then use list-jms-resources <instance_name> to
find if jms/Warehouse destionation queue object has been created.
Get back in case of any issues -
Deployment of Message Driven Bean fails
Hi guys,
i use MQSeries as JMS Provider.
The Application (ear) has the following structure :
MDBApp.ear
contains
mqseries1.jar ,mqseries2.jar, mqseries3.jar , .. ( In the previous Version of NetWeaver is used a deployable Server library and referenced it from the jms-factories.xml )
mdb.jar (contains the Message Driven Bean)
Note :
the jms-resources.xml has the following content :
<?xml version="1.0" encoding="UTF-8"?>
<jms-resources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="jms-resources.xsd">
<connection-factory>
<name>TestFactory</name>
<object-factory-type>
<object-factory-name>com.ibm.mq.jms.MQXAQueueConnectionFactoryFactory</object-factory-name>
<class-name>com.ibm.mq.jms.MQXAQueueConnectionFactory</class-name>
<property>
<config-property-name>HOST</config-property-name>
<config-property-value>anIPAdress</config-property-value>
</property>
<property>
<config-property-name>QMGR</config-property-name>
<config-property-value>aQueueManagerID</config-property-value>
</property>
<property>
<config-property-name>PORT</config-property-name>
<config-property-value>aPort</config-property-value>
</property>
<property>
<config-property-name>TRAN</config-property-name>
<config-property-value>1</config-property-value>
</property>
</object-factory-type>
</connection-factory>
<destination>
<name>RA.IBMSOLLIST.ASSOLLIST.001</name>
<type>javax.jms.Queue</type>
<external-destination-type>
<link-connection-factory>TestFactory</link-connection-factory>
</external-destination-type>
</destination>
</jms-resources>
The Message Driven Bean code :
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination",
propertyValue = "RA.IBMSOLLIST.ASSOLLIST.001"),
@ActivationConfigProperty(propertyName =
"connectionFactoryName", propertyValue = "TestFactory")
public class VMRaTestMessageDBean implements MessageListener {
/* (non-Javadoc)
@see javax.jms.MessageListener#onMessage(javax.jms.Message)
public void onMessage(Message arg0) {
// TODO Auto-generated method stub
The SDM gets following warning/error :
Description:
1. Exception has been returned while the 'vmtubes.de/ratestmdb~ear' was starting. Warning/Exception :
[ERROR CODE DPL.DS.6193] Error while ; nested exception is:
com.sap.engine.services.deploy.exceptions.ServerDeploymentException: [ERROR CODE DPL.DS.5030] Clusterwide exception: server ID 2198950:com.sap.engine.services.deploy.container.DeploymentException: Cannot activate endpoint for message-driven bean vmtubes.de/ratestmdbear*annotation|vmtubes.deratestmdb~ejb.jar*annotation|VMRaTestMessageDBean
at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl$Actions.perform(ContainerInterfaceImpl.java:893)
at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl.prepareStart(ContainerInterfaceImpl.java:425)
at com.sap.engine.services.deploy.server.application.StartTransaction.prepareCommon(StartTransaction.java:219)
at com.sap.engine.services.deploy.server.application.StartTransaction.prepare(StartTransaction.java:179)
at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhasesOnOneServer(ApplicationTransaction.java:420)
at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhases(ApplicationTransaction.java:445)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.super_MakeAllPhases(ParallelAdapter.java:337)
at com.sap.engine.services.deploy.server.application.StartTransaction.makeAllPhasesImpl(StartTransaction.java:550)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.runInTheSameThread(ParallelAdapter.java:251)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.makeAllPhasesAndWait(ParallelAdapter.java:392)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3389)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3375)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3278)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3251)
at com.sap.engine.services.dc.lcm.impl.J2EELCMProcessor.doStart(J2EELCMProcessor.java:99)
at com.sap.engine.services.dc.lcm.impl.LifeCycleManagerImpl.start(LifeCycleManagerImpl.java:62)
at com.sap.engine.services.dc.cm.deploy.impl.LifeCycleManagerStartVisitor.visit(LifeCycleManagerStartVisitor.java:34)
at com.sap.engine.services.dc.cm.deploy.impl.DeploymentItemImpl.accept(DeploymentItemImpl.java:83)
at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcessLCMDeplItem(DefaultDeployPostProcessor.java:80)
at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcess(DefaultDeployPostProcessor.java:56)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doPostProcessing(DeployerImpl.java:741)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.performDeploy(DeployerImpl.java:732)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doDeploy(DeployerImpl.java:576)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:270)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:192)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImplp4_Skel.dispatch(DeployerImplp4_Skel.java:875)
at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:351)
at com.sap.engine.services.rmi_p4.server.ServerDispatchImpl.run(ServerDispatchImpl.java:70)
at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:62)
at com.sap.engine.services.rmi_p4.P4Message.execute(P4Message.java:37)
at com.sap.engine.services.cross.fca.FCAConnectorImpl.executeRequest(FCAConnectorImpl.java:872)
at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:53)
at com.sap.engine.services.cross.fca.MessageReader.run(MessageReader.java:58)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:108)
at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:304)
Caused by: com.sap.engine.services.ejb3.container.ActionException: Cannot activate endpoint for message-driven bean vmtubes.de/ratestmdbear*annotation|vmtubes.deratestmdb~ejb.jar*annotation|VMRaTestMessageDBean
at com.sap.engine.services.ejb3.runtime.impl.Actions_MDBEndpointActivation.perform(Actions_MDBEndpointActivation.java:94)
at com.sap.engine.services.ejb3.container.CompositeAction.perform(CompositeAction.java:81)
at com.sap.engine.services.ejb3.container.ApplicationStarter.perform(ApplicationStarter.java:59)
at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl$Actions.perform(ContainerInterfaceImpl.java:887)
... 34 more
Caused by: javax.resource.NotSupportedException: javax.resource.spi.UnavailableException: The destination RA.IBMSOLLIST.ASSOLLIST.001 cannot be looked up. Last attempt performed : jms_vendor_queues_global/RA.IBMSOLLIST.ASSOLLIST.001
at com.sap.jms.resourceadapter.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:113)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:451)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findResourceAdapterByName(EndpointActivationImpl.java:154)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findAdapter(EndpointActivationImpl.java:85)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:58)
at com.sap.engine.services.ejb3.runtime.impl.Actions_MDBEndpointActivation.perform(Actions_MDBEndpointActivation.java:84)
... 37 more
Caused by: javax.resource.spi.UnavailableException: The destination RA.IBMSOLLIST.ASSOLLIST.001 cannot be looked up. Last attempt performed : jms_vendor_queues_global/RA.IBMSOLLIST.ASSOLLIST.001
at com.sap.jms.resourceadapter.RaActivation.setupDestination(RaActivation.java:345)
at com.sap.jms.resourceadapter.RaActivation.activate(RaActivation.java:121)
at com.sap.jms.resourceadapter.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:101)
... 42 more
Caused by: com.sap.engine.services.jndi.persistent.exceptions.NameNotFoundException: Object not found in lookup of RA.IBMSOLLIST.ASSOLLIST.001.
at com.sap.engine.services.jndi.implserver.ServerContextImpl.lookup(ServerContextImpl.java:584)
at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:343)
at com.sap.engine.services.jndi.implclient.ClientContext.lookup(ClientContext.java:637)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.sap.jms.resourceadapter.RaActivation.setupDestination(RaActivation.java:343)
... 44 more
I use NetWeaver CE 7.1 SP05 .
LockeHi Vladimir,
i can't find the string "JMS Connector Container Application: vmtubes.de/ratestmdb~ear destination name: RA.IBMSOLLIST.ASSOLLIST.001" in the traces.
These are all the logentries while the deployment (read the entries from top to buttom):
Starting activation of JMS resource adapter endpoint factory. ActivationSpec is : applicationName=vmtubes.de/ratestmdb~ear,connectionFactoryName : Testfactory,mAcknowledgeMode : null,maxPoolSize : 50,mClientId : null,mDestinationName : RA.IBMSOLLIST.ASSOLLIST.001,mDestinationType : javax.jms.Queue,minPoolSize : 0,mMessageSelector : null,mSubscriptionDurability : null,mSubscriptionName : null,mReconnectAttempts : 10,mSleepBetweenAttempts : 1000,mParallelConsumers : 1
Performing JNDI lookup for obtaining connectionFactory : jms_vendor_factory_local/vmtubes.de/ratestmdb~ear/Testfactory
First attempt for lookup failed. That could happen for 6.40 applpication without application name. We will continute with the fallback chain. The JNDI lookup is : jms_vendor_factory_local/vmtubes.de/ratestmdb~ear/Testfactory
Performing JNDI lookup for obtaining connectionFactory : jms_vendor_factory_global/Testfactory
Attempt for lookup without application name failed. An attempt will be performed to use the default connectionFactory instead of the one supplied during deployment. The JNDI name is : jms_vendor_factory_global/Testfactory
Performing JNDI lookup for obtaining connectionFactory : jmsfactory/default/XAQueueConnectionFactory
JMS connection created:
================================== Connection ==================================
ID 9444418335539219
Type (Generic)Connection
Mode STOPPED
isClosed NO
client = null
server = com.sap.jms.server.remote.JMSRemoteServerImpl5ec877
packetFactory = com.sap.jms.protocol.PacketFactoryImpl12e8d47
thread pool = null
isClosed = false
runFlag = true
isRunning = true
ConnectionMetaData -
JMSVersion 1.1
PorviderVersion Version 1.0
SupportedJMSXProperties JMSXGroupID, JMSXGroupSeq
================================================================================
com.sap.jms.client.connection.RemoteQueueConnection13d601c isUsed = false
Attempt for lookup without application name failed. An attempt will be performed to use the default connectionFactory instead of the one supplied during deployment. The JNDI name is : jms_vendor_factory_global/Testfactory
Attempt for lookup of destination failed. That could happen for 6.40 applications without application name.An attempt will be performed without the application name. The JNDI name is : jms_vendor_queues_local/vmtubes.de/ratestmdb~ear/RA.IBMSOLLIST.ASSOLLIST.001
java.lang.ClassCastException: class javax.naming.Reference:null incompatible with interface javax.jms.Destination:library:jmscom.sap.engine.boot.loader.ResourceMultiParentClassLoader389922alive
at com.sap.jms.resourceadapter.RaActivation.setupDestination(RaActivation.java:320)
at com.sap.jms.resourceadapter.RaActivation.activate(RaActivation.java:121)
at com.sap.jms.resourceadapter.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:101)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:451)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findResourceAdapterByName(EndpointActivationImpl.java:154)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findAdapter(EndpointActivationImpl.java:85)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:58)
at com.sap.engine.services.ejb3.runtime.impl.Actions_MDBEndpointActivation.perform(Actions_MDBEndpointActivation.java:84)
at com.sap.engine.services.ejb3.container.CompositeAction.perform(CompositeAction.java:81)
at com.sap.engine.services.ejb3.container.ApplicationStarter.perform(ApplicationStarter.java:59)
at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl$Actions.perform(ContainerInterfaceImpl.java:887)
at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl.prepareStart(ContainerInterfaceImpl.java:425)
at com.sap.engine.services.deploy.server.application.StartTransaction.prepareCommon(StartTransaction.java:219)
at com.sap.engine.services.deploy.server.application.StartTransaction.prepare(StartTransaction.java:179)
at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhasesOnOneServer(ApplicationTransaction.java:420)
at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhases(ApplicationTransaction.java:445)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.super_MakeAllPhases(ParallelAdapter.java:337)
at com.sap.engine.services.deploy.server.application.StartTransaction.makeAllPhasesImpl(StartTransaction.java:550)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.runInTheSameThread(ParallelAdapter.java:251)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.makeAllPhasesAndWait(ParallelAdapter.java:392)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3389)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3375)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3278)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3251)
at com.sap.engine.services.dc.lcm.impl.J2EELCMProcessor.doStart(J2EELCMProcessor.java:99)
at com.sap.engine.services.dc.lcm.impl.LifeCycleManagerImpl.start(LifeCycleManagerImpl.java:62)
at com.sap.engine.services.dc.cm.deploy.impl.LifeCycleManagerStartVisitor.visit(LifeCycleManagerStartVisitor.java:34)
at com.sap.engine.services.dc.cm.deploy.impl.DeploymentItemImpl.accept(DeploymentItemImpl.java:83)
at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcessLCMDeplItem(DefaultDeployPostProcessor.java:80)
at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcess(DefaultDeployPostProcessor.java:56)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doPostProcessing(DeployerImpl.java:741)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.performDeploy(DeployerImpl.java:732)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doDeploy(DeployerImpl.java:576)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:270)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:192)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImplp4_Skel.dispatch(DeployerImplp4_Skel.java:875)
at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:351)
at com.sap.engine.services.rmi_p4.server.ServerDispatchImpl.run(ServerDispatchImpl.java:70)
at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:62)
at com.sap.engine.services.rmi_p4.P4Message.execute(P4Message.java:37)
at com.sap.engine.services.cross.fca.FCAConnectorImpl.executeRequest(FCAConnectorImpl.java:872)
at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:53)
at com.sap.engine.services.cross.fca.MessageReader.run(MessageReader.java:58)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:108)
at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:304)
Connection, destination and serverSession pool have been initialized correctly. Delivery of JMS messages will be started.Connection = ================================== Connection ==================================
ID 9444418335539219
Type (Generic)Connection
Mode STOPPED
isClosed NO
ExceptionListener com.sap.jms.resourceadapter.RaActivation1fe79
client = com.sap.jms.server.remote.JMSRemoteClientImpl857822
server = RMI_P4: Local Dynamic Stub for impl -> com.sap.jms.server.remote.JMSRemoteServerImpl18f254f
P4 Remote Object Info : com.sap.engine.services.rmi_p4.server.P4ServerObjectInfo100
|- broker id : -752547698
|- server id : 2198950
|- client Id : -1
|- local Id : 2198950
|- is redirectable : false
|- redir Ident :
|- factory Name : null
|- objId : null
|- server loader name : null
|- connected : false
|- supportOptimization : true
|- protocol : 76 31 v1
Remote Interfaces :
Interface : [0] = com.sap.jms.server.remote.JMSRemoteServer
Interface : [1] = com.sap.engine.services.rmi_p4.interfaces.P4Notification
=========================================
Connection profiles :
connection profile : [0] = None:195.233.66.25:50004
=========================================
packetFactory = com.sap.jms.protocol.PacketFactoryImple9cc66
thread pool = com.sap.engine.core.service630.context.core.thread.ThreadSystemImpl1b57cfa
isClosed = false
runFlag = true
isRunning = true
ConnectionMetaData -
JMSVersion 1.1
PorviderVersion Version 1.0
SupportedJMSXProperties JMSXGroupID, JMSXGroupSeq
================================================================================
com.sap.jms.client.connection.RemoteQueueConnection16a7da2 isUsed = true, destination = queue:///RA.IBMSOLLIST.ASSOLLIST.001, pool = com.sap.jms.resourceadapter.RaServerSessionPool5e2ae5, activation spec = applicationName=vmtubes.de/ratestmdb~ear,connectionFactoryName : Testfactory,mAcknowledgeMode : null,maxPoolSize : 50,mClientId : null,mDestinationName : RA.IBMSOLLIST.ASSOLLIST.001,mDestinationType : javax.jms.Queue,minPoolSize : 0,mMessageSelector : null,mSubscriptionDurability : null,mSubscriptionName : null,mReconnectAttempts : 10,mSleepBetweenAttempts : 1000,mParallelConsumers : 1
JMS session created:
=================================== Session ====================================
ID: 17
Type: (Generic)Session
ConnectionID: 9444418335539219
AcknowledgeMode: Transacted session!
================================================================================
ActivationSpec could not be deployed/started due to internal problem, clean up will be performed, the activation spec was applicationName=vmtubes.de/ratestmdb~ear,connectionFactoryName : Testfactory,mAcknowledgeMode : null,maxPoolSize : 50,mClientId : null,mDestinationName : RA.IBMSOLLIST.ASSOLLIST.001,mDestinationType : javax.jms.Queue,minPoolSize : 0,mMessageSelector : null,mSubscriptionDurability : null,mSubscriptionName : null,mReconnectAttempts : 10,mSleepBetweenAttempts : 1000,mParallelConsumers : 1
javax.resource.spi.UnavailableException: javax.jms.InvalidDestinationException: Illegal destination!
at com.sap.jms.resourceadapter.RaActivation.activate(RaActivation.java:136)
at com.sap.jms.resourceadapter.ResourceAdapterImpl.endpointActivation(ResourceAdapterImpl.java:101)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:451)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findResourceAdapterByName(EndpointActivationImpl.java:154)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.findAdapter(EndpointActivationImpl.java:85)
at com.sap.engine.services.connector.jca15.EndpointActivationImpl.activateEndpoint(EndpointActivationImpl.java:58)
at com.sap.engine.services.ejb3.runtime.impl.Actions_MDBEndpointActivation.perform(Actions_MDBEndpointActivation.java:84)
at com.sap.engine.services.ejb3.container.CompositeAction.perform(CompositeAction.java:81)
at com.sap.engine.services.ejb3.container.ApplicationStarter.perform(ApplicationStarter.java:59)
at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl$Actions.perform(ContainerInterfaceImpl.java:887)
at com.sap.engine.services.ejb3.container.ContainerInterfaceImpl.prepareStart(ContainerInterfaceImpl.java:425)
at com.sap.engine.services.deploy.server.application.StartTransaction.prepareCommon(StartTransaction.java:219)
at com.sap.engine.services.deploy.server.application.StartTransaction.prepare(StartTransaction.java:179)
at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhasesOnOneServer(ApplicationTransaction.java:420)
at com.sap.engine.services.deploy.server.application.ApplicationTransaction.makeAllPhases(ApplicationTransaction.java:445)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.super_MakeAllPhases(ParallelAdapter.java:337)
at com.sap.engine.services.deploy.server.application.StartTransaction.makeAllPhasesImpl(StartTransaction.java:550)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.runInTheSameThread(ParallelAdapter.java:251)
at com.sap.engine.services.deploy.server.application.ParallelAdapter.makeAllPhasesAndWait(ParallelAdapter.java:392)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3389)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3375)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3278)
at com.sap.engine.services.deploy.server.DeployServiceImpl.startApplicationAndWait(DeployServiceImpl.java:3251)
at com.sap.engine.services.dc.lcm.impl.J2EELCMProcessor.doStart(J2EELCMProcessor.java:99)
at com.sap.engine.services.dc.lcm.impl.LifeCycleManagerImpl.start(LifeCycleManagerImpl.java:62)
at com.sap.engine.services.dc.cm.deploy.impl.LifeCycleManagerStartVisitor.visit(LifeCycleManagerStartVisitor.java:34)
at com.sap.engine.services.dc.cm.deploy.impl.DeploymentItemImpl.accept(DeploymentItemImpl.java:83)
at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcessLCMDeplItem(DefaultDeployPostProcessor.java:80)
at com.sap.engine.services.dc.cm.deploy.impl.DefaultDeployPostProcessor.postProcess(DefaultDeployPostProcessor.java:56)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doPostProcessing(DeployerImpl.java:741)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.performDeploy(DeployerImpl.java:732)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.doDeploy(DeployerImpl.java:576)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:270)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImpl.deploy(DeployerImpl.java:192)
at com.sap.engine.services.dc.cm.deploy.impl.DeployerImplp4_Skel.dispatch(DeployerImplp4_Skel.java:875)
at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:351)
at com.sap.engine.services.rmi_p4.server.ServerDispatchImpl.run(ServerDispatchImpl.java:70)
at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:62)
at com.sap.engine.services.rmi_p4.P4Message.execute(P4Message.java:37)
at com.sap.engine.services.cross.fca.FCAConnectorImpl.executeRequest(FCAConnectorImpl.java:872)
at com.sap.engine.services.rmi_p4.P4Message.process(P4Message.java:53)
at com.sap.engine.services.cross.fca.MessageReader.run(MessageReader.java:58)
at com.sap.engine.core.thread.execution.Executable.run(Executable.java:108)
at com.sap.engine.core.thread.execution.CentralExecutor$SingleThread.run(CentralExecutor.java:304)
Caused by: javax.jms.InvalidDestinationException: Illegal destination!
at com.sap.jms.client.session.Session.createConsumer(Session.java:1807)
at com.sap.jms.client.session.Session.createConsumer(Session.java:1795)
at com.sap.jms.client.connection.ConnectionConsumer.<init>(ConnectionConsumer.java:124)
at com.sap.jms.client.connection.Connection.createConnectionConsumer(Connection.java:167)
at com.sap.jms.resourceadapter.RaActivation.setUpConnectionConsumer(RaActivation.java:165)
at com.sap.jms.resourceadapter.RaActivation.activate(RaActivation.java:128)
... 43 more
An attempt to stop message delivery will be performed. Activation request was applicationName=vmtubes.de/ratestmdb~ear,connectionFactoryName : Testfactory,mAcknowledgeMode : null,maxPoolSize : 50,mClientId : null,mDestinationName : RA.IBMSOLLIST.ASSOLLIST.001,mDestinationType : javax.jms.Queue,minPoolSize : 0,mMessageSelector : null,mSubscriptionDurability : null,mSubscriptionName : null,mReconnectAttempts : 10,mSleepBetweenAttempts : 1000,mParallelConsumers : 1
JMS session closed:
=================================== Session ====================================
ID: 17
Type: (Generic)Session
ConnectionID: 9444418335539219
AcknowledgeMode: Transacted session!
================================================================================
Connection context doesn't exists ! id =
Removing unreferenced connection ID =
Connection context doesn't exists ! id =
Connection closed:
================================== Connection ==================================
ID 9444418335539219
Type (Generic)Connection
Mode STOPPED
isClosed YES
client = com.sap.jms.server.remote.JMSRemoteClientImpl857822
server = RMI_P4: Local Dynamic Stub for impl -> com.sap.jms.server.remote.JMSRemoteServerImpl18f254f
P4 Remote Object Info : com.sap.engine.services.rmi_p4.server.P4ServerObjectInfo100
|- broker id : -752547698
|- server id : 2198950
|- client Id : -1
|- local Id : 2198950
|- is redirectable : false
|- redir Ident :
|- factory Name : null
|- objId : null
|- server loader name : null
|- connected : false
|- supportOptimization : true
|- protocol : 76 31 v1
Remote Interfaces :
Interface : [0] = com.sap.jms.server.remote.JMSRemoteServer
Interface : [1] = com.sap.engine.services.rmi_p4.interfaces.P4Notification
=========================================
Connection profiles :
connection profile : [0] = None:195.233.66.25:50004
=========================================
packetFactory = com.sap.jms.protocol.PacketFactoryImple9cc66
thread pool = com.sap.engine.core.service630.context.core.thread.ThreadSystemImpl1b57cfa
isClosed = true
runFlag = false
isRunning = true
ConnectionMetaData -
JMSVersion 1.1
PorviderVersion Version 1.0
SupportedJMSXProperties JMSXGroupID, JMSXGroupSeq
================================================================================
com.sap.jms.client.connection.RemoteQueueConnection16a7da2 isUsed = true
Here the Telnet output :
>lookup jms_vendor_queues_local/vmtubes.de/ratestmdb~ear/RA.IBMSOLLIST.ASSOLLIST.001
Trying to connect...
Connected.
[Shell -> LOOKUP] Location : /jms_vendor_queues_local/vmtubes.de/ratestmdb~ear
/RA.IBMSOLLIST.ASSOLLIST.001
[Shell -> LOOKUP] Contains : Reference Class Name: com.ibm.mq.jms.MQQueue
Type: VER
Content: 1
Type: EXP
Content: -2
Type: PRI
Content: -2
Type: PER
Content: -2
Type: CCS
Content: 1208
Type: TC
Content: 0
Type: ENC
Content: 273
Type: FIQ
Content: 1
Type: QU
Content: RA.IBMSOLLIST.ASSOLLIST.001
Type: QMGR
Content:
[Shell -> LOOKUP] Class name : javax.naming.Reference
>llr -all -f com/ibm/mq/jms/MQQueue.class
jar:file:/C:/usr/sap/J2E/J00/j2ee/cluster/bin/ext/MQSLibrary/com.ibm.mq.jms.jar!
/com/ibm/mq/jms/MQQueue.class
jar:file:/C:/usr/sap/J2E/J00/j2ee/cluster/apps/vmtubes.de/mq%7Ebase%7Eserver%7El
ib/app_libraries_container/com.ibm.mq.jms.jar!/com/ibm/mq/jms/MQQueue.class
Locke -
Help : Message Driven bean seeing the same message multiple times.
( We are using weblogic 8.1 on Solaris )
We have a bunch of message driven beans with the transaction type as 'Container' and the acknowledge-mode mode as auto-acknowledge. They are consuming messages from a weblogic Queue ( javax.jms.Queue ). The MBD container is also weblogic 8.1.
We have 7 instances of the bean consuming messages.
Most of the messages are picked up and processed only once as expected.
But randomly we are seeing that sometimes the same message is delivered again ( Message.getJmsRedelivered = true ) eventhough it was once picked up and processed successfully once.
We are completely lost and our production machine is in big trouble as a result of this.
( Is it possible that weblogic uses unreliable UDP for acknowledging messages. If yes where do we change this setting )
Any help will be greatly appreciated
Thanks
--sony
================ejb-jar.xml BEGIN
<?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>
<enterprise-beans>
<message-driven>
<description>DslUpdtDdpostPrcsrMDB</description>
<ejb-name>DslUpdtDdpostPrcsrMDB</ejb-name>
<ejb-class>
com.bellsouth.snt.idm.ejb.wfac.DslUpdtDdpostPrcsrMDB
</ejb-class>
<transaction-type>Container</transaction-type>
<message-selector>
<![CDATA[ idm_state = 'dsl_updt_dd_post' ]]>
</message-selector>
<acknowledge-mode>auto-acknowledge</acknowledge-mode>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
<env-entry>
<env-entry-name>MDB_NAME</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>dsl_updt_dd_post</env-entry-value>
</env-entry>
<!--security-identity><use-caller-identity/></security-identity-->
<resource-ref>
<res-ref-name>jms/QueueConnectionFactory</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>DslUpdtDdpostPrcsrMDB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
================ejb-jar.xml END
================weblogic-ejb-jar.xml BEGIN
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN' 'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'>
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>DslUpdtDdpostPrcsrMDB</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>10</max-beans-in-free-pool>
<initial-beans-in-free-pool>0</initial-beans-in-free-pool>
</pool>
<destination-jndi-name>
idm.jms.clip.WfacClipResponseQueue
</destination-jndi-name>
<connection-factory-jndi-name>
idm.jms.IdmXaJmsQueueConnectionFactory
</connection-factory-jndi-name>
</message-driven-descriptor>
<transaction-descriptor>
<trans-timeout-seconds>
300
</trans-timeout-seconds>
</transaction-descriptor>
<reference-descriptor>
<resource-description>
<res-ref-name>jms/QueueConnectionFactory</res-ref-name>
<jndi-name>idm.jms.IdmXaJmsQueueConnectionFactory</jndi-name>
</resource-description>
</reference-descriptor>
<jndi-name>jms.DslUpdtDdpostPrcsrMDB</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
================weblogic-ejb-jar.xml ENDThe transaction attribute for the MDB is set to 'Required'. Is it possible
that your application logic may process the message successfully even in
case of a transaction roll back? If the transaction rolls back, the message
will be re-delivered.
There is some docs on exactly-once processing which may help
http://e-docs.bea.com/wls/docs81/ejb/message_beans.html#1147208
--Sathish
<Sony Antony> wrote in message news:[email protected]...
( We are using weblogic 8.1 on Solaris )
We have a bunch of message driven beans with the transaction type as
'Container' and the acknowledge-mode mode as auto-acknowledge. They are
consuming messages from a weblogic Queue ( javax.jms.Queue ). The MBD
container is also weblogic 8.1.
We have 7 instances of the bean consuming messages.
Most of the messages are picked up and processed only once as expected.
But randomly we are seeing that sometimes the same message is delivered
again ( Message.getJmsRedelivered = true ) eventhough it was once picked
up and processed successfully once.
We are completely lost and our production machine is in big trouble as a
result of this.
( Is it possible that weblogic uses unreliable UDP for acknowledging
messages. If yes where do we change this setting )
Any help will be greatly appreciated
Thanks
--sony
================ejb-jar.xml BEGIN
<?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>
<enterprise-beans>
<message-driven>
<description>DslUpdtDdpostPrcsrMDB</description>
<ejb-name>DslUpdtDdpostPrcsrMDB</ejb-name>
<ejb-class>
com.bellsouth.snt.idm.ejb.wfac.DslUpdtDdpostPrcsrMDB
</ejb-class>
<transaction-type>Container</transaction-type>
<message-selector>
<![CDATA[ idm_state = 'dsl_updt_dd_post' ]]>
</message-selector>
<acknowledge-mode>auto-acknowledge</acknowledge-mode>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
<env-entry>
<env-entry-name>MDB_NAME</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>dsl_updt_dd_post</env-entry-value>
</env-entry>
<!--security-identity><use-caller-identity/></security-identity-->
<resource-ref>
<res-ref-name>jms/QueueConnectionFactory</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>DslUpdtDdpostPrcsrMDB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
================ejb-jar.xml END
================weblogic-ejb-jar.xml BEGIN
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic
8.1.0 EJB//EN'
'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'>
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>DslUpdtDdpostPrcsrMDB</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>10</max-beans-in-free-pool>
<initial-beans-in-free-pool>0</initial-beans-in-free-pool>
</pool>
<destination-jndi-name>
idm.jms.clip.WfacClipResponseQueue
</destination-jndi-name>
<connection-factory-jndi-name>
idm.jms.IdmXaJmsQueueConnectionFactory
</connection-factory-jndi-name>
</message-driven-descriptor>
<transaction-descriptor>
<trans-timeout-seconds>
300
</trans-timeout-seconds>
</transaction-descriptor>
<reference-descriptor>
<resource-description>
<res-ref-name>jms/QueueConnectionFactory</res-ref-name>
<jndi-name>idm.jms.IdmXaJmsQueueConnectionFactory</jndi-name>
</resource-description>
</reference-descriptor>
<jndi-name>jms.DslUpdtDdpostPrcsrMDB</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
================weblogic-ejb-jar.xml END -
WLS10 - message-driven bean init-suspended / max-suspended params
I have a message-driven bean deployed with my app. I also have a custom start-up class that binds an Oracle AQ to Weblogic's JNDI tree that this message-driven bean connects to. If our DBAs perform database maintanance over the weekend and bring the db down for a period of time, WebLogic 'suspends' the message-driven bean when the db becomes unresponsive.
This is fine if once the db comes back up, WebLogic would resume the message-driven bean, but it doesn't. Via the admin console, I've tried re-initializing the bean, and I've tried resuming the bean...neither work...both result in a success status but the bean remains with a status of suspended.
Upon digging, I learned there are two parameters you can set for MDBs in the descriptor file or EJBGen annotations called initSuspendSeconds and maxSuspendSeconds...setting masSuspedSeconds to 0, according to the docs, say the bean will never suspend. I use the EJB annotation methodology and added these to my @MessageDriven annotation block. WebLogic Workshop will not generate these parameters in the resultant descriptor, nor will the build I perform to our development application server.
I then went to the admin console and manually updated these fields...help docs from the admin console say the default is 0...online docs and my installation on both windows and linux result in a default of 5 for initSuspendSeconds and 60 for maxSuspendSeconds. Ok...so I override these manually from the admin console once I've deployed my application...only thing it does is it requiresthe creation of a deployment plan now and asks for a directory in which to store this deployment plan. Fine...but honestly...what is the deal with these fields that they're being ignored by EJBGen, their defaults do not follow the docs and changing them via the admin console requires a deployment plan?
Anyone know anything about these params? I'm using WLS10MP1, btw, not 10.3. Not sure if that makes a difference...but just thought I'd include that tidbit.
Any help is greatly appreciated.
Thanks,
Edited by: rlb3778 on Feb 20, 2009 11:56 AMSo if you add the following annotations to the top of your MDB, EJBGen creates the suspended parameters in the descriptor?
@MessageDriven(ejbName = "MyBean",
destinationJndiName = "SOME_QUEUE",
destinationType = "javax.jms.Queue",
transTimeoutSeconds = "3600",
maxBeansInFreePool = "1",
initialBeansInFreePool = "1",
initSuspendSeconds = 0,
maxSuspendSeconds = 0)
If I sent them to anything BUT 0 they're generated in the descriptor files but it ignores them if they're 0 and I WANT them to be 0 so the beans are never suspended. Oh well. I have a ticket open with support and they've confirmed that when they're et to 0 they're not generated and they claim because that's the default value which according to the spec, isn't...so I'm still waiting to hear back.
As for the JDBC connection, MDB resumeing upon reconnectiong of DB...our environments are very different...we do not have a JMS server running and maintained by Weblogic...we have a custom start-up class that binds our OracleAQ to Weblogic's JNDI tree and our MDB listens to the queue in the database. So i'm guessing because of that complex setup something is not working when the db queue disconnects. I will investigate our custom start-up class. Thanks for your help.
Maybe you are looking for
-
Can i pair my BB8330 with more than one device at a time?
pairing my BB8330 with my blue tooth earphone(TM:jawbone) and my microsoft sync thats in my car simultaneously? if i pair with the car, will i have to pair my jawbone all over again? Solved! Go to Solution.
-
Unable to unzip the downloaded files
So that we may better diagnose DOWNLOAD problems, please provide the following information. After downloaded the 9i for Windows (disk1,disk2,disk3). I cnnot unzip the file. I get the foloowing message from WinZip message box: "The WinZip Wizard canno
-
Is the java 1.5 default SAXParser thread safe.
I used the following code to create a parser and validate my xml data. But the following code is causing too many open file issue. After doing some analysis I understood that each object of parser is open the file "file://var/app/bea/files/wfinf/xmls
-
Am trying to setup and use the JDeveloper/OAF in our EBS R12 (12.1.3) web server. Solaris Sparc 64bit machine. Followed the metalink document 416708.1 and took the zip p9879989_R12_GENERIC.zip as instructed in the training class. The readme does not
-
Hi All, I am developing a SW with 10g Forms which would be Deployed with Oracle application Server 10g(10.1.2.0). The DataBase server and The application server are on a LAN, The connection between these two is consistent and stable. But The Applicat