1. ホーム
  2. java

[解決済み] javax.naming.NameNotFoundException

2022-02-24 03:33:19

質問

JBoss5コンテナでejbのサンプルを動かしています。私は例を使っています ここから(その1) .
この例では、JBossにBeanを配備し、Tomcatにアプリケーションを配備しました(JBossからBeanにアクセスするため)。tomcatサーバーの画面では、以下のようなエラーが発生します。
javax.naming.NameNotFoundException: greetJndi がバインドされていません。

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

ありがとうございます。

解決方法は?

<ブロッククオート

javax.naming.NameNotFoundException: greetJndi not bound というエラーが表示されます。

これは、jndiの名前に何もバインドされていないことを意味します。 greetJndi であることから、デプロイメントに問題がある可能性が高いです。 信じられないほど低品質な このチュートリアルのサーバーログを確認してください)。この件に関しては、また後ほど。

<ブロッククオート

JBossでデプロイする際のディレクトリ構造は決まっているのでしょうか?

の内部構造は ejb-jar はこんな感じになっているはずです。 貧弱な命名規則とデフォルトのパッケージ のように)。

.
├── greetBean.java
├────────────────────────────┘Home.java
├── greetRemote.java
└──META-INF
    ├── ejb-jar.xml
    └──jboss.xml

しかし、すでに述べたように、このチュートリアルは間違いだらけです。

  • という余分な文字があります。 <enterprise-beans>] の中にあります。 ejb-jar.xml (!)
  • の後にスペースがありません。 PUBLIC の中で ejb-jar.xmljboss.xml (!!)
  • その jboss.xml が正しくありません。 session 要素ではなく entity (!!!)

以下は、quot;fixed" のバージョンです。 ejb-jar.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>greetBean</ejb-name>
      <home>greetHome</home>
      <remote>greetRemote</remote>
      <ejb-class>greetBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
  </enterprise-beans>
</ejb-jar>

そして、そのうちの jboss.xml :

<?xml version="1.0"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd">
<jboss>
  <enterprise-beans>
    <session>
      <ejb-name>greetBean</ejb-name>
      <jndi-name>greetJndi</jndi-name>
    </session>
  </enterprise-beans>
</jboss>

これらの変更を行い、ejb-jarを再パッケージ化した後、正常にデプロイすることができました。

21:48:06,512 INFO [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@5060868{vfszip:/home/pascal/opt/jboss-5.1.0.GA/server/default/deploy/greet.jar/} (デプロイメントに遭遇した場合)。
21:48:06,534 INFO [EjbDeployer] ビーンをインストールする: ejb/#greetBean,uid19981448
21:48:06,534 INFO [EjbDeployer] 依存関係を持つ。
21:48:06,534 INFO [EjbDeployer] と供給品です。
21:48:06,534 INFO [EjbDeployer] jndi:greetJndi。
21:48:06,624 INFO [EjbModule] greetBean をデプロイしています。
21:48:06,661 WARN [EjbModule] EJBはセキュリティをバイパスするように構成されました。これが意図的なものであるかどうかを確認してください。Bean=greetBean Deployment=vfszip:/home/pascal/opt/jboss-5.1.0.GA/server/default/deploy/greet.jar/ (デフォルトでは、GreetBeanをデプロイします。


21:48:06,805 INFO [ProxyFactory] EJBホーム 'greetBean' をjndi 'greetJndi' にバウンドさせる。

そのチュートリアルはかなりの改善が必要です。roseindia.netから離れることをお勧めします。