有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想配置一个自行编写的JCA1.6入站资源适配器(RA)。我的大问题是RA需要访问使用RA的应用程序中的一些(动态)配置数据。 现在我知道,这与整个JCA想法的原始想法背道而驰,但不幸的是,我不能像我希望/不得不改变的那样快。 我需要的数据是

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

我想出了四个主意:

  1. 使用asadmin创建资源适配器配置。由于glassfish似乎不会根据RA重新启动应用程序,因此我们需要在此之后重新启动应用程序。虽然此尝试适用于端口,但不适用于其他数据
  2. 使用受管对象为我的应用程序提供将数据传递到RA的方法。这个想法被提到了。我猜是这样,但规范在第13.4.2.3章中规定

    Note, administered objects are not used for setting up asynchronous message deliveries to message endpoints. The ActivationSpec JavaBean is used to hold all the necessary activation information needed for asynchronous message delivery setup.

    但是,我无法向ActivationSpec对象获取任何动态数据(既不是通过DeploymentDescriptor,也不是通过注释)。还是我错过了什么?:-)

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

  4. 我的最后一个想法是(通过我的接口)在MessageDrivenBean中放置一个方法,用于从RA中获取数据。可以从RA调用该方法并提供数据。但是:我只是认为这是相当滥用的,因为它将RA与应用程序结合起来

亲爱的社区,您对此有何看法?恐怕要找到这些问题的答案并不容易,所以我很乐意听取意见

谢谢大家,干杯, 朱利叶斯


共 (2) 个答案

  1. # 1 楼答案

    我最终想出的解决方案是使用@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字段现在可以通过

    • 资源适配器配置
    • 拉。xml部署描述符

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

    还有几点需要注意:

    • 我们部署资源适配器的。rar文件进入。使用它的应用程序的ear
    • 我们在glassfish(独立)之外有一个单独的应用程序,它调用REST接口来执行重启资源适配器应用程序等操作。很明显,应用程序无法正确重启自身

    希望这有帮助kutuzof这会让你走得更远吗

  2. # 2 楼答案

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