![](/img/trans.png)
[英]Remote Ejb bean deployed on Weblogic called from Tomcat web application
[英]Injecting a jBoss EJB to a JSF 2.0 managed bean running in a tomcat web application
找了好久也没找到解决办法,问题如下:
我不想在 jBoss 中运行 tomcat web 应用程序,它是在 Z1B359D84753858B55ZBE 下运行的应用程序,架构应该保持不变。
我不想手动查找 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 中查找的。
那可能吗?
您可以使用 CDI 执行此操作。 不幸的是,CDI 支持不附带像 Tomcat 这样的标准 servlet 引擎,因此如果您想部署利用 CDI 注释的 JSF 应用程序,您需要获得 CDI 规范的实现。 JSR 299 的参考实现称为Weld 。 要安装它,您需要:
1) 将weld-servlet.jar
放到JSF 应用程序的WEB-INF\lib
文件夹中
2)将以下监听器定义添加到您的web.xml
:
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
3) add in an empty beans.xml
file alongside the web.xml and faces-config.xml file in the WEB-INF
folder of the application:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
最后,您需要在托管 bean 中@Inject
您的 EJB。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.