当前位置: 首页 > 知识库问答 >
问题:

在同一EAR中从WAR调用EJB

唐炜
2023-03-14

我正在使用Glassfish 4。我有一个耳朵,它有一个战争和一个罐子(与EJB)。

我想从WAR中调用EJB,但不确定是否需要使用本地或远程接口。

在我的罐子里,我的豆子是这样的:

@Stateless
public class Test implements TestLocal {

    @Override
    public void testing() {
    }
}
@Local
public interface TestLocal {
    void testing();
}

在我的WAR中,我有一个web服务,它看起来如下所示:

@WebService(serviceName = "TestWS")
public class TestWS {

    private @EJB TestLocal testBean;

    @WebMethod(operationName = "test")
    public String test() {
    testBean.test();
    }
}

这两个都包装成一个耳朵。

当我调用WebService方法时,我得到一个AccessLocalException:

首先:

  • 这是调用EJB的正确方法吗。EAR中的WAR可以使用包含的JAR中的本地接口吗?
  • 如果是的话,那么有没有人知道我做错了什么?是否需要设置某种安全配置?

共有1个答案

孙翰墨
2023-03-14

要查找远程EJB,它必须公开一个远程接口。将该远程接口包含到WAR中。

GlassFish文档中有一个针对此错误的条目:

javax.ejb.AccessLocalException: Client Not Authorized Error

说明

[...INFO|sun-appserver-pe8.0|javax.enterprise.system.container.ejb|...|
javax.ejb.AccessLocalException: Client not authorized for this invocation.
at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:...
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(...)
 类似资料:
  • 我有一个ear,它包含2个war文件,每个war都包含无状态ejb和rest类。接口位于commons中。jar文件。耳朵结构如下所示: 我试图使用无状态-ejb-2中的无状态-ejb-1和注释,但我在部署期间遇到了错误。当我在stateless-EJB-2中使用@EJB时,就部署了ear,但在调用jersey-rest-2时,我遇到了一个远程查找错误。 这是我的方法调用链: 泽西-rest-1

  • 此接口的实现是在WAR中定义的。这个实现部署了Fine。 在glassfish V3.1日志中,我看到: 信息:EJB FormConfigurationProviderBean的可移植JNDI名称:[java:global/com.dialog.eDialog_eServices_EAR_1.0.1-snapshot/checkout-form-1.0-snapshot/FormConfigur

  • 基本上,我有一种情况,我必须在一个耳朵内访问JAR中声明的EJB,而不是在另一个耳朵中访问WAR。两个EAR都部署到同一个WebLogic托管服务器(同一个域)。Java代码中没有用于该EJB的注释。在ejbjar中。xml它被定义为会话无状态容器bean。在WebLogicEJBJAR中。xml指定了本地jndi名称。我尝试使用InitialContext查找这个bean,并从该接口获取Loca

  • 我想使用wslt命令从命令行将war/ears文件部署到weblogic服务器。任何人都可以帮助解决这个问题。我需要命令来解决这个问题。

  • 问题内容: 将应用程序部署为EAR(具有1个EJB和1个WAR模块)与单独的模块有什么区别?我想使用GlassFish 3 Web配置文件,但它不支持EAR存档。我可以简单地将EJB和WAR用作单独的模块吗?还有其他选择吗? 问题答案: 3种部署变体之间似乎有些混淆: 包含EJB和WEB模块的EAR 部署单独的EJB模块和单独的WEB模块 部署包含EJB类或EJB jar的WEB模块。 在第一种情

  • 问题内容: .war和.ear文件有什么区别? 问题答案: 在J2EE应用程序中,模块根据其功能打包为EAR,JAR和WAR。 JAR:包含企业Java Bean(类文件)和EJB部署描述符的EJB模块打包为具有.jar扩展名的JAR文件。 WAR:包含Servlet类文件,JSP文件,支持文件,GIF和HTML文件的Web模块打包为具有.war(Web存档)扩展名的JAR文件。 EAR:以上所有