1

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

非常感谢!

4

1 回答 1

0

除了我的评论,我认为您的问题可以通过以下方式回答:

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

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

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

PS:要使用 DI 机制集成测试您的业务逻辑,请使用Arquillian

于 2013-04-10T08:48:03.570 回答