33.6 WebSphere 的安装后步骤

33.6.1 在安装 Identity Applications 后配置 WebSphere 群集

本节概述了为配合 Identity Applications 使用配置 WebSphere 群集的过程。本节假设您对 WebSphere Application Server (WAS) 拥有丰富的用户经验。

  1. (视情况而定)要对 RBPM 使用会话故障转移,请完成以下步骤:

    1. 在 IBM Admin Console 中,浏览到 Application servers > clustermember1 > Session management > Distributed environment settings > Tuning parameters > Custom tuning parameters(应用程序服务器 > 群集成员 1 > 会话管理 > 分布式环境设置 > 优化参数 > 自定义优化参数)

    2. 指定 All session attributes(所有会话属性)模式,用于控制会话故障转移的写内容。

  2. 启动应用程序服务器,然后使用您在部署期间指定的环境访问 User Application 门户。

33.6.2 添加 User Application 配置文件和 JVM 系统属性

本节将帮助您创建 Identity Applications 在 WebSphere 应用程序服务器上正常运行所需的新的 JVM 系统属性。

  1. 以管理员用户身份登录到 WebSphere 管理控制台。

  2. 在左窗格中,单击服务器 > 应用程序服务器。

  3. 在服务器列表中,单击所需的服务器名称。例如:server1。

  4. 在内容窗格中的设置列表内,单击服务器基础结构下的 Java 和进程管理。

  5. 展开链接,并选择进程定义。

  6. 在附加属性下的列表中,单击 Java 虚拟机。

  7. 在 JVM 页的附加属性标题下,单击自定义属性。

  8. 要添加 extend.local.config.dir JVM 系统属性,请完成以下步骤:

    1. 单击新建。

    2. 对于名称,请指定 extend.local.config.dir。

    3. 对于值,请指定 hibernate.cfg.xml 文件所在目录的完整路径。例如:/opt/netiq/idm/apps/UserApplication/。

    4. 对于说明,请指定该属性的说明。

      例如, Identity Applications 配置文件的路径。

    5. 单击确定以保存属性。

  9. 要添加 idmuserapp.logging.config.dir JVM 系统属性,请完成以下步骤:

    1. 单击新建。

    2. 对于名称,请指定 idmuserapp.logging.config.dir。

    3. 对于值,请指定 idmuserapp_logging.xml 文件所在目录的完整路径。

      例如:/opt/netiq/idm/apps/UserApplication/。

    4. 对于说明,请指定该属性的说明。

      例如,Identity Applications 日志记录配置文件的路径。

    5. 单击确定以保存属性。

  10. 要添加 com.netiq.ism.config JVM 系统属性,请完成以下步骤:

    1. 单击新建。

    2. 对于名称,请指定 com.netiq.ism.config。

    3. 对于值,请指定包含 ism-configuation.properties 文件的文件名的完整路径。

      例如:/opt/netiq/idm/apps/UserApplication/ism-configuation.properties。

    4. 对于说明,请指定该属性的说明。

      例如,Identity Applications 的 ism properties 文件。

    5. 单击确定以保存属性。

  11. (视情况而定)要指定群集环境的工作流程引擎 ID,请完成以下步骤:

    1. 单击新建。

    2. 对于名称,请指定 com.novell.afw.wf.engine-id。

    3. 对于值,请指定工作流程引擎的 ID。

    4. 对于说明,请指定该属性的说明,例如工作流程引擎 ID。

    5. 单击确定以保存属性。

33.6.3 创建和应用共享库

您可能需要为 Identity Applications 配置共享库。创建共享库后,还必须将该库应用到新的类加载程序,以确保 WebSphere 使用 Identity Manager 版本的 JAR 文件。否则,WebSphere 随附的 JAR 文件将出现类装载问题。WebSphere 类装载问题可能表现为以下几种异常:

  • ClassCastException

  • ClassNotFoundException

  • NoClassDefFoundException

  • UnsatisfiedLinkError

  • LinkageError

此过程包括以下活动:

配置共享库

  1. 以管理员用户身份登录到 WebSphere 管理控制台。

  2. 在左窗格中,展开环境。

  3. 单击共享库。

  4. 在内容窗格中,单击新建。

  5. 指定名称,例如 IDMUA Classpath。

  6. 对于类路径,请添加以下必需的 JAR 文件:

    • log4j.jar

    • commons-logging-1.1.1.jar

    • IDMselector.jar

    默认情况下,这些文件位于 Identity Applications 的安装目录中。例如:/opt/netiq/idm/apps/UserApplication。

  7. 取消选择为此共享库使用独立的类加载程序。

  8. 单击确定。

  9. 单击保存保存对主配置的更改。

将共享库应用于新的类加载器

  1. 以管理员用户身份登录到 WebSphere 管理控制台。

  2. 展开应用程序服务器 > 服务器名称 -> 类加载程序。

    注:默认情况下,此选项折叠在 Java 和进程管理部分下面。

  3. 在内容窗格中,单击新建以创建新的类加载程序。

  4. 选择优先使用本地类加载程序装载类(父项最后)。

  5. 单击应用。

  6. 选择共享库引用。

  7. 单击添加,然后选择您在配置共享库中创建的共享库。

  8. 单击应用。

  9. 单击确定。

  10. 单击保存保存对主配置的更改。

33.6.4 将 eDirectory 可信根导入 WebSphere 密钥存储区

本节可帮助您将 eDirectory 可信根证书导入到托管 WebSphere 服务器的计算机上的密钥存储区中。您可以使用下列方法之一执行此过程:

通过 WebSphere 管理员控制台导入证书

  1. 将 eDirectory 可信根证书复制到托管 WebSphere 服务器的计算机上。

    Identity Manager 会将证书导入到 IBM JRE for WebSphere 的以下位置:

    • cacerts 文件

    • /lib/security 目录,例如 /opt/IBM/WebSphere/AppServer/java_1.7_64/jre/lib/security

  2. 作为管理员用户登录到 WebSphere 管理控制台。

  3. 在左窗格中,展开安全 > SSL 证书和密钥管理。

  4. 在内容窗格中,单击相关项目下的密钥存储区和证书。

  5. 选择 NodeDefaultTrustStore(或您正在使用的可信证书存储区)。

  6. 在附加属性下,单击签名者证书。

  7. 单击“添加”。

  8. 键入证书文件的别名和完整路径。

  9. 在下拉列表中将数据类型更改为二进制 DER 数据。

  10. 单击确定。

    现在,应该在签名者证书列表中看到证书。

  11. 单击保存保存对主配置的更改。

通过命令行导入证书

必须使用 WebSphere keytool 将证书导入到 WebSphere 密钥存储区中。默认情况下,WebSphere keytool 位于 /IBM/WebSphere/AppServer/java/bin 中。存储区类型为 PKCS12。

  1. 将 eDirectory 可信根证书复制到托管 WebSphere 服务器的计算机上。

    User Application 安装过程将这些证书导出到安装 User Application 的目录中。

  2. 在托管 WebSphere 服务器的计算机上,通过命令行运行 WebSphere keytool。

    例如:

    keytool -import -trustcacerts -file servercert.der -alias myserveralias 
    -keystore trust.p12 -storetype PKCS12
    

    注:如果系统中有多个 trust.p12 文件,则可能需要指定该文件的完整路径。

33.6.5 应用 IBM JDK 的非受限策略文件

为了使运行有效,Identity Applications 要求对安装了应用程序的服务器上的受支持 IBM JDK 运行非受限策略文件。此外,您还必须对运行 RBPM 的每个 WebSphere IBM JDK 服务器应用这些非受限策略文件。

查看每个 WebSphere 服务器 IBM JDK,确保已应用了非受限策略文件。如果没有这些非受限策略文件,在 RBPM 启动过程中将出现非法密钥大小错误。

33.6.6 将 preferIPv4Stack 属性传递给 JVM

Identity Applications 使用 JGroups 实现超速缓存。在某些配置中,JGroups 需要将 preferIPv4Stack 属性设置为 true,以确保 mcast_addr 绑定成功。

如果不使用此选项,可能会发生以下错误:

[10/1/09 16:11:22:147 EDT] 0000000d UDP           W org.jgroups.util.Util
createMulticastSocket could not bind to /228.8.8.8 (IPv4 address); make sure
your mcast_addr is of the same type as the IP stack (IPv4 or IPv6).

您还可能会看到此错误:

[3/21/12 10:04:32:470 EDT] 00000024 UDP      E org.jgroups.protocols.TP down
failed sending message to null (131 bytes)
        java.lang.Exception: dest=/228.8.8.8:45654 (134 bytes)
    at org.jgroups.protocols.UDP._send(UDP.java:353)

参数 java.net.preferIPv4Stack=true 是一项系统属性,与其他系统属性(例如 extend.local.config.dir)的设置方式相同。有关设置系统属性的说明,请参见部分 33.6.2, 添加 User Application 配置文件和 JVM 系统属性。

33.6.7 在 WebSphere 中设置 JMS

Identity Applications 依赖于 Java Message Service (JMS) 持久性存储区来保存电子邮件。如果未正确配置 JMS,在关闭应用程序服务器后,内存队列中的所有电子邮件都会丢失。

  1. 以管理员用户身份登录到 WebSphere 管理控制台。

  2. 要创建新总线,请完成以下步骤:

    1. 单击服务集成 > 总线。

    2. 单击新建。

    3. 指定总线的名称。例如:IDMProvBus。

    4. 取消选择总线安全性。

    5. 单击下一步,然后确认更改。

    6. 单击完成,然后单击保存。

  3. 要配置总线,请完成以下步骤:

    1. 在服务集成 > 总线中,选择您在步骤 2 中创建的总线。

    2. 单击配置 > 一般属性。

    3. 指定总线的说明。例如用于 IDM 应用程序的总线。

    4. 单击应用,然后单击保存。

    5. 在配置选项卡上,单击拓扑 > 总线成员。

    6. 单击添加。

    7. 指定是要将 IDMProv.war 文件部署在服务器、群集还是 WebSphere MQ 服务器上,然后单击下一步。

    8. 对于文件存储区,请指定讯息存储区的类型,然后单击下一步。

    9. 查看文件存储区的默认值,然后单击下一步。

    10. (可选)优化总线的性能参数。

    11. 单击下一步,然后单击完成。

  4. 要为总线创建主题连接,请完成以下步骤:

    1. 浏览到资源 > JMS > 主题连接工厂。

    2. 在范围菜单中选择正确的范围。例如:Node=MyNode01, Server=server1。

    3. 单击新建。

    4. 选择默认讯息交换提供程序,然后单击确定。

    5. 单击配置。

    6. 指定主题连接的名称。例如:ConnectionFactory。

    7. 对于 JNDI 名称,请指定与该名称相同的值。例如:ConnectionFactory。

    8. 为主题连接指定简短说明。例如用于 IDM 应用程序的主题连接工厂。

    9. 对于总线名称,请选择您在步骤 2 中创建的总线。

    10. 单击持久订阅 > 客户端,然后指定 IDMNotificationDurableTopic。

    11. 单击服务质量 > 持久性讯息可靠性,然后选择持久可靠性。

    12. 单击共享持久订阅 > 高级讯息交换,然后选择永不共享。

    13. 单击应用,然后单击完成。

  5. 要创建主题,请完成以下步骤:

    1. 浏览到资源 > JMS > 主题。

    2. 选择要使用的范围。例如:Node=MyNode01, Server=server1。

    3. 单击新建。

    4. 选择默认讯息交换提供程序,然后单击确定。

    5. 单击配置。

    6. 指定主题的名称。例如:IDMNotificationDurableTopic。

    7. 对于 JNDI 名称,请使用以下语法:topic/name。例如:topic/IDMNotificationDurableTopic。

    8. 为主题连接指定简短说明。例如用于 IDM 应用程序的主题。

    9. 对于总线名称,请选择您在步骤 2 中创建的总线。

    10. 单击主题空间,然后选择 Default.Topic.Space。

    11. 单击 JMS 交付模式,然后选择永久。

    12. 单击应用,然后单击保存。

  6. 从 WebSphere 控制台注销。

  7. 在部署 Identity Applications WAR 的服务器上重启动 WebSphere。

  8. 要校验是否正确设置了 JMS 服务器,请检查 SystemOut.log 文件。

    不正确的设置

    如果未正确设置 JMS 服务器,SystemOut.log 文件会依序包含以下行:

    INFO  [JMSConnectionMediator] Starting JMS notification system
    WARN  [NotificationEngine] Could not properly initialize JMS persistence for the notification system. Will revert back to non-persistent asynchronous notification system. 
    INFO  [NotificationThread] Starting asynchronous notification system 
    
    正确的设置

    如果配置成功,SystemOut.log 文件会依序包含以下类型的信息:

    INFO  [JMSConnectionMediator] Starting JMS notification system
    %connection information%
    INFO  [NotificationThread] Starting asynchronous notification system
    
    
    ========
    
    [9/7/14 14:39:52:167 EDT] 00000000 SibMessage    I   [:] CWSID0021I: Configuration reload is enabled for bus IDMProvBus. 
    [9/7/14 14:39:52:372 EDT] 00000000 SibMessage    I   [:] CWSIS1569I: Messaging engine N35020Node02.server1-IDMProvBus is using a file store. 
    
    ========
    
    [9/7/14 14:41:32:613 EDT] 0000000c SystemOut     O 14:41:32,608 INFO  [JMSConnectionMediator] Starting JMS notification system 
    
    [9/7/14 14:41:32:841 EDT] 0000000c SharedPool    I   J2CA0086W: Shareable connection MCWrapper id 5c175c17  Managed connection [com.ibm.ws.sib.api.jmsra.impl.JmsJcaManagedConnection@490f490f <managedConnectionFactory=[com.ibm.ws.sib.api.jmsra.impl.JmsJcaManagedTopicConnectionFactoryImpl@1f9c1f9c <logWriter=null> <busName=IDMProvBus> <clientID=IDMNotificationDurableTopic> <userName=null> <password=null> <xaRecoveryAlias=> <nonPersistentMapping=ExpressNonPersistent> <persistentMapping=ReliablePersistent> <durableSubscriptionHome=N35020Node02.server1-IDMProvBus> <readAhead=Default> <temporaryQueueNamePrefix=null> <temporaryTopicNamePrefix=null> <target=null> <targetSignificance=Preferred> <targetTransportChain=null> <targetType=BusMember> <providerEndpoints=null> <connectionProximity=Bus> <shareDataSourceWithCMP=false> <shareDurableSubscriptions=NeverShared> <cachedFactory=com.ibm.ws.sib.api.jms.impl.JmsFactoryFactoryImpl@4fb24fb2> <producerDoesNotModifyPayloadAfterSet=false> <consumerDoesNotModifyPayloadAfterGet=false>]> <coreConnection=com.ibm.ws.sib.processor.impl.ConnectionImpl@b0b0b0b> <localTransaction=[com.ibm.ws.sib.api.jmsra.impl.JmsJcaManagedConnection$JmsJcaLocalTransaction@78ce78ce <localSITransaction=null>]> <xaResource=null> <metaData=null> <userDetails=[com.ibm.ws.sib.api.jmsra.impl.JmsJcaUserDetails@5b4d5b4d <userName=null> <password=null>]> <subject=null> <logWriter=null> <sessions=[[com.ibm.ws.sib.api.jmsra.impl.JmsJcaSessionImpl@21ff21ff <managedConnection=1225738511> <connection=828453217> <transacted=false> <applicationLocalTransaction=null> <reqInfo=[com.ibm.ws.sib.api.jmsra.impl.JmsJcaConnectionRequestInfo@219a219a> <userDetails=null> <coreConnection=com.ibm.ws.sib.processor.impl.ConnectionImpl@b0b0b0b> <request counter=0>]> <sessionClosed=false> <sessionInvalidated=false>]]> <connectionListeners=[com.ibm.ejs.j2c.ConnectionEventListener@1572625852]>]  State:STATE_TRAN_WRAPPER_INUSE 
     from resource ConnectionFactory was used within a local transaction containment boundary. 
    
    [9/7/14 14:41:32:938 EDT] 0000001a SystemOut     O 14:41:32,938 INFO  [NotificationThread] Starting asynchronous notification system