AFAIK there is not need to call anything extra if you use EJB's with CMT.
There is a script to change the configuration from JTA => JTS (If I remember right in examples) that you have to run.
And it works for me (some time ago)
I was referring to instructions at below
I am using RMI/IIOP and JTS but get below (My EJB has transaction attribute MANDATORY as design is client should always come in with existing transaction)
Caused by: org.omg.CORBA.TRANSACTION_REQUIRED: Server-side Exception: javax.transaction.TransactionRequiredException: Transaction Required vmcid: 0x0 minor code: 0 completed: No
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at org.jacorb.orb.SystemExceptionHelper.read(Unknown Source)
at org.jacorb.orb.ReplyReceiver.getReply(Unknown Source)
at org.jacorb.orb.Delegate.invoke_internal(Unknown Source)
at org.jacorb.orb.Delegate.invoke(Unknown Source)
Also note that I am using EJB client jar from Websphere currently, please see my other thread and if you think it could be because I am using websphere ejb client jar (for now until I figure other JBoss errror)
Wolf-Dieter Fink et all,
I was finally able to get EJB JNDI lookup work from my client to EJB server.
But I still get below on my call
javax.transaction.TransactionRequiredException: CORBA TRANSACTION_REQUIRED 0 No; nested exception is:
org.omg.CORBA.TRANSACTION_REQUIRED: Server-side Exception: javax.transaction.TransactionRequiredException: Transaction Required vmcid: 0x0 minor code: 0 completed: No
at com.vehicle.ejb._VehicleInterface_Stub.scheduleVehicleJob(Unknown Source)
Any advice on this. I am using RMI/IIOP and configured both JBoss 5.1 instances for JTS (using script provided) but still transaction doesn't seem to propogate and hence TRANSACTION_REQUIRED error.
I read some posts on configuring common object store for client and server instances but it was not complete.
Can you pls suggest?
I suppose the Tx is started from the client-EJB via declaration (e.g. REQUIRE) right?
I've no idea ATM, what if you deploy both app's in the same server for a test (if it is possible)
I learned that I will need to use JTS and then RMI/IIOP in JBoss (instead of default JTA and JRMP).
I also learned that I also need to use ORB/OTS interfaces in my application code such as orb.start() and orb.stop() and OTSManager.getcurrent.begin() and then commit().
How and where to insert this ORT/OTS method calls in my application code. I am using EJB container managed declarative transactions, so I don't do any transaction begin and end.
Is there any way to get around this ORB method calls? If not, how to use them in CMT architecture?
I am newbie to Jboss migrating from websphere, so any help will be greatly appreciated
Wolf-Dieter is correct. The only thing you need to pay attention to is to do the lookup of the second ejb using the correct JNDI context and to make sure your ejb xml descriptor specifies IIOP binding.
You do not need to perform any OTS method calls - the document you referenced did use OTS to begin the transaction in the client but you are not doing that and instead you are relying on CMT to start the transaction in Application A running on the first server.
I don't know what the default for the alwaysPropagateContext property is so you may need to set it explicitly:
Also, for recovery to work properly, don't forget to make sure each server has a different nodeIdentifier property, eg
and on the other server
The node id gets embedded in transaction ids so the node knows which transactions it owns (and stops both servers from trying to recover the same transaction).
Wolf-Dieter and Mike,
Thanks for replies.
Do you mean even the client EJB needs to have IIOP binding?
My client is deployed in EAR with EJB CMT (Transaction attribute - Required) and invokes remote EJB on other server. The complete call chain needs to execute in single distributed transaction over RMI/IIOP. Both client and EJB server run on JBoss 5.1GA with JTS.
I do have IIOP binding specified for remote EJB but not for my client EJB.
Do I need IIOP binding in both EJB's?
I have alwaysPropagateContext to true but still get 'Transaction required' error above.
I specified IIOP binding even for my client but that didn't help too. Fails with same error.
Please confirm if IIOP binding needs to be specified for client EJB or remote EJB or both. It didn't work anyhow but want to know right configuration.
I have <property name="com.arjuna.ats.jts.alwaysPropagateContext" value="YES"/> set to YES on both client and EJB servers and that didn't help.
Any thoughts on what else we need?
Wolf-Dieter and Mike,
Sorry, not at this moment.
If I find the time I'll look if I find my example, AFAIR this work in AS5.1 without a change to the EJB but I'm not 100% sure
I put both my applications on the same server and it worked fine.
Seems transaction propagation doesn't happen when multiple servers are involved and fails with TRANSACTION_REQUIRED error.
Can you please confirm below as entry for alwaysPropagateContext in jbossts-properties.xml.
<property name="com.arjuna.ats.jts.alwaysPropagateContext" value="YES"/>
I could NOT find <entry key="JTSEnvironmentBean.alwaysPropagateContext">true</entry> in transaction-jboss-beans.xml.
So probably location was changed between server versions?
Any other configuration that comes to mind, somethingwith object store directory location or anything else?
Another related post I coud find is below but with no resolution. I am stuck in rut here, so any help appreciated!!
Can you please respond to above post, thanks in advance...
Also if there is any reference or documentation on setting up distributed transactions over RMI/IIOP, please let me know as cannot find anything on this. Using JBoss 5.1