Java 从另一个EAR访问本地会话Bean?
如何从另一个EAR调用EAR中的本地会话Bean 部署在同一Glassfish v3域中 结构如下: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
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>