将远程 EJB 接口注入外部模块
Inject of remote EJB interface into external module
我有一个包含三个模块的 EAR 应用程序:
- bean 在 "app-ejb" 模块中
- 远程接口在"app-remote"
- Web 服务位于 "app-war"
- app-ejb 和 app-war 使用 app-remote 作为库。
全部打包在"app.ear".
这工作正常,但现在我必须在 EAR 应用程序之外使用相同的 bean,注入不起作用。
我在 app-ejb 中有:
@Stateless
@LocalBean
public class Services implements ServicesRemote {
[...]
}
和他在 app-remote 中的远程接口:
@Remote
public interface ServicesRemote {
[...]
}
在我的应用程序中-war 我可以毫无问题地注入远程 bean:
@Stateless
@LocalBean
public class UseServices {
@EJB
private ServicesRemote services;
[...]
}
无论如何,在我的外部 ejb 应用程序中,作为独立部署并使用相同的 ejb-remote 作为库,如果我尝试像这样注入相同的 EJB:
@Stateless
@LocalBean
public class UseServicesFromAnotherApp {
@EJB
private ServicesRemote services;
[...]
}
Glassfish (4.1) 给我一个错误 "Class [ Lcom/[...]/ServicesRemote; ] not found"。
这是预期的吗?如何正确注入远程 bean?
注入不适用于远程接口。 "injectable" 的 Bean 位于容器的 JVM 中,可用于注入同一应用程序中的其他 Bean。这同样适用于访问同一容器中另一个应用程序中的 bean,尽管应用程序可能位于同一 JVM 中。由于远程方法源自另一个 JVM 或另一个应用程序,因此注入是不可能的。您必须改用 JNDI 查找来获取对远程 bean 的引用。
根据个人喜好,我会远离 EJB 远程接口,而是使用另一种 "remoting" 技术,例如 REST。
这个问题可能是由一些热部署引起的,导致 glassfish 不稳定。
当我重新启动 glassfish 时,我的代码开始正常工作(它实际上仍在工作)。
很抱歉没有先尝试重启 glassfish 就在这里发帖。
我有一个包含三个模块的 EAR 应用程序:
- bean 在 "app-ejb" 模块中
- 远程接口在"app-remote"
- Web 服务位于 "app-war"
- app-ejb 和 app-war 使用 app-remote 作为库。
全部打包在"app.ear".
这工作正常,但现在我必须在 EAR 应用程序之外使用相同的 bean,注入不起作用。
我在 app-ejb 中有:
@Stateless
@LocalBean
public class Services implements ServicesRemote {
[...]
}
和他在 app-remote 中的远程接口:
@Remote
public interface ServicesRemote {
[...]
}
在我的应用程序中-war 我可以毫无问题地注入远程 bean:
@Stateless
@LocalBean
public class UseServices {
@EJB
private ServicesRemote services;
[...]
}
无论如何,在我的外部 ejb 应用程序中,作为独立部署并使用相同的 ejb-remote 作为库,如果我尝试像这样注入相同的 EJB:
@Stateless
@LocalBean
public class UseServicesFromAnotherApp {
@EJB
private ServicesRemote services;
[...]
}
Glassfish (4.1) 给我一个错误 "Class [ Lcom/[...]/ServicesRemote; ] not found"。
这是预期的吗?如何正确注入远程 bean?
注入不适用于远程接口。 "injectable" 的 Bean 位于容器的 JVM 中,可用于注入同一应用程序中的其他 Bean。这同样适用于访问同一容器中另一个应用程序中的 bean,尽管应用程序可能位于同一 JVM 中。由于远程方法源自另一个 JVM 或另一个应用程序,因此注入是不可能的。您必须改用 JNDI 查找来获取对远程 bean 的引用。
根据个人喜好,我会远离 EJB 远程接口,而是使用另一种 "remoting" 技术,例如 REST。
这个问题可能是由一些热部署引起的,导致 glassfish 不稳定。 当我重新启动 glassfish 时,我的代码开始正常工作(它实际上仍在工作)。
很抱歉没有先尝试重启 glassfish 就在这里发帖。