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。另一个例子是persistence.xml。我在树脂中定义了数据源:

<non-jta-data-source>java:/comp/env/jdbc/tehdb</non-jta-data-source>

使用树脂.xml:

<database jndi-name="jdbc/tehdb">
    <driver type="com.mysql.jdbc.Driver">
        ...
    </driver>
</database>

我的问题是:

为什么查找时我的 JNDI 名称是“java:app/webapp/articleController”而不仅仅是“articleController”?为什么我的数据源是“java:/comp/env/jdbc/tehdb”而不仅仅是“jdbc/tehdb”?我看到许多示例只是将 JNDI 名称显示为后者。Resin 托管对象中的这些 JNDI 名称是如何确定的?我不明白这些是在哪里创建的。如果我使用后面的名称,我会得到命名异常和失败。

我最终编写了一个函数来转储整个上下文树,以便我可以确定路径名,但我认为我可能做错了什么。

4

0 回答 0