从 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的主要内容,如果未能解决你的问题,请参考以下文章

从 Tomcat Web 应用程序调用的 Weblogic 上部署的远程 Ejb bean

Java中常见的5种WEB服务器介绍

web 漏洞扫描和验证工具:Vulmap使用

weblogic与weblogic server有啥区别?

Java中常见的5种WEB服务器介绍

Tomcat对异步Servlet的支持