Integrate IBM Rational CLM with HP ALM, Atlassian JIRA, and Git

This article describes how to set up a complex topology to integrate Rational solution for Collaborative Lifecycle Management (CLM) products with third-party Application Lifecycle Management (ALM) servers (HP ALM, HP Quality Center, Atlassian JIRA, and Git) using IBM Rational Lifecycle Integration Adapters. It covers topologies that align with the CLM standard topologies documented on jazz.net, and it describes environments used in the development of Rational Lifecycle Integration Adapters 1.1.1.

Linden Hill (linden@us.ibm.com), Rational System Verification Test Architect, IBM

Author1 photoLinden Hill is the Rational Lifecycle Integration Adapters System Verification Test architect. He has 25 years experience in System Test.



Paul Hantman (pchantma@us.ibm.com), Rational System Verification Test Lead, IBM

Author1 photoPaul Hantman is the Rational Lifecycle Integration Adapters SVT lead and has more than 15 years of testing experience.



Brian So (Brian_So@ca.ibm.com), Rational System Verification Tester, IBM

Author1 photoBrian So is a Rational Lifecycle Integration Adapters System Verification Test tester. Brian has more than 15 years of testing experience.



14 January 2014

Also available in Chinese

Extended abstract

This article describes how to set up a complex topology to integrate Rational® solution for Collaborative Lifecycle Management (CLM) products with third-party Application Lifecycle Management (ALM) servers (HP® ALM, HP Quality Center, Atlassian® JIRA®, and Git) using IBM® Rational® Lifecycle Integration Adapters. It covers topologies that align with the CLM standard topologies documented on jazz.net, and it describes environments used in the development of Rational Lifecycle Integration Adapters 1.1.1.


Introduction

The IBM® Rational® Lifecycle Integration Adapters enable you to integrate your existing third-party Application Lifecycle Management (ALM) servers with the Rational solution for Collaborative Lifecycle Management (CLM). CLM consists of 3 products:

The Rational Lifecycle Integration Adapters Standard Edition is comprised of three adapters:

  • IBM® Rational® Adapter for Git enables you to link Git, Gitweb, and Gerrit change requests with Rational Team Concert work items.
  • IBM® Rational® Adapter for HP ALM enables you to link requirements and test artifacts in HP® ALM or HP Quality Center to Rational Requirement Composer requirements and Rational Team Concert work items. This adapter also supports integration with IBM® Rational® ClearQuest®.
  • IBM® Rational® Adapter for JIRA® enables you to link bugs to requirements in Rational Requirements Composer, test artifacts in Rational Quality Manager and work items in Rational Team Concert. This adapter also supports integration with Rational ClearQuest.

For the specific versions of third-party ALM servers supported and software requirements, read the System Requirements for Rational Lifecycle Integration Adapters Standard Edition.


Evaluation phase

You might have only one of the third-party servers (Git, JIRA, HP ALM, or HP Quality Center) or you might just want to evaluate one of the integrations at a time. For either of these cases, use a smaller topology that includes the third-party server and the CLM product you're interested in integrating. Our evaluation topologies are based on the CLM (D1) Departmental – Single application server, Windows/DB2 topology. This departmental topology is a small Windows® environment that deploys CLM applications on a single application server using IBM® DB2® installed on another server. The third-party server is integrated with the CLM applications using the appropriate adapter. Rational Reporting for Development Intelligence is optional in the Rational Lifecycle Integration Adapters topology because it does not provide reporting for the third-party servers.

Note: The topology diagrams use abbreviations to stand for product names. The abbreviations are:

  • CCM: Rational Team Concert
  • RM: Rational Requirements Composer or Rational DOORS Next Generation
  • QM: Rational Quality Manager

Git adapter departmental topology

The Git adapter departmental topology consists of Rational Team Concert and IBM® Rational® Jazz™ Team Server installed on one server and the database on another server. The Git adapter is a J2EE application installed in the Jazz Team Server. The Git side of the integration can have Gitweb or Gerrit (or both) installed on one or more servers, but for the smaller topology, they are installed on a single server. The Git hooks are installed on this server.

Figure 1. Git adapter departmental topology
Departmental topology diagram for Git adapter

Click to see larger image

Figure 1. Git adapter departmental topology

Departmental topology diagram for Git adapter

HP adapter departmental topology

The HP adapter departmental topology consists of Rational Requirements Composer (or Rational DOORS Next Generation), Rational Team Concert, and Jazz Team Server installed on one server and the database on another server. The HP adapter can be installed on the same IBM® WebSphere® Application Server as the Jazz Team Server, or on another server. The HP ALM or HP Quality Center is installed on its own server. If you are only interested in evaluating the integration between HP and Rational Team Concert, you don't need to deploy Rational Requirements Composer. Similarly, if you are only interested in evaluating the integration with Rational Requirements Composer, you don't need to deploy Rational Team Concert.

Figure 2. HP adapter departmental topology
Departmental topology diagram for HP adapter

Click to see larger image

Figure 2. HP adapter departmental topology

Departmental topology diagram for HP adapter

JIRA adapter departmental topology

The JIRA adapter departmental topology consists of Rational Requirements Composer (or Rational DOORS Next Generation), Rational Quality Manager, Rational Team Concert, and Jazz Team Server installed on one server and the database on another server. The JIRA adapter is installed as a plugin into a separate JIRA server. If you are only interested in evaluating integrations between JIRA and one or more CLM products, you deploy only those you are interested in.

Figure 3. JIRA adapter departmental topology
Departmental topology diagram for JIRA adapter

Click to see larger image

Figure 3. JIRA adapter departmental topology

Departmental topology diagram for JIRA adapter

Production phase

Assume that after you have finished the evaluations, you decide to move towards an enterprise production environment where you have teams using the third-party servers and over time move towards the IBM CLM solution. The enterprise topology used during Rational Lifecycle Integration Adapters 1.1.1 development is based on the CLM (E1) Enterprise - Distributed / Linux / DB2 topology. It is a multi-server Linux® environment with all of the supported integrations brought together. CLM is installed on distributed IBM WebSphere Application Servers using IBM DB2 for the database. IBM HTTP Server is used as a reverse proxy on a separate server. The applications are installed on the servers under non-root user and LDAP security is enabled. The third-party servers are installed on separate servers using one of their recommended configurations. The integrations between CLM applications and third-party servers are established using Rational Lifecycle Integration Adapters. The Git adapter is installed in the same IBM WebSphere Application Server as the Jazz Team Server. The HP adapter is installed on a separate IBM WebSphere Application Server. The JIRA adapter is installed as a plugin into the JIRA server. If you are interested in only some of the integrations but not all, you need to deploy only the products you need to integrate in your environment.

Figure 4. Rational Lifecycle Integration Adapters enterprise topology
Enterprise topology shows components and software

Click to see larger image

Figure 4. Rational Lifecycle Integration Adapters enterprise topology

Enterprise topology shows components and software

The Lifecycle Integration Adapters enterprise topology is deployed on virtualized servers with these specifications:

  • 2 CPUs
  • 8 GB memory
  • Red Hat® Enterprise Linux® 6.4 64-bit

The Git, HP, and JIRA servers and corresponding adapters are deployed on virtualized servers with these specifications:

  • 2 CPUs
  • 8 GB memory
  • Red Hat Enterprise Linux 6.2 64-bit

During Rational Lifecycle Integration Adapters 1.1.1 development, the enterprise topology was deployed using the following software:

  • Rational solution for CLM 4.0.4
  • IBM WebSphere Application Server and IBM HTTP Server 8.5.0.2
  • IBM DB2 Enterprise Edition 10.1.0.2
  • HP ALM 11.52
  • Git and Gitweb 1.8.3.2, Gerrit 2.6
  • JIRA 6.0.6

The enterprise topology was also deployed using this software:

  • Rational solution for CLM 4.0.3
  • IBM WebSphere Application Server and IBM HTTP Server 8.5.5
  • IBM DB2 Enterprise Edition 10.1.0.2
  • HP ALM 11.52
  • Git and Gitweb 1.8.3.2, Gerrit 2.6
  • JIRA 6.0.6

In this configuration, CLM was upgraded from 4.0.3 to 4.0.4 as part of the upgrade test.

To establish communication between the servers, you need to friend the servers and establish project associations. The steps to do this are documented in the Rational Lifecycle Integration Adapters Information Center.

Due to schedule differences, some testing was also done with Rational solution for CLM 4.0.5 during the later part of the release.

The steps to configure the secure transport between the JIRA server and the IBM HTTP Server are covered in the next section.


Configure SSL for JIRA server and IBM HTTP Server

You need to configure the JIRA server and IBM HTTP Server to connect using a secure transport (https). You will need to create a Java keystore to hold the SSL certificates. An SSL certificate is required for SSL to work in JIRA. JIRA recommends using the Portecle application to accomplish these tasks:

  • Create the keystore
  • Create the SSL certificate
  • Send the certificate to the certificate authority to get it signed
  • Import the certificate back into the system

After you finish those tasks, you need to configure the web server to connect to the JIRA server using a secure and nonsecure transport.

Refer to the JIRA documentation to configure the JIRA server for SSL. Note that JIRA documentation is release-specific so check to make sure that the documents match the version of the JIRA server you have deployed.

Generate the Java keystore for JIRA server

For JIRA 6.0, refer to Running JIRA over SSL or HTTPS. Follow the steps in this JIRA documentation to generate the Java keystore and then configure the web server using the JIRA configuration tool.

Restart the JIRA server after making the changes.

After reconfiguring the JIRA server to use HTTPS, log in to the JIRA server as administrator.

  • On the Administration tab, select System > General Configuration >Edit> Base URL
  • Change the Base URL from http://{Fully-Qualified JIRA Server Name}:8082 to https://{Fully-Qualified JIRA Server Name}:8443

Add the JIRA Java keystore to IBM HTTP Server plugin_cfg.kdb

Follow these steps to add the JIRA keystore to the Keypass Database file, plugin-cfg.kdb, which allows the user to be redirected to the JIRA server using a secure transport.

  1. Copy the JIRA keystore (jira.jks) to the IBM HTTP Server.
  2. Launch the web server administration at http://{Fully-Qualified IBM HTTP Server Name}:5801
  3. Start Key Management Utility (IKeyMan).
  4. Open /opt/IBM/Plugins/config/webserver1/plugin-cfg.kdb
  5. Import jira.jks
    • Note: For the export/import selection, the default is to export. Ensure you select import.
    • Note: This is the JIRA keystore generated when setting up the HTTPS transport.
    • Browse for the JIRA keystore that you copied over to the IBM HTTP Server.
    • Enter the password you set for the JIRA keystore.
  6. Copy plugin-cfg.kdb and plugin-cfg.rdb to /opt/IBM/Plugins/config/webservermerge

Customize the IBM HTTP Server configuration

You need to modify the IBM HTTP Server plugin and configuration files to enable the third-party servers and adapters to communicate through the reverse proxy. The Apache® Tomcat® connector also needs to be built and installed for the JIRA server.

Customize the plugin

Before you make changes to the IBM HTTP Server configuration back up these two files:

  • /opt/IBM/Plugins/config/webservermerge/plugin-cfg.xml
  • /opt/IBM/HTTPServer/conf/httpd.conf

Note: If you make changes directly on the IBM HTTP Server, disable propagating updates from the IBM WebSphere Application Server administration console.

  1. Log in to the IBM WebSphere Application Server Administration Console.
  2. Select Server Types > Web servers > webserverx > Plug-in properties
  3. Uncheck Automatically propagate plug-in configuration file

Listing 1 is the plugin-cfg.xml with modifications for the third-party servers and adapters highlighted in bold italic. Since the Git adapter is installed on the Jazz Team Server server, you specify the Jazz Team Server hostname. With IBM WebSphere Application Server 8.5.5 (or later), you need to specify the UseInsecure property in the global <config> element.

Listing 1. Customized plugin-cfg.xml

Click to see code listing

Listing 1. Customized plugin-cfg.xml

<?xml version="1.0" encoding="ISO-8859-1"?><!--HTTP server plugin config file for the webserver CloudBurstCell_1.{fully qualified domain name}-node.webserver1 generated on 2013.07.18 at 10:55:17 PM UTC-->
<Config ASDisableNagle="false" AcceptAllContent="true" AppServerPortPreference="HostHeader" ChunkedResponse="false" FIPSEnable="false" FailoverToNext="false" HTTPMaxHeaders="300" IISDisableNagle="false" IISPluginPriority="High" IgnoreDNSFailures="false" OS400ConvertQueryStringToJobCCSID="false" RefreshInterval="60" ResponseChunkSize="64" SSLConsolidate="true" TrustedProxyEnable="false" VHostMatchingCompat="false" UseInsecure="true">
   <Log LogLevel="Trace" Name="/opt/IBM/Plugins/logs/webservermerge/http_plugin.log"/>
   <Property Name="ESIEnable" Value="true"/>
   <Property Name="ESIMaxCacheSize" Value="1024"/>
   <Property Name="ESIInvalidationMonitor" Value="false"/>
   <Property Name="ESIEnableToPassCookies" Value="false"/>
   <Property Name="ESICacheidFull" Value="false"/>
   <Property Name="PluginInstallRoot" Value="/opt/IBM/Plugins/"/>
   <VirtualHostGroup Name="default_host">
      <VirtualHost Name="*:9080"/>
      <VirtualHost Name="*:80"/>
      <VirtualHost Name="*:9443"/>
      <VirtualHost Name="*:5060"/>
      <VirtualHost Name="*:5061"/>
      <VirtualHost Name="*:443"/>
      <VirtualHost Name="*:8080"/>
            <VirtualHost Name="*:8082"/>
            <VirtualHost Name="*:8443"/>
            <VirtualHost Name="*:1025"/>
   </VirtualHostGroup>
   <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="server1_CloudBurstNode_5_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
      <Server ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="CloudBurstNode_5_server1" ServerIOTimeout="900" WaitForContinue="false">
         <Transport Hostname="{Fully-Qualified JTS Server Name}" Port="9080" Protocol="http"/>
         <Transport Hostname="{Fully-Qualified JTS Server Name}" Port="9443" Protocol="https">
            <Property Name="keyring" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.kdb"/>
            <Property Name="stashfile" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.sth"/>
         </Transport>
      </Server>
   </ServerCluster>
   <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="server1_CloudBurstNode_7_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
      <Server ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="CloudBurstNode_7_server1" ServerIOTimeout="900" WaitForContinue="false">
         <Transport Hostname="{Fully-Qualified CCM Server Name}" Port="9080" Protocol="http"/>
         <Transport Hostname="{Fully-Qualified CCM Server Name}" Port="9443" Protocol="https">
            <Property Name="keyring" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.kdb"/>
            <Property Name="stashfile" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.sth"/>
         </Transport>
      </Server>
   </ServerCluster>
   <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="server1_CloudBurstNode_9_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
      <Server ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="CloudBurstNode_9_server1" ServerIOTimeout="900" WaitForContinue="false">
         <Transport Hostname="{Fully-Qualified QM Server Name}" Port="9080" Protocol="http"/>
         <Transport Hostname="{Fully-Qualified QM Server Name}" Port="9443" Protocol="https">
            <Property Name="keyring" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.kdb"/>
            <Property Name="stashfile" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.sth"/>
         </Transport>
      </Server>
   </ServerCluster>
   <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="server1_CloudBurstNode_11_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
      <Server ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="CloudBurstNode_11_server1" ServerIOTimeout="900" WaitForContinue="false">
         <Transport Hostname="{Fully-Qualified RM Server Name}" Port="9080" Protocol="http"/>
         <Transport Hostname="{Fully-Qualified RM Server Name}" Port="9443" Protocol="https">
            <Property Name="keyring" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.kdb"/>
            <Property Name="stashfile" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.sth"/>
         </Transport>
      </Server>
   </ServerCluster>
<ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="Adapter_JIRA" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
     <Server ConnectTimeout="5" ExtendedHandshake="false" MaxConnections="-1" Name="JIRA" ServerIOTimeout="900" WaitForContinue="false">
        <Transport Hostname="{Fully-Qualified JIRA Server Name}" Port="8082" Protocol="http"/>
        <Transport Hostname="{Fully-Qualified JIRA Server Name}" Port="8443" Protocol="https">
           <Property Name="keyring" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.kdb"/>
           <Property Name="stashfile" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.sth"/>
        </Transport>
     </Server>
  </ServerCluster>
<ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="Adapter_HPQC" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
     <Server ConnectTimeout="5" ExtendedHandshake="false" MaxConnections="-1" Name="HPQC" ServerIOTimeout="900" WaitForContinue="false">
        <Transport Hostname="{Fully-Qualified HPQC Server Name}" Port="8080" Protocol="http"/>
     </Server>
  </ServerCluster>
<ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="Adapter_GIT" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
     <Server ConnectTimeout="5" ExtendedHandshake="false" MaxConnections="-1" Name="GIT" ServerIOTimeout="900" WaitForContinue="false">
        <Transport Hostname="{Fully-Qualified JTS Server Name}" Port="80" Protocol="http"/>
        <Transport Hostname="{Fully-Qualified JTS Server Name}" Port="9443" Protocol="https">
            <Property Name="keyring" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.kdb"/>
            <Property Name="stashfile" Value="/opt/IBM/Plugins/config/webservermerge/plugin-key.sth"/>
        </Transport>
     </Server>
  </ServerCluster>
<ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="Adapter_GIT1" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
     <Server ConnectTimeout="5" ExtendedHandshake="false" MaxConnections="-1" Name="GIT1" ServerIOTimeout="900" WaitForContinue="false">
        <Transport Hostname="{Fully-Qualified Git Server Name}" Port="80" Protocol="http"/>
     </Server>
  </ServerCluster>
<ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="Adapter_GIT2" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60">
     <Server ConnectTimeout="5" ExtendedHandshake="false" MaxConnections="-1" Name="GIT2" ServerIOTimeout="900" WaitForContinue="false">
        <Transport Hostname="{Fully-Qualified Git Server Name}" Port="8080" Protocol="http"/>
     </Server>
  </ServerCluster>

   <UriGroup Name="default_host_server1_CloudBurstNode_5_Cluster_URIs">
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ivt/*"/>
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/jts/*"/>
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/admin/*"/>
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/clmhelp/*"/>
   </UriGroup>
   <UriGroup Name="default_host_server1_CloudBurstNode_7_Cluster_URIs">
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ivt/*"/>
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ccm/*"/>
   </UriGroup>
   <UriGroup Name="default_host_server1_CloudBurstNode_9_Cluster_URIs">
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ivt/*"/>
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/qm/*"/>
   </UriGroup>
   <UriGroup Name="default_host_server1_CloudBurstNode_11_Cluster_URIs">
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/rm/*"/>
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/converter/*"/>
   </UriGroup>
   <Route ServerCluster="server1_CloudBurstNode_5_Cluster" UriGroup="default_host_server1_CloudBurstNode_5_Cluster_URIs" VirtualHostGroup="default_host"/>
   <Route ServerCluster="server1_CloudBurstNode_7_Cluster" UriGroup="default_host_server1_CloudBurstNode_7_Cluster_URIs" VirtualHostGroup="default_host"/>
   <Route ServerCluster="server1_CloudBurstNode_9_Cluster" UriGroup="default_host_server1_CloudBurstNode_9_Cluster_URIs" VirtualHostGroup="default_host"/>
   <Route ServerCluster="server1_CloudBurstNode_11_Cluster" UriGroup="default_host_server1_CloudBurstNode_11_Cluster_URIs" VirtualHostGroup="default_host"/>
<UriGroup Name="Adapter_JIRA_URIs">
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jspa"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/jira/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/osd.jsp"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/login.jsp"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/MyJiraHome.jspa"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="*.jsp"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/secure/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/s/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/plugins/servlet/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/rest/gadget/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/rest/oslc/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/rest/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/secure/Dashboard.jspa/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/browse/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/logout/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/images/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/plugins/servlet/gadgets/dashboard-diagnostics"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/conf/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/captcha"/>
</UriGroup>
<Route ServerCluster="Adapter_JIRA" UriGroup="Adapter_JIRA_URIs" VirtualHostGroup="default_host" />
<UriGroup Name="Adapter_HPQC_URIs">
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/qcbin/*"/>
 </UriGroup>
<Route ServerCluster="Adapter_HPQC" UriGroup="Adapter_HPQC_URIs" VirtualHostGroup="default_host" />
<UriGroup Name="Adapter_GIT_URIs">
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/gitAdapter/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/git/*"/>
</UriGroup>
<Route ServerCluster="Adapter_GIT" UriGroup="Adapter_GIT_URIs" VirtualHostGroup="default_host" />
<UriGroup Name="Adapter_GIT1_URIs">
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/gitweb/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/git/*"/>
</UriGroup>
<Route ServerCluster="Adapter_GIT1" UriGroup="Adapter_GIT1_URIs" VirtualHostGroup="default_host" />
<UriGroup Name="Adapter_GIT2_URIs">
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/gerrit/*"/>
     <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/*"/>
</UriGroup>
<Route ServerCluster="Adapter_GIT2" UriGroup="Adapter_GIT2_URIs" VirtualHostGroup="default_host" />
   <RequestMetrics armEnabled="false" loggingEnabled="false" rmEnabled="false" traceLevel="HOPS">
      <filters enable="false" type="URI">
         <filterValues enable="false" value="/snoop"/>
         <filterValues enable="false" value="/hitcount"/>
      </filters>
      <filters enable="false" type="SOURCE_IP">
         <filterValues enable="false" value="255.255.255.255"/>
         <filterValues enable="false" value="254.254.254.254"/>
      </filters>
      <filters enable="false" type="JMS">
         <filterValues enable="false" value="destination=aaa"/>
      </filters>
      <filters enable="false" type="WEB_SERVICES">
         <filterValues enable="false" value="wsdlPort=aaa:op=bbb:nameSpace=ccc"/>
      </filters>
   </RequestMetrics>
</Config>

Build and install the Tomcat connector

The Tomcat connector, mod_jk.so, must be installed to allow the IBM HTTP Server, Apache Tomcat on the JIRA server, and Jazz Team Server to work together. Note that the instructions were taken from https://jazz.net/library/article/64, but not all steps are required.

Build and install the latest Tomcat connector on the IBM HTTP Server.

  1. Download JK 1.2.37 Source Release tar.gz from http://tomcat.apache.org/download-connectors.cgi
  2. Download the latest versions of autoconf, libtool, automake, and GNU Compiler Collection (GCC) from http://ftp.gnu.org/gnu/{autoconf|libtool|automake}
  3. Open a terminal window and su as root
  4. Install GCC by running the command yum install gcc
  5. Issue the command gcc –version to verify the latest is installed.
  6. Build the Tomcat connector
    1. mkdir /usr/local/src/NfuseApache
    2. cd /usr/local/src/NfuseApache
    3. cp /{download directory}/tomcat-connectors-1.2.37-src.tar.gz .
    4. Unpack the connector package:
      tar xvzf tomcat-connectors-1.2.37-src.tar.gz
    5. export CONNECTOR_HOME=/usr/local/src/NfuseApache/tomcat-connectors-1.2.37-src
    6. Issue the command echo $CONNECTOR_HOME to verify the environment variable is set
    7. cd /usr/local/src/NfuseApache/tomcat-connectors-1.2.37-src/native
    8. Copy autoconfxx.gz, libtoolxx.gz, automakexx.gz from /{download directory} to /usr/local/src/NfuseApache/tomcat-connectors-1.2.37-src/native
    9. For each file, you need to untar and build (read INSTALL for instructions).
      tar xvzf
      cd untar'd directory
      ./configure
      make
      make install
    10. cd /usr/local/src/NfuseApache/tomcat-connectors-1.2.37-src/native
    11. Execute the following commands
      /buildconf.sh
      ./configure --with-
      apxs=/opt/IBM/HTTPServer/bin/apxs
      make
      make install
  7. Install the Tomcat connector
    1. cp /usr/local/src/NfuseApache/tomcat-connectors-1.2.37-src/native/apache-2.0/mod_jk.so /opt/IBM/HTTPServer/modules/.
    2. chown {clmadmin} /opt/IBM/HTTPServer/modules/mod_jk.so where {clmadmin} is the CLM administrator user
    3. chgrp users /opt/IBM/HTTPServer/modules/mod_jk.so

Create worker.properties

Create /opt/IBM/HTTPServer/conf/worker.properties for IBM HTTP Server with these values

worker.list=wrkr
worker.wrkr.port=8443 (per the JIRA server.xml file)
worker.wrkr.host=localhost
worker.wrkr.type=ajp13
worker.wrkr.connection_pool_size=25
worker.wrkr.connection_pool_timeout=600
worker.wrkr.socket_timeout=300

chmod a+x /opt/IBM/HTTPServer/conf/worker.properties

Customize httpd.conf

The following directives are added to the /opt/IBM/HTTPServer/conf/httpd.conf configuration file allowing mod_jk.so to be loaded and managed.

  1. Load the mod_jk module:
    LoadModule jk_module modules/mod_jk.so
  2. Configure the mod_jk module:
    <IfModule worker.c>
     ThreadLimit 25
     ServerLimit 64
     StartServers 2
     MaxClients 600
     MinSpareThreads 25
     MaxSpareThreads 75
     ThreadsPerChild 25
     MaxRequestsPerChild 0
    </IfModule>
  3. Listen to the appropriate port:
    Listen 8080 (Connecting to HP server)
    Listen 8082 (Connecting to the JIRA server using HTTP)
    Listen 8443 (Connecting to the JIRA server using HTTPS)
  4. Configure the mod_jk settings appropriately:
    JkWorkersFile "/opt/IBM/HTTPServer/conf/worker.properties"
    JkLogFile  "/opt/IBM/HTTPServer/logs/mod_jk.log"
    JkLogLevel warn
    JkMount /* wrkr

Please refer to the download httpd.conf file to see the customizations made. The modifications are highlighted in bold italic.

After making the changes to the IBM HTTP Server configuration files, stop and restart the server.


Summary

In this article, we described the topologies used to develop IBM Rational Lifecycle Integration Adapters 1.1.1. You might try one of the department topologies to get started using one or more of the adapters. When you are ready to move to a more complex production environment, use the enterprise topology for guidance. We've provided some definitions and steps that supplement the product documentation in the Information Center.


Download

DescriptionNameSize
Customized httpd.conf for adaptersexample httpd.conf44KB

Resources

Learn

Get products and technologies

  • Download and evaluate the Rational Lifecycle Integration Adapters that you need, either the Standard Edition adapters for HP ALM, Git, or JIRA.
  • Evaluate IBM software in the way that suits you best: Download it for a trial, try it online, use it in a cloud environment, or spend a few hours in the SOA Sandbox learning how to implement service-oriented architecture efficiently.

Discuss

Comments

developerWorks: Sign in

Required fields are indicated with an asterisk (*).


Need an IBM ID?
Forgot your IBM ID?


Forgot your password?
Change your password

By clicking Submit, you agree to the developerWorks terms of use.

 


The first time you sign into developerWorks, a profile is created for you. Information in your profile (your name, country/region, and company name) is displayed to the public and will accompany any content you post, unless you opt to hide your company name. You may update your IBM account at any time.

All information submitted is secure.

Choose your display name



The first time you sign in to developerWorks, a profile is created for you, so you need to choose a display name. Your display name accompanies the content you post on developerWorks.

Please choose a display name between 3-31 characters. Your display name must be unique in the developerWorks community and should not be your email address for privacy reasons.

Required fields are indicated with an asterisk (*).

(Must be between 3 – 31 characters.)

By clicking Submit, you agree to the developerWorks terms of use.

 


All information submitted is secure.

Dig deeper into Rational software on developerWorks


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=Rational
ArticleID=959834
ArticleTitle=Integrate IBM Rational CLM with HP ALM, Atlassian JIRA, and Git
publish-date=01142014