我通过 Stackoverflow 搜索了我的问题的答案,发现了一些非常相似的问题,但没有答案。
我正在尝试做的事情:创建一个简单的junit测试,其中启动了一个Glassfish 4.1嵌入式容器,并测试了一个EJB的简单操作。
示例 EJB:
@Stateless
@LocalBean
public class ExampleBean {
public int meaningOfLife() {
return 42;
}
}
很简单。这是我的单元测试:
public class BasicTest {
@EJB
private ExampleBean examplebean;
private static Context context;
private static EJBContainer container;
@BeforeClass
public static void init() {
Map<String,Object> props = new HashMap<String,Object>();
//props.put(EJBContainer.MODULES, new File("target/classes"));
props.put(EJBContainer.MODULES, new File("D:\\Development\\IDE\\workspace-templates\\jee7-template\\template-service\\target"));
try {
container = EJBContainer.createEJBContainer(props);//.getContext().bind("inject", this);
context = container.getContext();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我的 pom.xml 依赖项:
<dependency>
<groupId>org.glassfish.main.extras</groupId>
<artifactId>glassfish-embedded-static-shell</artifactId>
<version>4.1</version>
<scope>system</scope>
<systemPath>D:\\Development\\Servers\\glassfish4.1-activiti\\glassfish\\lib\\embedded\\glassfish-embedded-static-shell.jar</systemPath>
</dependency>
我还尝试添加以下依赖项:
<dependency>
<groupId>org.glassfish.main.ejb</groupId>
<artifactId>ejb-container</artifactId>
<version>4.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>javax.ejb-api</artifactId>
<version>3.2</version>
<scope>test</scope>
</dependency>
结果:嵌入式 GF 4.1 容器无法加载那个简单的 EJB(它位于 target/classes 文件夹中,经过 maven 编译后)。
根据不同的代码更改(例如是否使用属性传递给容器),我收到以下错误:
GF 4.1 嵌入式 UnsatisfiedDependencyException
我粘贴的代码给出了链接的最后一条错误消息。
我不明白。我到处寻找信息,说这应该有效。
此外,如果我尝试使用 OpenEJB 容器(遗憾的是它只是 jee6),它可以正常工作。
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>4.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0-6</version>
<scope>test</scope>
</dependency>
谢谢您的帮助!