【问题标题】:How to manage the life cycle of JCA ManagedConnectionFactory?如何管理 JCA ManagedConnectionFactory 的生命周期?
【发布时间】:2011-08-05 11:04:07
【问题描述】:

我通过将 rar 文件放在 jboss 的部署文件夹中作为 7 来部署它。稍后部署我的 war 文件。

根据standalone.xml 中的定义,此连接器绑定到JNDI 位置。

在部署时默认执行createConnectionFactory(ConnectionManager cm)。

我在类加载器的帮助下在这个方法中做了一些家务

类加载器 contextClassLoader = Thread.currentThread().getContextClassLoader();

当我尝试使用 ejb 访问适配器时,再次执行 createConnectionFactory(ConnectionManager cm) 方法

问题最初是在部署 contextClassLoader 时为 null。后来,当从 ejb 调用时,它有一个值。实际上我的家务工作失败了。

问题:

  1. createConnectionFactory(ConnectionManager cm) 在部署时执行 => 这是正确的行为吗?

  2. 如何配置ironJacamar/jboss在部署时不执行这个方法?

其他信息:Jboss As7、NetBeans 7、Jdk1.7

编辑: 上述行为是正确的。我使用的适配器要求部署时使用的类加载器必须与运行时使用的类加载器相同。默认情况下它使用 Thread.currentThread().getContextClassLoader()。我将其更改为使用 ClassLoader cl = MyManagedConnectionFactory.class.getClassLoader();

【问题讨论】:

    标签: java jakarta-ee jboss jboss7.x jca


    【解决方案1】:

    createConnectionFactory(ConnectionManager cm) 在部署时执行 => 这是正确的行为吗?

    如果您有一个 ConnectionFactory 定义,那么我希望看到此方法被调用,因为容器在 JNDI 命名空间中创建并绑定了一个 ConnectionFactory 定义 - 您正在接受 ConnectionManager 的调用这一事实表明它正在执行在托管场景中。

    JCA 规范的第 6 章非常详细地描述了资源适配器的这一领域,所以我认为那里有一个明确的答案。编辑:第 17 章也可能相关。

    【讨论】:

    • 是的,你是对的。我使用的适配器要求部署时使用的类加载器必须与运行时使用的类加载器相同。默认情况下它使用 Thread.currentThread().getContextClassLoader()。我将其更改为使用 ClassLoader cl = MyManagedConnectionFactory.class.getClassLoader();
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多