次のように定義された EJB があります。
@Stateless(name="articleController")
public class ArticleController {
...
}
私はJersey JAX-RS v2.4 APIを使用してRESTサービスを定義しています:
@Path("article")
public class ArticleService extends BaseService {
@PUT
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.TEXT_PLAIN)
public String insertArticle() throws NamingException {
ArticleController controller;
controller = (ArticleController)ctx.lookup("java:app/webapp/articleController");
controller.addArticle();
return(controller.getCurrentDate());
}
}
私はレジン 4.0.36 サーバーを使用しています。EJB lite 3.1 を使用しています。何よりも、このコードは正常に機能します。コンテキスト ルックアップによって EJB を取得できます。もう 1 つの例は、persistence.xml にあります。私は樹脂で定義されたデータソースを持っています:
<non-jta-data-source>java:/comp/env/jdbc/tehdb</non-jta-data-source>
resin.xml を使用:
<database jndi-name="jdbc/tehdb">
<driver type="com.mysql.jdbc.Driver">
...
</driver>
</database>
私の質問は次のとおりです。
ルックアップでJNDI 名が「 articleController」ではなく「java:app/webapp/articleController」になっているのはなぜですか? データ ソースが"jdbc/tehdb "ではなく"java:/comp/env/jdbc/tehdb"になっているのはなぜですか? JNDI名を単に後者として表示する例をたくさん見ます。これらの JNDI 名は、Resin 管理オブジェクトでどのように決定されますか? これらがどこで作成されたのかわかりません。後者の名前を使用すると、命名の例外と失敗が発生します。
最終的に、パス名を判別できるようにコンテキスト ツリー全体をダンプする関数を作成しましたが、何か間違ったことをしている可能性があると思います。