2011-07-18 13 views
4

で実行しているJSF 2.0管理対象BeanへのJBoss EJBを注入する次のような問題がある、私はいくつかの時間を探しまわってされており、私は解決策を見つけることができません。TomcatのWebアプリケーション

  1. 私が持っていますjBoss 6.0にデプロイされたEJB3アプリケーション(リモートejbを使用)
  2. Webアプリケーション(JSF 2.0)がTomcat 6.0にデプロイされています。

私はjBossでtomcat Webアプリケーションを実行したくない、そのアプリケーション tomcatで実行していて、アーキテクチャーは変わらないはずです。私は必要なのです何

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"); 

を注入することである。

私は手動でEJBをルックアップする必要はありません、私はこのようにそれを行うにはしたくない(言い換えれば、私はそれを注入したいです) JBossのEJBのTomcatアプリケーションで管理対象Beanに、MySB/remoteかのように例えば

@EJB(name="MySB/remote") 
protected MySB mySB; 

は、TomcatローカルJNDIであるが、実際にそのビーイングは、舞台裏でのJBoss JNDIから見上げました。

は可能ですか?

答えて

1

これはCDIで行うことができます。残念ながら、CDIサポートにはTomcatのような標準的なサーブレットエンジンは付属していないので、CDIアノテーションを活用するJSFアプリケーションをデプロイする場合は、CDI仕様の実装を取得する必要があります。 JSR 299のリファレンス実装は、Weldとして知られています。それをインストールするには、必要に:

1)JSFアプリケーション

2のWEB-INF\libフォルダにweld-servlet.jarを置く)あなたのweb.xmlに次のリスナー定義を追加します。

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

3)空beans.xmlに追加web.xmlファイルと一緒にファイルやアプリケーションのWEB-INFフォルダに-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でEJBを@Injectにする必要があります。

これが役に立ちます。

+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を参照)、次にそれを挿入します –

関連する問題