繁体   English   中英

将 jBoss EJB 注入到 JSF 2.0 托管 bean,该 bean 在 tomcat Z2569CZ8403 应用程序中运行

[英]Injecting a jBoss EJB to a JSF 2.0 managed bean running in a tomcat web application

找了好久也没找到解决办法,问题如下:

  1. 我在 jBoss 6.0 中部署了一个 EJB3 应用程序,带有远程 ejb。
  2. 我在 Tomcat 6.0 中部署了一个 web 应用程序(JSF 2.0)。

我不想在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM