这个问题是关于Java EE 6的,使用glassfish v3 embedded-all。
我有一个使用 EJBContainer 来测试我的无状态 EJB 的单元测试。问题是我无法使用 JNDI 查找 EJB(远程):
setup() {
ctx = EJBContainer.createEJBContainer().getContext();
}
...
test() {
BookService bookService = (BookService)ctx.lookup("java:global/BookServiceEJB!com.something.service.BookService");
...
}
@Stateless
public class BookServiceEJB implements BookService {
...
}
@Remote
public interface BookService {
...
}
给出了例外:
javax.naming.NamingException: Lookup failed for 'java:global/BookServiceEJB!com.something.service.BookService' in SerialContext [Root exception is javax.naming.NameNotFoundException: BookServiceEJB!com.something.service.BookService not found]
...
caused by: javax.naming.NameNotFoundException: BookServiceEJB!com.something.service.BookService not found
我尝试了几个 JNDI 资源路径:
例如
java:global/BookServiceEJB
java:global/BookService
甚至:
java:global/BookShelf-1.0-SNAPSHOT/BookServiceEJB
ETC...
没什么用
我没有配置任何 xml 部署文件,只有persistence.xml
META-INF 中的一个。
测试使用 maven surefire:
mvn clean test
任何帮助是极大的赞赏!
注意:完全部署到 Glassfish 服务器工作(使用 appclient 和@EJB
注入)