You've got the right idea.
Definitely make sure you use the WebSphere's InitialContextFactory instead of
TomEE's. Think of the `java.naming.factory.initial` like a JDBC driver.
Connecting to an Oracle DB requires an Oracle driver in TomEE, connecting to
WebSphere for EJB requires the WebSphere `java.naming.factory.initial` factory.
You also want to change the <JndiProvider id=""> to be something simple. Note
this field is not used for the JNDI name of the bean you'd like to lookup. A
simple name like "websphere" would work.
<tomee>
<JndiProvider id="websphere" type="javax.naming.InitialContext">
java.naming.provider.url =
corbaname:iiop:<hostName>:<port>/NameServiceServerRoot
java.naming.factory.initial =
<websphere-InitialContextFactory-implementation>
</JndiProvider>
</tomee>
Then in your application where you want to lookup a bean from WebSphere, you
import javax.ejb.EJB;
import javax.ejb.Singleton;
@Singleton
public class SomeTomeeBean {
@EJB(mappedName = "jndi:ext://websphere/<jndi-name-of-the-remote-bean>")
private OrangeBean orangeBean;
}
The value of `jndi-name-of-the-remote-bean` must be the JNDI name a plain Java
client would use to lookup that bean in WebSphere.
To better understand, here are the mechanics TomEE uses which are rather simple:
- When TomEE goes to inject the OrangeBean, it sees the bean is not provided
by TomEE because there is "jndi:ext:" in the mappedName
- TomEE then uses what ever text comes next in the URI
"jndi:ext:<provider-id>/" to find the `<JndiProvider>` configured in the
tomee.xml
- TomEE constructs an InitialFactory(properties) passing in *all* properties
configured between the `<JndiProvider>` and `</JndiProvider>` tags
- Now with an InitialContext instance in hand, TomEE uses the
`jndi-name-of-the-remote-bean` value to do a lookup.
- The resulting object is injected into the OrangeBean field.
Hope this helps!
-David
On Feb 27, 2014, at 8:21 AM, asingh <[email protected]> wrote:
> Hi,
> Is their an example out there which demonstrates connecting to the EJB
> deployed on Websphere from TomEE instance?
>
> I did try to do so by using tomee.xml file but did not help:
> <tomee>
> <JndiProvider id="<jndiName>" type="javax.naming.InitialContext">
> java.naming.provider.url =
> corbaname:iiop:<hostName>:<port>/NameServiceServerRoot
> java.naming.factory.initial =
> org.apache.openejb.client.RemoteInitialContextFactory
> </JndiProvider>
> </tomee>
>
> On run time I see this in my Initial Context:
> {java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory,
> java.naming.factory.url.pkgs=org.apache.naming:org.apache.openejb.core.ivm.naming}
>
>
>
> --
> View this message in context:
> http://openejb.979440.n4.nabble.com/Connecting-to-EJB-Deployed-on-Websphere-from-TomEE-server-tp4668017.html
> Sent from the OpenEJB Dev mailing list archive at Nabble.com.