【问题标题】:injecting @EJB from different module but same application从不同的模块但相同的应用程序注入@EJB
【发布时间】:2017-05-12 19:47:13
【问题描述】:

我在 Weblogic 服务器上有一个应用程序。 我在将 RESTWEBservice 中的 EJB 注入 SOAPwebservice 时遇到问题。 这个应用程序有几个模块。现在只有三个是重要的。

部署如下所示:

应用

  • API (JAR)
  • SOAPWebService (WAR)
  • RESTWebService(WAR)

两个 Web 服务都内置了 API。 这是课程的重要部分。 我要注入的 RestWebservice EJB:

@Local(EJBSOAPinterface.class)
@Stateless(mappedName = "RESTCLASS", name="RESTCLASS")
public class RESTCLASS implements EJBSOAPinterface{...}

两个模块使用的API接口:

@Local
public interface EJBSOAPinterface{....}

想要注入 EJB 的 SOAP webserviceModule

public SOAPCLASS {
@EJB(lookup="JNDINAME..")
EJBSOAPinterface ejb;
......}

我尝试在界面和 EJB 上同时使用 @Local 和 @Remote。它不起作用。

我也试过这个来注入 EJB

public SOAPCLASS{
@EJB(name="RESTCLASS")
EJBSOAPinterface ejb;
.....}

它也不起作用。 问题是我的 SOAPCLASS 不会因为注入而部署。 根据我的操作方式,我会得到不同的例外。但目前我得到了

java.lang.InstantiationException:创建名称为“.....”的 bean 时出错 .....依赖注入失败:找不到关于类接口“.....”的bean定义

我对 java 有点陌生。

【问题讨论】:

  • 你用了什么 jndi 名字?在启动期间应该有一些输出给出EJBSOAPinterface 的可用 jndi 名称,你应该全部尝试。
  • 我正在检查 weblogic Server 上的绑定名称并使用该名称。它类似于 RESTCLASS#INTERFACEPACKETNAME.EJBSOAPinterface
  • 应该还有一些其他名称,包括 .war 名称(如果有的话,还有 .ear)
  • 我确实得到了另外 2 个绑定名称。来自 EJB 类和接口类的 gradle。

标签: java jakarta-ee dependency-injection


【解决方案1】:

更新 - 已解决。 我确实在界面上放了@Remote 而不是@Local。 EJB 本身也是如此。我的 JNDI 名称是正确的 (RESTCLASS#INTERFACEPACKETNAME.EJBSOAPINTERFACE)。

问题是当我在 WLServer 上部署应用程序时,我在 RESTCLASS 之前部署了 SOAPCLASS。 这意味着它还找不到任何 JNDI 名称。因为它还没有建成。 我刚刚更改了这两个的部署顺序,它立即生效。 谢谢!

【讨论】:

    猜你喜欢
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2012-09-07
    • 2012-08-08
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多