如何将数据从应用程序传递到JCA资源适配器?

时间:2011-11-17 16:12:54

标签: java java-ee glassfish jca

我想配置一个自编写的JCA 1.6入站资源适配器(RA)。我的一个大问题是RA需要访问生活在使用RA的应用程序中的一些(动态)配置数据。 现在我知道这违背了整个JCA理念的原始想法,但遗憾的是我无法像我希望的那样尽快改变这种设计。 我需要获得RA的数据是

  • 它应该听的端口,
  • 用于整个应用程序的许可证(RA提供的功能需要额外许可)
  • 存储在db
  • 中的其他配置数据

我提出了四个想法:

  1. 使用asadmin create-resource-adapter-config。由于glassfish似乎不会根据RA重新启动应用程序,因此我们需要在此之后重新启动应用程序。虽然此尝试适用于端口,但它不适合其他数据。
  2. 使用管理对象为我的应用程序提供将数据传递到RA的方法。提到了这个想法here。我想这样做了,但规范在第13.4.2.3章中指出

      

    注意,管理对象不用于设置异步消息   传递到消息端点。 ActivationSpec JavaBean用于保存所有   异步消息传递所需的必要激活信息   设置。

    但我无法获取ActivationSpec对象的任何动态数据(既不通过DeploymentDescriptor也不通过注释)。或者我在这里错过了什么? : - )

  3. 直接使用JDBC访问数据(也从here获取了想法)。虽然这可能是最好的想法,但它不适用于所提到的许可数据,因为它没有存储在数据库中。

  4. 我的最后一个想法是在MessageDrivenBean(通过我的界面)中放置一个方法,用于从RA中获取数据。可以从RA调用该方法并提供数据。但是:我认为将RA与应用程序结合起来非常侮辱。

  5. 亲爱的社区,您对此有什么看法?我担心找到这些问题的答案并不容易,所以我对意见很满意!

    谢谢,欢呼, 朱利

2 个答案:

答案 0 :(得分:0)

在ra.xml中可以定义config-properties。在Websphere中,这些字段在所选资源适配器的自定义属性表中显示为可编辑字段。我正在处理类似的问题,我还需要将主机名/端口信息传递给RA。不幸的是,我还没想出如何从RA中读取这些字段的内容。

答案 1 :(得分:0)

我最终提出的解决方案是使用@ConfigProperty注释。这意味着我使用上述选项之一。

所以我的ResourceAdapter课程如下:

public class Hl7ResourceAdapter implements ResourceAdapter {
    @ConfigProperty
    private Integer port = null;

    // Rest from ResourceAdapter interface omitted here...

    // Use port here to open socket...
}

现在可以通过

设置@ConfigProperty字段
  • 资源适配器配置
  • ra.xml部署描述符

现在为了重新配置这些设置,我使用glassfish的REST interface以编程方式更改这些设置(也可以使用asadmin create-resource-adapter-config命令)。我解决了这个问题,即glassfish不会通过REST自行重启它来重新启动使用资源适配器的应用程序。 (确切地说:我禁用了应用程序,然后重新启用它以在glassfish中绕过another bug

一些补充说明:

  • 我们使用它将资源适配器的.rar文件部署到应用程序的.ear中。
  • 我们在glassfish(独立)之外有一个单独的应用程序,它调用REST接口来执行重启资源适配器应用程序等操作。显然,应用程序无法正常重启。

希望这会有所帮助。 kutuzof,这会让你更进一步吗?