将 jBoss EJB 注入到在 tomcat Web 应用程序中运行的 JSF 2.0 托管 Bean

发布于 2024-11-25 01:58:21 字数 1046 浏览 1 评论 0原文

我已经四处寻找了一段时间,但找不到解决方案,问题如下:

  1. 我在jBoss 6.0中部署了一个EJB3应用程序,带有远程ejb。
  2. 我有一个部署在 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:

  1. I have an EJB3 application deployed in jBoss 6.0, with remote ejb's.
  2. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

老子叫无熙 2024-12-02 01:58:21

您可以使用 CDI 来完成此操作。不幸的是,像 Tomcat 这样的标准 servlet 引擎并不提供 CDI 支持,因此如果您想要部署利用 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>

最后你需要@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 the WEB-INF\lib folder of your JSF application

2) add following listener definition to your 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>

Finally you need to @Inject your EJB in managed beans.

Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文