我有一个包含三个模块的EAR应用程序:
所有内容都打包在“app.ear”中。
这工作正常,但现在我必须在EAR应用程序之外使用相同的bean,并且注入不起作用。
我在app-ejb:
@Stateless
@LocalBean
public class Services implements ServicesRemote {
[...]
}
和app-remote中的远程接口:
@Remote
public interface ServicesRemote {
[...]
}
在我的app-war中,我可以毫无问题地注入远程bean:
@Stateless
@LocalBean
public class UseServices {
@EJB
private ServicesRemote services;
[...]
}
无论如何,在我的外部ejb应用程序中,如果我尝试像这样注入相同的EJB,则作为独立部署并使用相同的ejb-remote作为库:
@Stateless
@LocalBean
public class UseServicesFromAnotherApp {
@EJB
private ServicesRemote services;
[...]
}
Glassfish(4.1)给我一个错误“Class [Lcom /[...]/ ServicesRemote;] not found”。
这是预期的吗?如何正确注入远程bean?
答案 0 :(得分:2)
注射不适用于远程接口。可注射"的豆类存在于容器的JVM中,可以注入同一应用程序内的其他bean。虽然应用程序可能位于同一个JVM中,但同样适用于访问同一容器中另一个应用程序中的bean。由于远程方法源自另一个JVM或其他应用程序,因此无法进行注入。您必须使用JNDI查找来获取对远程bean的引用。
作为一个问题或个人品味,我会远离EJB远程接口,而是我会使用另一个"远程处理" REST等技术。
答案 1 :(得分:0)
问题可能是由许多热部署造成的,使得玻璃鱼不稳定。 当我重新启动glassfish时,我的代码开始正常工作(它实际上仍在工作)。
很抱歉发布此处而不尝试重新启动glassfish。