Java 无法在单独的ear中调用@Remote接口
这是一个真正的新手问题,但我希望能得到一些帮助。我已经研究了其他问题,但还没有找到解决办法。也许我忽略了一些简单的事情 我正在部署一个带有ejb模块的ear到jboss:Java 无法在单独的ear中调用@Remote接口,java,maven,jakarta-ee,jboss,Java,Maven,Jakarta Ee,Jboss,这是一个真正的新手问题,但我希望能得到一些帮助。我已经研究了其他问题,但还没有找到解决办法。也许我忽略了一些简单的事情 我正在部署一个带有ejb模块的ear到jboss: ejbjar中有一个bean,MyBean是@Stateless ejbjar还依赖于api jar。在api jar中有一个单独的@Remote接口MyInterface 此api jar位于ejb的lib文件夹中。 MyBean实现了MyInterface。 我打开耳朵,一切正常。我正在将其部署到jboss eap 6
- ejbjar中有一个bean,MyBean是@Stateless
- ejbjar还依赖于api jar。在api jar中有一个单独的@Remote接口MyInterface
package com.test.rest;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
import com.test.MyInterface;
@Path("/message")
public class MessageRestService {
@Inject
private MyInterface myInterface;
@GET
@Path("/{param}")
public Response printMessage(@PathParam("param") String msg) {
final String result = myInterface.generateText(msg);
return Response.status(200).entity(result).build();
}
}
我做错了什么?我在ear和ejb中的META-INF中都有beans.xml,它在src/main/webapp/WEB-INF/beans.xml中也处于战争状态
我还将bean discovery mode=“all”放在beans.xml中,但没有乐趣。
此外,bean MyBean(实现远程接口)有一个无参数构造函数
另外:我有带接口的api jar,以及战争中作为依赖项引入的ejb jar。但它仍然给出了这个“未满足的依赖项”错误
有什么想法吗
谢谢
更新:这是MyInterface类:
package com.test;
import javax.ejb.Local;
@Local
public interface MyInterface {
public String generateText(String text);
}
还有MyBean:
package com.mycompany;
import javax.ejb.Stateless;
import com.test.MyInterface;
@Stateless
public class MyBean implements MyInterface {
public MyBean(){
}
public String generateText(String text) {
return "Hello there! " + text;
}
}
绑定:
19:11:22,679 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named MyBean in deployment unit subdeployment "MavenEnterpriseApp-ejb.jar" of deployment "MavenEnterpriseApp-ear-1.0-SNAPSHOT.ear" are as follows:
java:global/MavenEnterpriseApp-ear-1.0-SNAPSHOT/MavenEnterpriseApp-ejb/MyBean!com.test.MyInterface
java:app/MavenEnterpriseApp-ejb/MyBean!com.test.MyInterface
java:module/MyBean!com.test.MyInterface
java:global/MavenEnterpriseApp-ear-1.0-SNAPSHOT/MavenEnterpriseApp-ejb/MyBean
java:app/MavenEnterpriseApp-ejb/MyBean
java:module/MyBean
如果改为使用@EJB注入会发生什么?是的,这是有效的。为什么我不能在这里使用@Inject?或者使用@EJB调用这样的bean是标准的吗?另外:我本来希望能够将接口与war捆绑在一起,而java将解析实现类。但是,当我试图删除对实现类的依赖关系,或者甚至将依赖关系设置为“提供”时,这两种方法都不起作用。容器应该创建一个代理存根,以便通过MyInterface调用被远程发送到EAR文件中部署的EJB。您的@EJB注释可能还需要一个“mappedName”参数,该参数包含JBoss在部署MyBean时分配给您的全局名称之一。这些名称通常列在控制台日志中。我真的希望
mappedName
能起作用。您还可以尝试lookup=“java:global/MavenEnterpriseApp-ear-1.0-SNAPSHOT/MavenEnterpriseappejb/MyBean!com.test.MyInterface“