0

我想配置一个自写的 JCA 1.6 入站资源适配器 (RA)。我的大问题是 RA 需要访问使用 RA 的应用程序中的一些(动态)配置数据。现在我知道这与整个 JCA 理念的最初理念背道而驰,但不幸的是,我无法按照我的意愿/必须尽快更改此设计。我需要到达 RA 的数据是

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

我提出了四个想法:

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

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

    但是我无法将任何动态数据传递给 ActivationSpec 对象(既不是通过 DeploymentDescriptor 也不是通过注释)。还是我在这里错过了什么?:-)

  3. 直接使用 JDBC 来访问数据(也从这里得到了这个想法)。虽然这可能是最好的主意,但它不适用于上述许可数据,因为它不存储在数据库中。

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

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

谢谢和欢呼,朱利叶斯

4

2 回答 2

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 接口以编程方式更改这些设置(也可以使用该asadmin create-resource-adapter-config命令)。我规避了这个问题,glassfish 不会通过简单地通过 REST 自己重新启动来重新启动使用资源适配器的应用程序。(准确地说:我禁用了该应用程序,然后重新启用它以绕过glassfish 中的另一个错误)

一些附加说明:

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

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

于 2012-03-14T15:43:26.153 回答
0

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

于 2012-03-06T09:23:26.093 回答