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

通过阅读JCA规范,可以在某种程度上支持在非托管环境(例如Tomcat)中执行代码。不幸的是,我不知道接口应该做什么,或者如何从托管环境外部调用它们(规范非常模糊)。

是否有实现示例说明如何修改JCA以使其在非托管环境中可用?

谢谢!

最佳答案

我们有类似的案例,我们开发了一个连接器来访问外部WebDav存储,并希望也可以从独立应用程序(非托管)中使用它。

我相信最简单的方法是在设计级别解决此问题,并以连接器的核心逻辑与JCA无关的方式组织代码,并且可以轻松地重用它们。然后,您可以使用JCA专用代码包装该代码,该代码将连接器公开给AS。它甚至可能被打包在两个jar中-至少这是我们选择的解决方案(但我们全部打包在一个.jar中)。

否则,JCA连接器是以下三个方面之间的“胶水”:


应用服务器
信息系统
应用程序组件。


应该可以使用必需类的轻量级实现来模拟AS,然后直接使用JCA连接器。

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

JCA连接器收到对ConnectionManager的引用,但是实现是特定于AS的。编写提供基本池化(或根本不池化)的轻量级实现听起来很可行。

我曾经写过一种sequence diagram of the connection allocation机制。也许您会发现它很有用。另一个界面是ResourceAdapter,您可以在其中定义启动/关闭,但是手动调用很容易。

(可能还有更多,并且当然取决于您的JCA连接器使用什么。例如,如果使用WorkWorkManager,则模拟起来会变得复杂得多。连接器是事务性的。但这似乎不是您的情况。)

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


通过阅读JCA规范,可以了解
据称对执行
非托管环境中的代码


您能否提及所指规范的特定部分?

07-28 13:52