将Java EE应用程序连接到外部系统

时间:2011-12-10 19:32:33

标签: java-ee glassfish jca

我们有一个在Glassfish 3.1上运行的Java EE应用程序需要接受来自用Java编写的遗留系统的通知。此遗留系统提供了一个JAR文件,应该由希望订阅系统通知的任何外部应用程序使用。

在Java SE应用程序中使用时,库的工作方式如下:

  1. 使用旧系统的连接参数初始化库
  2. 该库连接到系统并侦听通知
  3. 我们的应用程序通过实现接口注册通知
  4. 每当收到通知时,实现类中的方法称为
  5. 我们希望在Java EE中重现相同的方式,只要系统发送通知就调用EJB方法。

    JCA是否可行?单例EJB如何初始化库并将自己注册为侦听器?

    很难找到关于这个主题的好例子,所以如果你有任何指导,我将不胜感激。

1 个答案:

答案 0 :(得分:6)

理论上,JCA确实是用于此的专用API。

如果应用程序是EAR并且EJB类存在于纯EJB模块中,则允许EJB执行的操作存在相当多的限制。 JCA可以专门做那些不允许EJB做的事情(反射,静态字段,创建线程,加载本机库等)。

缺点是JCA是一个“精心”未充分记录的API,更倾向于由您描述的此类遗留系统的供应商使用,而不是“普通”应用程序员。如果你想采用JCA方式,一个信息来源可能是Quartz源代码,其中包含inbound JCA resource adapter for Quartz

应仔细注意将Singleton直接注册为听众。遗留库应该引用Singleton的代理类,而不是实际的实现(即不要将this传递给遗留库。)

另一种选择可能是提供一个实现所需接口的常规类并向遗留库注册。收到通知后,它可以从JNDI查找JMS连接工厂和队列,然后发送消息驱动Bean正在侦听的JMS消息。