2013-04-09 77 views
1

我正在写一个小的Java库,旨在用于Web应用程序以及Java控制台应用程序。如何从java SE应用程序中使用嵌入式openejb?

为了从CDI和其他javaEE 6特性中获利,并且不需要维护库的两个版本(java EE和java SE),我希望为控制台应用程序使用openejb(嵌入式)。 所以我在eclipse中构建了一个maven项目并添加了openejb工件。

不知何故,我只是没有得到如何使控制台程序使用openejb容器,这是解决我的注射和其他javaEE功能。

可以说我有两个非常简单的类:

@Stateless 
Class A { 

    @Inject 
    public B member; 

    public A() {}; 

} 

@Stateless 
Class B { 

    public B() {}; 

    public String getString() { 
     return "Hello"; 

    } 

} 

所以,我怎么会得到一个普通的旧式Java类带有main()方法使实例中的一员一个使用嵌入式openejb? - 以下面的方式:

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

你的@EJB不能超出一个类(见[API](http://docs.oracle.com/javaee/6/api/javax/ejb/EJB.html)),这是一个错字吗? - 除此之外,如果可能的话,我会建议您的库独立于它的使用位置,然后在JSE和JEE应用程序中使用它。 – 2013-04-10 05:55:26

+0

这是我原来的计划。该库将在java SE中供servlet使用。但这意味着库使用的资源不受服务器容器管理。当有很多请求进来时(例如分配的内存过多),这不会导致问题吗? – datamole 2013-04-10 08:29:21

+0

我对你的图书馆知之甚少,但对我而言,这似乎有点奇怪,你需要这些机制。您的库从用户的角度来看是一个后端系统,servlet和管理员都可以使用控制台访问来使用后端系统,就像您可以使用Web应用程序和控制台中的数据库一样。所以,你基本上有同样的问题,不管你用哪种方式 - 仍然应该是独立的。关于资源,当然你不得不关心并行访问或多个实例/池,或者你必须接受串行访问。 – 2013-04-10 08:41:24

回答

0

附加到我的意见,我觉得你的问题可以这样回答:

去,并使用EJB模型库中的行为(如在你的代码示例)。这是一个很好的方法,因为容器关心的是集合,并行访问,事务等。

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

并且为了通过控制台应用程序访问它,您可以在应用程序客户端容器中运行它(这比在应用程序中嵌入容器更合适),或者(我会推荐的)公开您的业务逻辑一个额外的方式(例如通过REST)并将其用于独立的客户端应用程序。

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

相关问题