从 Tomcat Web 应用程序调用的 Weblogic 上部署的远程 Ejb bean
Posted
技术标签:
【中文标题】从 Tomcat Web 应用程序调用的 Weblogic 上部署的远程 Ejb bean【英文标题】:Remote Ejb bean deployed on Weblogic called from Tomcat web application 【发布时间】:2015-01-05 06:14:14 【问题描述】:我已经使用 EJB 3.1 创建了一个远程 EJB bean,并将其部署在 Web 逻辑 12c 上。现在通过一个简单的 java 客户端,我可以访问远程 bean。它工作正常。
Java 客户端代码:
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
try
InitialContext ic = new InitialContext(ht);
我的下一个方法是在部署在 Tomcat 7 中的 Web 应用程序中调用这个远程 bean。但它会抛出异常
原因:java.lang.ClassNotFoundException: weblogic.jndi.WLInitialContextFactory。
我正在使用以下代码来调用 ejb bean: 属性properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
properties.put("java.naming.factory.url.pkgs", "weblogic.jndi.factories:weblogic.corba.j2ee.naming.url");
properties.put(Context.PROVIDER_URL, "t3://localhost:7001");
properties.put( Context.SECURITY_PRINCIPAL, "weblogic");
properties.put( Context.SECURITY_CREDENTIALS, "weblogic1");
try
Context ic = new InitialContext(properties);
如何让它发挥作用。
谢谢
【问题讨论】:
【参考方案1】:您的 Web 应用程序类路径中应该有 wlthint3client.jar 或 wlfullclient.jar。两者都可以从 weblogic 发行版中获得。
关于它们的使用的更多信息可以找到here
【讨论】:
我在 lib 文件夹下的 Web 应用程序类路径中有 wlfullclient.jar。 据我所知,这应该可以解决问题。你能检查一下jar是否包含上述类文件吗?如果确实如此,但您仍然看到相同的错误,则说明您的设置有问题。 我在应用程序的 WEB-INF/lib 文件夹下提供了 jar。现在它出现上述异常但在下一行抛出异常。 javax.naming.NamingException:查找中未处理的异常 [根异常是 org.omg.CORBA.MARSHAL:vmcid:SUN 次要代码:211。 您是否为您的 ejb 创建了客户端 jar? 我没有为 ejb 创建客户端 jar。我复制了在 web 应用程序类中为简单的 java 客户端工作的相同代码,然后调用了 web 应用程序。然后它在 HelloSpring hb = (HelloSpring) ic.lookup("HelloSpring#com.sample.HelloSpring"); 行中抛出异常但是它在简单的 java 客户端中运行良好。【参考方案2】:为我在类路径上添加 wlclient.jar 和 wlthint3client.jar(按此顺序)。
在我的例子中,我试图从测试类中调用 EJB。为了获得我这样做的实例:
weblogic.ejb.spi.BusinessObject obj = (weblogic.ejb.spi.BusinessObject) context.lookup("MyEJBRemoteMappedName#br.com.ejbclient.MyEJBRemote");
br.com.ejbclient.MyEJBRemote myEJB = (br.com.ejbclient.MyEJBRemote) obj._WL_getBusinessObjectHandle().getBusinessObject();
我正在使用 wls12130。
【讨论】:
以上是关于从 Tomcat Web 应用程序调用的 Weblogic 上部署的远程 Ejb bean的主要内容,如果未能解决你的问题,请参考以下文章