我正在编写一个小的java库,旨在用于Web应用程序以及java控制台应用程序。
为了从CDI和其他javaEE 6功能中获益并且不必维护库的两个版本(java EE和java SE),我想使用openejb(嵌入式)作为控制台应用程序。 所以我在eclipse中构建了一个maven项目并添加了openejb工件。
不知怎的,我只是不知道如何让控制台程序使用openejb-container,即解决我的注入和其他javaEE功能。
假设我有两个非常简单的类:
@Stateless
Class A {
@Inject
public B member;
public A() {};
}
和
@Stateless
Class B {
public B() {};
public String getString () {
return "Hello";
}
}
那么,我如何使用main()方法获得一个普通的旧java类使用嵌入式openejb实例化A的成员? - 以某种方式:
public class TestOpenEJB {
public static void main(String[] args) {
Class A a = new A(); /*wrong of couse*/
System.out.println( a.member.getString() );
}
}
这个简单示例的工作解决方案会有所帮助。
最后,我的目标是为内部使用嵌入式javaEE容器的库提供java SE api。
非常感谢!
答案 0 :(得分:0)
除了我的评论之外,我认为您的问题可以通过这种方式得到解答:
继续使用EJB模拟库的行为(如代码示例所示)。这是一种很好的方法,因为容器关心池,并行访问,事务等等。
然后您的Web应用程序(假设它位于同一容器中)可以直接使用这些EJB。
要通过控制台应用程序访问它,您可以在应用程序客户端容器中运行它(这比尝试在您的应用程序中嵌入容器更好),或者(我建议)在您的应用程序中公开您的业务逻辑其他方式(例如通过REST)并在独立客户端应用程序中使用它。
PS:要使用DI机制对业务逻辑进行集成测试,请使用Arquillian。