如何在java SE应用程序中使用嵌入式openejb?

时间:2013-04-09 15:14:53

标签: java java-ee-6 openejb

我正在编写一个小的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。

非常感谢!

1 个答案:

答案 0 :(得分:0)

除了我的评论之外,我认为您的问题可以通过这种方式得到解答:

继续使用EJB模拟库的行为(如代码示例所示)。这是一种很好的方法,因为容器关心池,并行访问,事务等等。

然后您的Web应用程序(假设它位于同一容器中)可以直接使用这些EJB。

要通过控制台应用程序访问它,您可以在应用程序客户端容器中运行它(这比尝试在您的应用程序中嵌入容器更好),或者(我建议)在您的应用程序中公开您的业务逻辑其他方式(例如通过REST)并在独立客户端应用程序中使用它。

PS:要使用DI机制对业务逻辑进行集成测试,请使用Arquillian