1

次のように定義された 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 管理オブジェクトでどのように決定されますか? これらがどこで作成されたのかわかりません。後者の名前を使用すると、命名の例外と失敗が発生します。

最終的に、パス名を判別できるようにコンテキスト ツリー全体をダンプする関数を作成しましたが、何か間違ったことをしている可能性があると思います。

4

0 に答える 0