web-dev-qa-db-ja.com

javax.naming.NameNotFoundException

JBoss5 Containerを使用してejbの例を実行しています。私は例を使用しています from here(Part one)
この例では、BeanをJBossにデプロイし、アプリケーションをTomcatにデプロイしました(JBossからBeanにアクセスするため)。 Tomcatサーバーの画面にエラーが表示されます
javax.naming.NameNotFoundException:greetJndiがバインドされていません

(greetJndiはjboss.xmlファイルのjndi-nameです)JBossにデプロイする特定のディレクトリ構造はありますか?

ありがとう

14
sjain

このエラーは、EJBコンポーネントにアタッチされていないJNDI名を検索しようとしていることを意味します。その名前のコンポーネントは存在しません。

Dir構造に関する限り、EJBコンポーネントを含むJARファイルを作成する必要があります。私が理解しているように、EJB 2.Xコンポーネントを使用したい(少なくともリンクされた例が示唆している)ため、JARファイルの構造は次のようになります。

/com/mypackage/MyEJB.class /com/mypackage/MyEJBInterface.class/com/mypackage/etc ... etc ... Java classes /META-INF/ejb-jar.xml /META-INF/jboss.xml

JARファイルは、ファイル拡張子がZipからJARに変更された多かれ少なかれZipファイルです。

ところで。 JBoss 5を使用している場合、EJB 3.0を使用できます。EJB3.0は設定がはるかに簡単です。最も単純なコンポーネントは

@Stateless(mappedName="MyComponentName")
@Remote(MyEJBInterface.class)
public class MyEJB implements MyEJBInterface{
   public void bussinesMethod(){

   }
}

Ejb-jar.xml、jboss.xmlは不要で、MyEJBおよびMyEJBInterfaceコンパイル済みクラスを持つEJB JARのみが必要です。

クライアントコードで、「MyComponentName」を検索する必要があります。

4