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

标签 tomcat jakarta-ee ejb-3.0 jndi jboss6.x

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

  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/

相关文章:

java - 在插件中和通过 Tomcat 覆盖 Spring Boot application.properties 属性?

java - Java EE 新手,使用 Jersey SDK 获取 HTTP 404 的 Json web 服务

java - 您如何找出导致 CDI 事务回滚的异常?

Java EE 5 依赖注入(inject)?

java - 有没有办法中断有状态 session bean?

java - 独立于容器的自定义领域(例如 Tomcat 和 Jetty)

java - 使用 Jersey 和 Tomcat 设置 Jackson 2

java - Jsp 包含不工作 : file not found, 状态 500

java - 发送 HTTP POST 请求

java - 我是否正确使用了 EJB?