2011-07-18 41 views
4

我一直在尋找了一段時間,我無法找到一個解決辦法,問題如下:注入JBOSS EJB到JSF 2.0託管bean在Tomcat Web應用程序運行

  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查找幕後。

是可能的嗎?

回答

1

你可以用CDI做到這一點。不幸的是,CDI支持並沒有像Tomcat這樣的標準servlet引擎,所以如果你想部署一個利用CDI註釋的JSF應用程序,你需要實現CDI規範。 JSR 299的參考實現被稱爲Weld。要安裝它,你需要:

1)把weld-servlet.jar到JSF應用程序

2)的WEB-INF\lib文件夾下面的監聽器定義添加到您的web.xml

<listener> 
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> 
</listener> 

3)添加一個空beans.xml file應用於WEB-INF文件夾中的web.xml和faces-config.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。

希望這會有所幫助。

+0

例如,如果EJB的jboss下,它的jnp地址是jnp:// localhost:1099我應該在tomcat中配置它? –

+0

將遠程EJB定義爲資源(​​請參閱http://docs.jboss.org/weld/reference/1.0.0/en-US/html/resources.html#d0e4373),然後注入它 –