从非托管环境访问Java连接器体系结构(JCA)

从非托管环境访问Java连接器体系结构(JCA),java,jakarta-ee,jca,Java,Jakarta Ee,Jca,我们一直在使用JCA与WebSphere内部的低级网络资源进行接口,但是我们需要能够从Tomcat外部访问相同的网络资源(即不在托管环境中)。网络通信和协议布局非常冗长,因此我们不希望复制/粘贴数千行代码(然后必须单独维护它们) 从阅读JCA规范可以看出,在非托管环境(如Tomcat)中执行代码应该有一些支持。不幸的是,我不知道接口应该做什么,也不知道如何从托管环境外部调用它们(规范非常模糊) 是否有任何实现示例显示如何修改JCA使其在非托管环境中可用 谢谢 我们也遇到过类似的情况,我们开发了一

我们一直在使用JCA与WebSphere内部的低级网络资源进行接口,但是我们需要能够从Tomcat外部访问相同的网络资源(即不在托管环境中)。网络通信和协议布局非常冗长,因此我们不希望复制/粘贴数千行代码(然后必须单独维护它们)

从阅读JCA规范可以看出,在非托管环境(如Tomcat)中执行代码应该有一些支持。不幸的是,我不知道接口应该做什么,也不知道如何从托管环境外部调用它们(规范非常模糊)

是否有任何实现示例显示如何修改JCA使其在非托管环境中可用


谢谢

我们也遇到过类似的情况,我们开发了一个连接器来访问外部WebDav存储,并希望从独立应用程序(非托管)中使用它

我相信最简单的方法是在设计级别解决这个问题,并以连接器的核心逻辑是JCA不可知的并且可以轻松重用的方式组织代码。然后,您可以使用JCA特定的代码来包装它,该代码将连接器公开给AS。它甚至可能打包在两个jar中——这至少是我们选择的解决方案(但我们将所有内容打包在一个.jar中)

否则,JCA连接器就是以下三方之间的“粘合剂”:

  • 应用服务器
  • 环境影响报告书
  • 应用程序组件 应该可以使用所需类的轻量级实现来模拟AS,然后直接使用JCA连接器

    AS关于JCA连接器的一项主要工作是管理连接池,根据我的记忆,您应该实现的相应接口是
    ConnectionManager

    JCA连接器接收对
    ConnectionManager
    的引用,但具体实现如下。编写一个轻量级的实现来提供基本的池(或者根本没有池)听起来是可行的

    我曾经写过一本书。也许你会发现它很有用。另一个接口是
    ResourceAdapter
    ,您可以在其中定义启动/关闭,但这很容易手动调用

    (可能不止这些,当然这取决于您的JCA连接器使用的是什么。例如,如果它使用
    Work
    WorkManager
    ,那么模拟就变得复杂得多。如果连接器是事务性的,这一点也是一样的。但这似乎不是您的情况。)

    否则,我认为Spring对JCA有一些支持,也许值得一看他们是如何做到的

    从阅读JCA规范可以看出 应该有一些支持来执行 非托管环境中的代码


    你能提到你提到的规范的具体部分吗

    我对该规范的引用是基于JCA1.5规范中的各个小节,如3.4、5.3.8、6.4.2等。谢谢你的帮助。不幸的是,看起来我们的代码在规范的托管部分的所有错误位置都缠绕得太紧了。