我将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名称?我不明白这些是在哪里创建的。如果我使用后面的名称,我会命名异常和失败。
我最终编写了一个函数来转储整个上下文树,以便我可以确定路径名,但我认为我可能做错了。