gpt4 book ai didi

jakarta-ee - Java EE 6 - 嵌入式容器 EJB 测试

转载 作者:行者123 更新时间:2023-12-04 01:00:50 26 4
gpt4 key购买 nike

这个问题是关于 Java EE 6 , 使用 glassfish v3 嵌入所有 .

我有一个单元测试,它使用 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 {
...
}

给出了异常(exception):
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 注入(inject))

最佳答案

经过大量搜索,找到了适合我的解决方案...

您必须使用属性配置 EJBContainer:EJBContainer.MODULES,以及模块类所在的位置(如果使用 maven,则为“target/classes”)。

例如

...
props = new Properties();
props.put(EJBContainer.MODULES, new File("target/classes"));
ec = EJBContainer.createEJBContainer(props);
...

如果您的 EJB 使用 JPA,则另一个问题是您将无法在嵌入式容器中定义数据源,因此必须使用默认 ds:'jdbc/__default'。

所以例如我的 persistence.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="1.0">

<persistence-unit name="bookshelf" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.blah.domain.Book</class>
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>

</persistence>

我还没有弄清楚如何将嵌入式容器测试配置为使用一个 DS(jdbc/__default),而我的应用程序使用另一个(例如 jdbc/booksDS)

: http://www.mentby.com/glassfish/embedded-testing-woes.html

: http://forums.java.net/jive/thread.jspa?messageID=395759

老实说,当像 spring 这样的解决方案如此简单时,我不知道为什么人们会为 Java EE 烦恼......

这非常令人沮丧并且浪费了很多时间......希望这会有所帮助。

关于jakarta-ee - Java EE 6 - 嵌入式容器 EJB 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com