我们一直在使用 JCA 与 WebSphere 内部的低级网络资源进行交互,但是我们需要能够从 Tomcat 外部访问相同的网络资源(即不在托管环境中)。网络通信和协议布局非常冗长,所以我们宁愿不复制/粘贴几千行代码(然后必须单独维护它们)。
通过阅读 JCA 规范,应该可以支持在非托管环境(例如 Tomcat)中执行代码。不幸的是,我不知道接口应该做什么,或者如何从托管环境之外调用它们(规范非常模糊)。
是否有任何实现示例展示如何修改 JCA 以在非托管环境中使用?
谢谢!
我们一直在使用 JCA 与 WebSphere 内部的低级网络资源进行交互,但是我们需要能够从 Tomcat 外部访问相同的网络资源(即不在托管环境中)。网络通信和协议布局非常冗长,所以我们宁愿不复制/粘贴几千行代码(然后必须单独维护它们)。
通过阅读 JCA 规范,应该可以支持在非托管环境(例如 Tomcat)中执行代码。不幸的是,我不知道接口应该做什么,或者如何从托管环境之外调用它们(规范非常模糊)。
是否有任何实现示例展示如何修改 JCA 以在非托管环境中使用?
谢谢!
我们有类似的案例,我们开发了一个连接器来访问外部 WebDav 存储,并且还想从一个独立的应用程序(非托管)中使用它。
我相信最简单的方法是在设计级别解决这个问题,并以连接器的核心逻辑与 JCA 无关并且可以轻松重用的方式组织代码。然后,您可以使用将连接器公开给 AS 的特定于 JCA 的代码来包装它。它甚至可能被打包在两个 jar 中——这至少是我们选择的解决方案(但我们将所有内容打包在一个 .jar 中)。
否则,JCA 连接器是以下三方之间的“粘合剂”:
应该可以使用必要类的轻量级实现来模拟 AS,然后直接使用 JCA 连接器。
AS 与 JCA 连接器相关的一项主要工作是管理连接池,据我所知,您应该实现的相应接口是ConnectionManager
.
JCA 连接器接收对 a 的引用ConnectionManager
,但实现是特定于 AS 的。编写一个提供基本池(或根本没有池)的轻量级实现听起来是可行的。
我曾经写过一个连接分配机制的时序图。也许你会发现它很有用。另一个界面是ResourceAdapter
您定义启动/关闭的地方,但这很容易手动调用。
(可能不止这些,它当然取决于您的 JCA 连接器使用什么。例如,如果它使用Work
和WorkManager
这似乎不是你的情况。)
否则,我认为 Spring 对 JCA 有一些支持,可能值得看看他们是如何做到的。
通过阅读 JCA 规范,据说有一些支持在非托管环境中执行代码
您能否提及您所指的规范的具体部分?