gpt4 book ai didi

tomcat - 将 jBoss EJB 注入(inject)在 tomcat web 应用程序中运行的 JSF 2.0 托管 bean

转载 作者:行者123 更新时间:2023-11-28 21:50:15 24 4
gpt4 key购买 nike

找了半天没找到解决办法,问题如下:

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

我不想在 jBoss 中运行 tomcat web 应用程序,它是一个应用程序 在tomcat下运行,架构应该保持不变。

我不想手动查找 EJB(我想注入(inject)它)换句话说,我不想这样做:

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 注入(inject) 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) 在应用程序的 WEB-INF 文件夹中的 web.xml 和 faces-config.xml 文件旁边添加一个空的 beans.xml 文件:

<?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。

希望这对您有所帮助。

关于tomcat - 将 jBoss EJB 注入(inject)在 tomcat web 应用程序中运行的 JSF 2.0 托管 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6740088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com