Java 从另一个EAR访问本地会话Bean?

Java 从另一个EAR访问本地会话Bean?,java,session,ejb,glassfish-3,ear,Java,Session,Ejb,Glassfish 3,Ear,如何从另一个EAR调用EAR中的本地会话Bean 部署在同一Glassfish v3域中 结构如下: Glassfish v3 Domain1 EAR1 EAR1-EJB.jar class TestSessionBean <-- @Stateless common.jar interface TestSessionLocal

如何从另一个EAR调用EAR中的本地会话Bean 部署在同一Glassfish v3域中

结构如下:

Glassfish v3 Domain1

    EAR1
            EAR1-EJB.jar
                    class TestSessionBean           <-- @Stateless
            common.jar
                    interface TestSessionLocal      <-- @Local

    EAR2
            EAR2-EJB.jar
                    class TestSessionBeanClient     <-- @Singleton, @LocalBean
            common.jar
                    interface TestSessionLocal      <-- @Local

这将抛出ClassCastException,因为返回的对象不会 TestSessionLocal,但它是一个代理类,如:

TestSessionLocal_1389930137
为了能够调用它的方法,我必须进行反思以找到它的方法

请帮忙


提前感谢您。

根据EJB3.1规范的3.2.2:

通过访问企业bean 仅需要本地客户端视图 为本地客户端提供支持 打包在同一应用程序中 作为提供 本地客户端视图。顺从的 本规范的实现 可以选择支持访问 企业的本地客户端视图 来自本地客户机的bean打包在 不同的应用。这个 的配置要求 对本地服务器的应用程序间访问 客户端视图是特定于供应商的,并且 不在本协议范围之内 规范。依赖于 对本地服务器的应用程序间访问 客户端视图是不可移植的

以下是GlassFish常见问题解答:


(也就是说,您可以尝试打包接口,使其由两个应用程序共用的类加载器加载。)

您真的不想这样做。正如另一个答案所说,它不需要支持。它有问题的众多原因之一是它可能导致类加载器问题。如果一个ear中的类引用另一个ear中的类,那么可能会发生各种不好的事情(例如,如果另一个ear被重新部署,跨类加载器引用将变得无效)。

这是我在Stackoverflow上发布的第一条消息,但我承认我经常阅读它。顺便说一句,我的英语很抱歉

我想我找到了解决这个问题的替代方案:

我已经用@Remote注释了我的EJB,这是我的sun EJB配置

sunejbjar.xml

  <ejb>
    <ejb-name>XXX</ejb-name>

    <ior-security-config>
        <transport-config>
            <integrity>required</integrity> 
            <confidentiality>required</confidentiality>
            <establish-trust-in-target>supported</establish-trust-in-target>
            <establish-trust-in-client>required</establish-trust-in-client>
        </transport-config>

        <sas-context>
            <caller-propagation>supported</caller-propagation>
        </sas-context>
    </ior-security-config>
  </ejb>

XXX
必修的
必修的
支持
必修的
支持
经过一些测试后,如果没有已知的证书,客户端似乎无法访问EJB。其他人可以访问此EJB而无需任何身份验证


编辑:我尝试了类加载器解决方案,但它对我的项目不可行

你能解释一下吗,还是这只是一种信念?@ymajoros-我想我已经解释过了?当您在另一个ear中获得对本地bean的引用时,您将直接引用从另一个类加载器加载的类。当另一个ear被重新部署时,该引用会发生什么变化?你否决了我,因为你不明白我的答案?@ymajoros-为你添加了具体的例子。问题是关于本地接口的。你用一个遥控器和一些特定于glassfish的远程安全系统来回答。是的。正如我所说,这是一个替代解决方案,而不是解决方案。谢谢你发我的帖子对不起,你的回答与问题无关-1不是一种侮辱,它是保持这个网站的质量相比,随机论坛。如果我错了,请确保您将从其他用户处获得+1。
  <ejb>
    <ejb-name>XXX</ejb-name>

    <ior-security-config>
        <transport-config>
            <integrity>required</integrity> 
            <confidentiality>required</confidentiality>
            <establish-trust-in-target>supported</establish-trust-in-target>
            <establish-trust-in-client>required</establish-trust-in-client>
        </transport-config>

        <sas-context>
            <caller-propagation>supported</caller-propagation>
        </sas-context>
    </ior-security-config>
  </ejb>