如何确定JNDI名称?

时间:2013-10-27 18:49:32

标签: java java-ee jndi resin

我将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>

with resin.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名称?我不明白这些是在哪里创建的。如果我使用后面的名称,我会命名异常和失败。

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

0 个答案:

没有答案