题
我们一直在使用JCA从WebSphere内部与低级网络资源进行交互,但是我们需要能够从Tomcat外部访问相同的网络资源(即不在托管环境中)。网络通信和协议布局非常详细,因此我们不想复制/粘贴数千行代码(然后必须单独维护)。
从阅读JCA规范,据说可以在非管理环境(例如Tomcat)中执行代码。不幸的是,我不知道 什么 这些接口应该是这样做的,或者如何从托管环境外部调用它们(规格很模糊)。
是否有任何实施示例可以显示如何在非管理环境中修改JCA可用?
谢谢!
解决方案
我们也有类似的情况,在该情况下,我们开发了一个连接器来访问外部WebDAV存储,并希望从独立的应用程序(非管理)中使用它。
我确实相信,最简单的方法是在设计级别上解决此问题,并以连接器的核心逻辑为JCA-Agnostic的方式组织您的代码,并且可以轻松地重复使用。然后,您可以用JCA特定的代码包装它,以将连接器暴露于AS。它甚至可能被包装在两个罐子中 - 至少是我们选择的解决方案(但我们将全部包装成一个.jar)。
否则,JCA连接器是以下三方之间的“胶水”:
- 应用程序服务器
- EIS
- 应用程序组件。
应该有可能使用必要类的轻量级实现来模拟AS,然后直接使用JCA连接器。
相对于JCA连接器的AS的一个主要工作是管理连接的汇总,从我记得的情况下,您应该实现的相应界面是 ConnectionManager
.
JCA连接器会引用 ConnectionManager
, ,但是实施是特定的。编写一个轻巧的实现,提供基本的合并(或根本没有合并)听起来可行。
我曾经写过一次 连接分配的序列图 机制。也许您会发现它有用。另一个接口是 ResourceAdapter
在哪里定义了启动/关闭,但这很容易手动调用。
(可能有更多的 Work
和 WorkManager
, ,然后嘲笑变得更加复杂。如果连接器是交易,则相同的说明。但这似乎不是您的案子。)
否则,我认为春天对JCA有所支持,可能值得看看他们的做法。
从阅读JCA规范,据说可以在非管理环境中执行代码
您能否提及您所指的规格的特定部分?