将 jBoss EJB 注入到在 tomcat Web 应用程序中运行的 JSF 2.0 托管 Bean
我已经四处寻找了一段时间,但找不到解决方案,问题如下:
- 我在jBoss 6.0中部署了一个EJB3应用程序,带有远程ejb。
- 我有一个部署在 Tomcat 6.0 中的 Web 应用程序 (JSF 2.0)。
我不想在 jBoss 中运行 tomcat Web 应用程序,它是一个应用程序 运行在tomcat下,架构应该保持不变。
我不想手动查找 EJB(我想注入它),换句话说,我不想这样做:
Properties properties = new Properties();
properties.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
properties.setProperty("java.naming.provider.url", "jnp://localhost:1099");
properties.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
Context c = new InitialContext();
MySB mySB = (MySB) c.lookup("MySB/remote");
我真正需要的是将 jBoss EJB 注入到 Tomcat 应用程序中的托管 bean 中,例如示例
@EJB(name="MySB/remote")
protected MySB mySB;
就好像 MySB/remote
位于 tomcat 本地 JNDI 中,但实际上它是在幕后从 jBoss JNDI 中查找的。
这可能吗?
I have been looking around for some time, and I cannot find a solution, the problem is as follows:
- I have an EJB3 application deployed in jBoss 6.0, with remote ejb's.
- I have a web application (JSF 2.0) deployed in Tomcat 6.0.
I don't want to run the tomcat web application in jBoss, its an application
running under tomcat, and the architecture should remain the same.
I don't want to lookup the EJB manually (I want to inject it) in other words I don't want to do it like this:
Properties properties = new Properties();
properties.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
properties.setProperty("java.naming.provider.url", "jnp://localhost:1099");
properties.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
Context c = new InitialContext();
MySB mySB = (MySB) c.lookup("MySB/remote");
What I do need is to inject the jBoss EJB's into managed beans in the Tomcat application, for example
@EJB(name="MySB/remote")
protected MySB mySB;
as if the MySB/remote
is in the tomcat local JNDI, but in fact its being looked up from the jBoss JNDI behind the scenes.
is that possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 CDI 来完成此操作。不幸的是,像 Tomcat 这样的标准 servlet 引擎并不提供 CDI 支持,因此如果您想要部署利用 CDI 注释的 JSF 应用程序,您需要获得 CDI 规范的实现。 JSR 299 的参考实现称为 Weld。要安装它,您需要:
1) 将
weld-servlet.jar
放入 JSF 应用程序的WEB-INF\lib
文件夹2) 将以下侦听器定义添加到您的
web.xml
:3) 在
WEB-INF
中的 web.xml 和 faces-config.xml 文件旁边添加一个空的beans.xml
文件应用程序的文件夹:最后你需要
@Inject
在托管 bean 中您的 EJB。希望这有帮助。
You can do this with CDI. Unfortunately CDI support doesn't come with a standard servlet engine like Tomcat, so if you want to deploy a JSF application that leverages CDI annotations you need to get an implementation of the CDI specification. The reference implementation of JSR 299 is known as Weld. To install it you need:
1) put
weld-servlet.jar
to theWEB-INF\lib
folder of your JSF application2) add following listener definition to your
web.xml
:3) add in an empty
beans.xml
file alongside the web.xml and faces-config.xml file in theWEB-INF
folder of the application:Finally you need to
@Inject
your EJB in managed beans.Hope this helps.