gpt4 book ai didi

java - 在 JEE 5 中调用 WebMethod 时出现 javax.Naming.NameNotFoundException

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:12 25 4
gpt4 key购买 nike

我使用的是 JEE 版本 5.0.2。我在 @WebService 注解的类中调用 WebMethod。这个带注释的类调用一个 Stateless @EJB,其中包含我正在调用的 WebMethod 的业务逻辑(实现)。

我的WebService类定义如下:

@WebService
HandlerChain(file = "MyXService_handle.xml")
public class MyXService {

@EJB(mappedName="MyXBean", beanName="MyXBean")
public MyXBean myXBean;

@WebMethod
public String sayHello(@WebParam(name="nTimes") int nTimes) {
return myXBean.sayHello(nTimes);
}
}

我的EJB定义如下:

@Stateless(name="MyXBean", mappedName="MyXBean")
@TransactionManagement(TransactionManagementType.BEAN)
public class MyXBean {

@PersistenceContext name="persistence/my_PU", unitName="my_PU")
protected EntityManager entityManager;

public String sayHello(int nTimes) {
String s = "";
for (int i = 0; i < nTimes; i++) {
s += "Hello";
}
return s;
}
}

我收到以下错误:

Caused by: com.sun.enterprise.InjectionException: Exception attempting to inject Unresolved Ejb-Ref com.my.domain.MyXService/myXBean@jndi: MyXBean@null@com.my.domain.MyXBean@Session@MyXBean into class com.sun.enterprise.webservice.JAXWSServlet
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:387)
at com.sun.enterprise.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:206)
at com.sun.enterprise.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:117)
at com.sun.web.server.J2EEInstanceListener.handleBeforeEvent(J2EEInstanceListener.java:259)
... 31 more
Caused by: javax.naming.NameNotFoundException: MyXBean#com.my.domain.MyXBean not found
at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
at com.sun.enterprise.naming.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:111)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:409)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:944)
at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:173)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:407)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sun.enterprise.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:287)
... 34 more
|#]

WebService 类和 EJB 完全位于同一 WAR 中的同一模块中。此 WAR 部署在 Glassfish Server 版本 2.1.1 中。我只在部署日志(server.log)中收到此警告:

[#|2018-12-10T22:51:59.045+0100|WARNING|sun-appserver2.1|javax.enterprise.system.tools.deployment|_ThreadID=78;_ThreadName=Thread-946;_RequestID=bf2b9b34-5240-4eca-8b4b-9d16baad7c5b;|Unresolved <ejb-link>: MyXBean|#]

我遵循 Java EE 5 规范来实现所有这些,因此我尝试“按照书本”进行我的架构。

我已经尝试实现一个接口(interface),如此处 https://docs.oracle.com/javaee/5/tutorial/doc/bnbmg.html 中所述。但没有任何效果,错误仍然存​​在。

我没有关于 bean 的 xml 配置。我期望所有的工作都通过注释进行,但我得到了上面解释的 javax.Naming.NameNotFoundException。

我错过了什么吗?如果需要,我可以提供更多详细信息。

谢谢。

最佳答案

您正在使用 ejb 名称和映射名称。映射名称的使用是特定于供应商的。 Glassfish 将此用作“全局 JNDI 名称”。由于您同时使用两者,我不知道哪一个优先于另一个。对于您的示例,空的 @EJB 和 @Stateless 注释应该可以工作。

关于java - 在 JEE 5 中调用 WebMethod 时出现 javax.Naming.NameNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53714547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com