从 CICS 程序链接到 Java EE 应用程序
您可以将 Liberty JVM 服务器中运行的 Java™ EE 应用程序作为 CICS® 事务的初始程序进行链接,也可以使用来自任何 CICS 程序的 LINK , START 或 START CHANNEL 命令进行链接。
要由 CICS 程序链接到, Java EE 应用程序必须是打包在 Web ARchive (WAR) 或企业应用程序归档 (EAR) 中的纯 Java 对象 (POJO)。 不能链接到 EJB , CDI Bean 或 OSGi 应用程序。 不支持 POJO 中的依赖关系注入,包括使用 @EJB注入 EJB。 相反,您可以使用 JNDI 查找来获取对资源 (例如 EJB) 的引用。 此信息仅适用于 CICS 集成方式 Liberty。
- Java 代码是现有 Web 应用程序的一部分,您希望将其链接到 CICS 应用程序。 您只需要维护单个逻辑段,您的代码可以使用 JCICS API 访问 CICS 资源。
- 您希望在 CICS 应用程序中使用 Java 编写新的函数部分。 例如,您可能希望使用 Java 中已存在的第三方库或 API。
- 您想要在 Java 中重新实现现有 COBOL 应用程序。 例如,您可能希望降低维护成本并充分利用 Java 技能,或者您可能希望应用程序有资格在专业引擎而不是常规处理器上运行。
从 CICS 程序链接到 Java EE 应用程序时, CICS 会向 Liberty 中运行的 JCA 资源适配器发送一条消息。 JCA 资源适配器链接到与调用程序相同的 CICS 任务上的目标 Java EE 应用程序。 Java EE 应用程序在与调用程序相同的工作单元 (UOW) 下运行,因此在事务结束时将落实或回退对可恢复 CICS 资源所作的任何更新。 但是,调用 Java EE 应用程序时,没有 JTA 事务上下文。 如果应用程序启动 JTA 事务,那么将执行同步点以落实 CICS UOW 并创建新的同步点。 如果容器代表应用程序启动 JTA 事务 (例如,如果应用程序调用具有 REQUIRED 事务属性的 EJB) ,那么也会发生此情况。
作为最佳实践,由 CICS 程序链接的代码应该是应用程序的业务逻辑 (而不是表示逻辑) 的一部分。 例如,链接来自 CICS 程序的 servlet 是没有意义的,因为不涉及 HTTP 请求。
配置 Liberty JVM 服务器以将 Java EE 应用程序链接到 CICS 程序
要配置 Liberty JVM 服务器以支持链接 Java EE 应用程序,请将 cicsts:link-1.0 功能部件添加到 server.xml。 在部署 Java EE 应用程序之前,请确保添加该功能部件。
安全性
将 Java EE 应用程序链接到 CICS 程序时, CICS 任务的用户标识将传递到 Java EE 应用程序中。 Liberty 不会认证用户,但信任 CICS传递的身份。 但是,Liberty 会检查此用户标识在已配置的用户注册表中是否存在。 如果可能,请使用 Liberty 中的 SAF 注册表,因为它会检查从 CICS传入的用户标识。 如果您正在使用除 SAF 注册表以外的其他类型的用户注册表,并且注册表中存在相同的用户标识,那么该用户标识将传递到 Java EE 应用程序。 如果用户注册表中不存在用户标识,那么将使用未认证的用户标识来链接 Java EE 应用程序。
要在链接 Java EE 应用程序时配置安全性,请在 server.xml中包含 cicsts:security-1.0 功能部件。 如果不包含此功能部件,那么将链接 Java EE 应用程序而不进行认证。 因此, Java EE 应用程序中的任何授权检查都可能不适用。 但是,使用 JCICS API 对任何 CICS 资源的访问仍将在 CICS 任务的用户标识下运行。
- Java EE Web 安全性机制。 例如:
web.xml中的<auth-constraint>或 servlet 上的@HttpConstraint。 - 信任关联拦截器 (TAI)。
- JVM 服务器概要文件属性
com.ibm.cics.jvmserver.unclassified.userid。 - URIMAP。
Java EE 应用程序可以通过调用 EJB 并应用 EJB 安全性来执行其他授权检查。 例如,可使用 @RolesAllowed 注释将授权应用于会话 bean 方法。 有关 EJB 安全性的更多信息,请参阅 Java EE 教程。
有关 Liberty 中的安全性的更多信息,请参阅 配置 Liberty JVM 服务器的安全性。