File Net Salesforce Connector Installation Guide
File Net Salesforce Connector Installation Guide
Version 5.6.1
Copyright
Before you use this information and the product it supports, read the information in "Notices"
on page 33.
Overview ............................................................................................................................... 5
Notices ................................................................................................................................ 35
Trademarks ......................................................................................................................... 38
The IBM FileNet Salesforce Connector App enables Salesforce users to store their attachments
as documents in their organization’s FileNet Content Manager object store instead of storing
the documents in Salesforce.
This document outlines the steps needed to prepare the environment on the FileNet side, as
well as the steps to configure the app on the Salesforce side.
The IBM FileNet Content Services GraphQL API provides the connection between the IBM
FileNet Connector for Salesforce app and the IBM FileNet Content Engine server. The following
graphic describes this connection:
The FileNet Salesforce Connector App connects to the IBM FileNet Content Services GraphQL
API through a secure HTTPS connection. The GraphQL API then makes calls to the Content
Platform Engine server through the Content Engine Java API to interact with Documents and
with SalesforceRelationship objects that associate Documents with Salesforce records.
In addition to the GraphQL API configuration, you also prepare the Content Platform Engine
object store and configure permissions for the content.
On the Salesforce side, you install and configure the FileNet Salesforce Connector App, then
make updates to your Salesforce views to make the object store content visible and available to
Salesforce users. You also configure authentication to control access to your content.
To prepare the Content Platform Engine for integration with the FileNet Salesforce Connector
App, you must deploy and configure the Content Services GraphQL API, prepare the object
store, and assign appropriate permissions to the document classes.
The Salesforce app uses the Content Services GraphQL API to connect to the Content Platform
Engine. The connection requires the GraphQL API to be accessible from the public internet. As a
result, the GraphQL API cannot be behind a firewall or VPN.
To deploy and configure the IBM FileNet Content Services GraphQL API, follow the instructions
in the following Knowledge Center topic:
https://www.ibm.com/support/knowledgecenter/SSNW2F_5.5.0/com.ibm.p8.containers.doc/c
ontainers_graphql.htm
Note the following configuration requirements that are specific for use of the GraphQL API with
the FileNet Salesforce Connector App:
CORS.xml
By default, the IBM Content Services GraphQL service will not trust calls coming from
Salesforce. To allow the GraphQL service to trust incoming calls from Salesforce.com, and to
allow Salesforce web pages to trust data coming from the Content Services GraphQL service, a
Cross Origin Resource Sharing (CORS) configuration must be established between the two
services. Configuring Salesforce to allow Resource Sharing (CORS) with the Content Platform
Engine server, in this document, describes CORS settings that are required on the Salesforce
side. This section describes the CORS settings required on the IBM Content Services GraphQL
Service side.
The IBM Content Services GraphQL service allows the following CORS options to be set to
control access by external web sites:
• Allowed HTTP methods
• Allowed HTTP Request Headers
• Allowed HTTP Response Headers
• Allow Credential
• Max Age
You must replace the <Salesforce_Org_URL> placeholder text above with your Salesforce
Organization's instance domain URL (without any context root). In the following example, the
domain URL is:
test-demo-dev3.lightning.force.com
When you deploy the Content Services GraphQL API, it is recommended that you initially
configure Basic Authorization to get the connector app working as part of a test or
development environment.
Important:
Configuring the FileNet Connector for Salesforce app to use OAuth requires that your IBM
FileNet Content Manager users use the same name to authenticate as the corresponding
Salesforce user (for example, [email protected]). If the same names are used in
both places, then the Content Services GraphQL server can be configured to trust the
OAuth/OIDC tokens that are generated by Salesforce.
See the instructions in the Advanced Authentication section of the Content Services GraphQL
API documentation for details of the Content Platform Engine side of this configuration.
The Salesforce integration requires that you install a custom feature AddOn in each Object
Store that is exposed to Salesforce. This AddOn defines Content Engine classes and properties
that are used by the Salesforce app to associate Content Engine documents to Salesforce
objects.
You download the add-on extension files, register the add-on with the server, then install the
add-on. Perform these configuration steps as a P8admin in the Administration Console for
Content Platform Engine.
1. Download the following IBM Salesforce Integration Extensions AddOn files from this
GitHub location:
FNCE_SalesforceIntegrationAddOn.desc
SalesforceIntegrationExtensions.xml
SalesforceIntegrationPostImportScript.js
2. Copy the files into a single directory on the server where you can access the IBM
Administration Console for Content Platform Engine.
Although not required, it is recommended to create a new set of classes in your object store for
your Salesforce documents. You can then set permission on these classes as described in the
next section without any impact to other document classes that you might already have in your
object store.
If your document class uses this default setting to grant these three permissions to
#AUTHENTICATED_USERS, then nothing further needs to be done in the Document Class
permission settings. However, if you are not granting these permissions to
#AUTHENTICATED_USERS, then create a group containing all of your Salesforce users, and use
the Administration Console for Content Platform Engine to add a permission to each document
class that will be exposed in Salesforce, granting these permissions to the Salesforce user’s
group.
The Default Instance Owner property of a document class determines who the default owner
will be for a new document of the document class. FileNet applications (including the
The Default Instance Owner of a document class can be viewed and edited in the
Administration Console for Content Platform Engine by scrolling to the bottom of the Default
Instance Security tab:
For document classes that are exposed in Salesforce, the default setting of #CREATOR_OWNER
should be maintained for the Default Instance Owner property. This setting means that the
person who creates a document is always it’s owner.
Configuring users who can view existing documents and their properties
In the example above, the #AUTHENTICATED_USERS pseudo-group (which represents all users
who are able to login to the server) is granted the View Content security group. This security
group includes the following permissions: View all properties, View content, Read permissions.
When an object store is created, one or more user groups can be specified as object store
users. If such a group is specified at object store creation time, then they will be given the View
content access group for all document classes by default. If no such group is specified at object
store creation time, then #AUTHENTICATED_USERS is granted the View Content access group
for all document classes by default.
Customers may edit the Default Instance Security settings to limit access to smaller groups, or
to remove all access, and instead use security mechanisms other than Default Instance Security
to control document permissions.
For the Salesforce environment, we recommend that Default Instance Security should grant
View Content either to #AUTHENTICATED_USERS, or to a group that will contain users who
should have read-only access to all Salesforce documents.
Note that if a user has only View Content permission, then they will be able to edit properties
and content for documents that they create, but not for documents that were created by any
other user.
Configuring users who can edit properties or create new versions of existing documents
In the example above, the intg_admin group is granted the Major Versioning permission group.
This security group includes permissions to modify properties or create new versions, in
addition to the permissions that the View Content group has. Users who should be allowed edit
documents that were created by other Salesforce users should be given this permission.
If a customer wanted to grant permission to edit document properties, but not permission to
create new document versions, then the group should be granted the Modify Properties
permission group, rather than the Major Versioning permission group.
For the Salesforce environment, we recommend that Default Instance Security should grant
Major Versioning permission to either some or all Salesforce users, by assigning this permission
group to a group that contains these users (or to #AUTHENTICATED_USERS).
In the example above, the #CREATOR_OWNER pseudo-user, and as the CEAdminGroup, have
both been granted the Full Control permission group. These permissions allow the grantees to
view and edit the documents, as well as to remove them from the Salesforce record.
For the Salesforce environment, we recommend that Default Instance Security should grant Full
Control permission to a group who are admins within Salesforce, as well as to the
#CREATOR_OWNER pseudo-user.
Whether you create new document classes for use by the Salesforce Connector, or chose to use
existing document classes, you have some options for which properties on your classes are
visible and settable in Salesforce. You also have the option to create some new properties to
hold copies of Salesforce fields from the Salesforce records where you have added FileNet
document attachments.
You can create special properties on your document class that are automatically populated with
values from the Salesforce record that a document is added from. When creating a new
document, the IBM FileNet Salesforce Connector automatically looks for any properties on the
target document class whose symbolic name begins with the prefix “Fnsf”. If any properties
with this prefix are found, then the Connector attempts to find a Salesforce field with a
matching name, and then populates the FileNet property with the value from that field during
document creation.
For example, if the Salesforce record where a document is being added has a field whose name
is “AccountName”, and a property exists on the target document class with the symbolic name
“FnsfAccountName”, then that property is automatically populated with the value of the
“AccountName” field.
When you configure an object store in Salesforce, you can select the document classes that are
exposed to Salesforce users, and select which document properties of those classes Salesforce
users can set the values for when they create a new FileNet document through Salesforce. If a
property with an “Fnsf” prefix in its symbolic name is selected, then it appears on the New
Document dialog of the Document List View widget as read-only. The user cannot override the
value from the Salesforce record.
If you want to store a copy of the entire Salesforce record in your FileNet object store, you can
do that by creating a property with the symbolic name “FnsfJSONRecord” in your target
Note that there are some limitations of this field synchronization feature:
• The property on the FileNet document has the value of the Salesforce field at the point
in time when the document is first added as an attachment on the Salesforce record. If
the value of the Salesforce field is subsequently updated, the value of the property on
the FileNet document is not updated.
• If the document is later added to additional Salesforce records through the Add To
Record feature, it is not updated with field values from the new record.
• Only fields that are of string, date, or integer value can be synchronized through this
feature. The data type of the Salesforce field must match the data type of the FileNet
property, or the synchronization does not work
• If the length of the Salesforce string exceeds the length of the corresponding FileNet
property, then the string is truncated to fit in the FileNet property
A Salesforce administrator user must install and configure the IBM FileNet Salesforce Connector
app with a Salesforce Organization.
Note that you must accept the license agreement for the Salesforce Connector application
before the app can be installed. The specific terms and conditions for this application are
available in the installation wizard, and also on the AppExchange listing page. License terms for
the prerequisite products are accepted during the purchasing of those products.
After you install the app in the Salesforce organization, you must do additional configuration in
Salesforce to make the app features available for users.
By default, browsers do not allow a request to one web site to retrieve many types or resources
from a different web site. Cross Origin Resource Sharing (CORS) is a standard that allows a
primary web site to request access to resources from a secondary web site, and for the
secondary web site to be configured to allow this access. The IBM FileNet Connector for
Salesforce requires CORS access to be configured on both the Salesforce Organization, and on
the IBM Content Services GraphQL API service.
To configure CORS within Salesforce, the Salesforce admin must add a trusted domain to the
Salesforce organization’s CORS whitelist.
IBM FileNet Salesforce Connector App supports User Password (aka BasicAuth) and OAuth 2.0
JSON Web Token (JWT). Both protocols requires creating a NamedCredential and completing a
set of additional configuration steps.
To configure the app to use OAuth authentication, see the instructions in section 5 of this
document. To configure the app for BasicAuth authentication, see the instructions in section 6
of this document.
Configuring Salesforce users who have administrator access for the Connector
When the IBM FileNet Connector for Salesforce is installed, it creates two Permission Sets,
which control which users have which access levels within the connector. The first of these is
the IBM FileNet Admin Permission Set
Only administrative users should have access to sync an IBM FileNet Content Manager object
store with a Salesforce organization, or to configure which properties are editable in the
document properties dialog. To grant Salesforce users this access, they must be added to the
IBM FileNet Admin Permission Set.
The second Permission Set that is created during the installation is the IBM FileNet User
Permission Set. All users who need runtime access to retrieve, create, or update documents
through the IBM FileNet Salesforce Connector must be added to the IBM FileNet User
Permission Set.
Once the IBM FileNet Salesforce Connector app has been installed and all of the post-install
configuration steps are complete, you are ready to configure an object store for use in your
Salesforce organization. Multiple object stores can be configured with a single organization if
you choose.
For each object store that is configured, the admin chooses the document classes to be
available for Salesforce users to store documents. Additionally, for each document class that is
selected, the admin can select the subset of properties that a user can set when they create a
new document or update existing documents.
You must be a member of the IBM FileNet Admin Permission Set to perform any of the actions
in this section.
You use the Connector app to choose an object store and select the Document classes and
associated properties that you want to use for your application.
Note that the Configure object store action can be run multiple times for an object store, to
change the selected document classes, or to change the list of fields that are selected for a
given class. After an object store has been configured once, the Reconfigure button can be
used to configure it again.
After you configure an object store, you add a Document List widget to the relevant Salesforce
pages to make the object store visible to end users.
Note: Only a Salesforce system administrator can modify a page layout, as described in this
section. The edit page link is not visible to a standard user.
For each configured object store, you must add the IBM Documents List Widget to the pages
where you want IBM FileNet documents to be accessible. The widget can be added to any
Salesforce page, including pages for custom Salesforce record types. The follow steps use the
Account page as an example.
If you want to disassociate an object store from a Salesforce organization, you can do so by
selecting the object store in the Configure Object Store tab, and then using the Remove
button.
This action prevents any new documents from being added to this object store, as well as the
listing or viewing of any existing documents. It does not, however, remove the Document List
widget for the Object Store from the Salesforce pages where it is in use. The Document List
widgets will show an error when pages that contain the widget are viewed.
If you use the Remove button to remove an object store association, and you then re-configure
the object store, then all of the documents will come back. If you do not intend to immediately
re-configure the object store, then you should manually remove the Document List widget from
all Salesforce pages prior to performing the Remove operation.
You can configure the IBM FileNet Salesforce Connector app to authenticate to the IBM
Content Services GraphQL server by using the OAuth 2.0 protocol.
The IBM FileNet Connector for Salesforce app references a Salesforce Named Credential when
it accesses the IBM Content Services GraphQL server. The Named Credential is configured to
perform all of the necessary authentication steps when a connection from Salesforce to the
IBM Content Services GraphQL server is made.
Named Credential
A Named Credential is a configuration that declaratively manages a Salesforce Organization’s
authentication to an external service. The credential specifies the URL of the external service
and its authentication parameters. The connection between Salesforce and the external service
is established using the Authentication Protocol parameter in a Named Credential.
The OAuth 2.0 JWT is an OAuth flow, similar to Web Server flow within OAuth 2.0, which uses a
JWT format of the OAuth access token. With this flow, Salesforce creates a token using the
logged on user’s identity, and digitally signs the token using a private key. Whenever the IBM
FileNet Salesforce Connector App makes a callout to IBM Content Services server, Salesforce
sets this token in the Authorization header of the HTTP Request object.
IBM FileNet Content Services server parses the token and verifies the signature using the SSL
Certificate stored in server's KeyStore. The server also checks the expiration time in the token.
An error response is returned if signature verification fails or token is already expired.
The certificate is downloaded to your system. Make a note of the location so you can use this
certificate in a later configuration procedure.
You can change the callback URL at later time. If you don’t know the URL when creating
the Connected App, you can enter a placeholder URL, and change it at a later date.
6. Select Use digital signature, click Choose File, and select the certificate that you
downloaded to your system in Generating a new self-signed certificate.
7. From Available OAuth Scopes, add the following to Selected OAuth Scopes:
• Access your basic information (id, profile, email, address phone)
• Allow access to your unique identifier (openid)
• Perform requests on your behalf at any time (refresh_token, offline_access)
8. Check Require Secret for Web Server Flow.
Configuring Salesforce users who can use the Connected App to authenticate
When using OAuth, users must reference the IBM FileNet Salesforce Connected App
Connected App directly from their profiles. This approach requires that they have access to the
Connected App. There are two options to complete this step, depending on whether you want
all users to be able to use the connector, or only certain users.
Option 1: Allow access for all users in the Salesforce Organization (Recommended)
If you want all Salesforce users within an organization to have non-administrative access to the
IBM FileNet Salesforce connector, add the Connected App that was created in a previous step
to the Standard Profile for the organization (or the user profile of your choice).
1. In Setup, go to Profiles.
2. Select the Standard User profile (or the user profile of your choice).
3. Click Assign Connected Apps.
4. Click Edit for Assign Connected Apps.
5. Add the IBM FileNet Salesforce Connected App to the list of Enabled Connected Apps.
6. Click Save.
1. In the Setup menu, go to Administration > Users, and select Permission Sets.
2. Click New to create a new Permission Set
3. For Label, enter IBM FileNet Connected App
4. For API Name, enter IBM_FileNet_Connected_App
5. Leave the Session Activation Required checkbox unchecked.
6. Leave the License dropdown set to Salesforce
7. Click Save to save the Permission Set.
8. In the Apps section for the Permission Set that you just created, click on Assigned
Connected Apps.
9. Click Edit.
10. In the Installed Connected Apps list, select the IBM FileNet Salesforce Connected App
Named Credential and move it to the Enabled Connected Apps list.
11. Click Save to save your changes.
12. On the Permission set screen, click Manage Assignments.
13. Select the user or users that you want to add to the permission set (or unselect users who
you would like to remove from the permission set), and click Assign.
14. Click Save to save your changes.
1. From Setup, enter Named in the Quick Find Box, then select Named Credentials.
2. Click New Named Credential.
3. Enter the following field values:
• Label: IBMFileNetCredential
• Name: IBMFileNetCredential
• URL: The URL of your IBM FileNet Content Services API server
• Identity Type: Per User
• Authentication Protocol: JWT
• Certificate: Click the Search icon and select the certificate that you created in
Generating a new self-signed certificate.
• Issuer: Paste the Consumer key from Creating a connected app.
The email address of the logged-on Salesforce user is used as part of the identity propagated to
Content Services and the Content Platform Engine. To be able to access Content Services, the
user’s email address must exist as the shortName attribute in the Content Platform Engine
LDAP server for the user.
You install the SSL certificate that you generated on the SalesForce server on the Content
Services server to establish a secure connection. You downloaded this certificate as part of
Generating a new self-signed certificate.
2. Because keytool lowercases certificate alias names, verify what your certificate is called
after importing by using a command similar to the following:
keytool -list -keystore graphqlTrustStore.p12 -storetype pkcs12
Typical output for this command might be like the following example:
You configure your Content Services server as an Open ID Connect client by adding an oidc.xml
configuration file to the overrides directory for your Liberty server.
<openidConnectClient
id="IbmContentServices"
issuerIdentifier="3MVG9_XwsqeYoueKsnUYSJ4OcVmjZvYlP6nOCuXA4ZfmRuD2toaZ121BKU.tqddt0V4l
7j.1YFkf9WC7i7BY8"
trustStoreRef="graphqlTrustStore"
trustAliasName="saleforce_certificate_for_ibm_content_services"
realmName="localRealm"
audiences="https://login.salesforce.com"
inboundPropagation="required"
httpsRequired="true"
isClientSideRedirectSupported="false"
signatureAlgorithm="RS256"
userIdentifier="sub"
uniqueUserIdentifier="sub"
userIdentityToCreateSubject="sub">
</openidConnectClient>
<keyStore id="graphqlTrustStore"
location="/opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides/graphqlTrustS
tore.p12" type="PKCS12" password="changeit" />
</server>
• Id: Must match the last part of the Callback URL defined on Salesforce in Creating a
connected app, for example, https://cpe-cmis-
dev.ibmbrsandbox.com:9444/oidcclient/redirect/IbmContentServices
• issuerIdentifier: The value for the Consumer Key that is defined on Salesforce in
Creating a connected app.
• trustStoreRef: Trust store in which you imported the Salesforce SSL certificate of your
Connected App in Installing the Salesforce SSL certificate on Content Services server.
3. Add the keyStore stanza for the graphqlTrustStore into which you imported the Salesforce
certificate.
You can configure the IBM FileNet Connector for Salesforce to connect to the IBM Content
Services GraphQL API using the BasicAuth protocol. This method is recommended only for
development and test environments. For production environments, it is recommended to use
the OAuth mechanism as described in the previous section.
The IBM FileNet Salesforce Connector requires a Salesforce Named Credential to control
authentication options for calls to the remote IBM Content Services GraphQL API.
Each user must configure their username and password credentials for the FileNet environment
in their user profile, as described in a later section. For further details, see the following
Salesforce documentation topic:
https://help.salesforce.com/articleView?id=named_credentials_about.htm&type=5
Configuring Salesforce users who can use the Named Credential to authenticate
When using BasicAuth, users must reference the IBMFileNetCredential Named Credential
directly from their profiles. This approach requires that they have access to the Named
Credential. There are two options to complete this step, depending on whether you want all
users to be able to use the connector, or only certain users.
Option 1: Allow access for all users in the Salesforce Organization (Recommended)
1. In Setup, go to Profiles.
2. Select the Standard User profile (or the user profile of your choice).
3. Click Enable Named Credential Access URL.
4. Click Edit for Enable Named Credential Access.
5. Add the IBMFileNetCredential Named Credential to the list of Enabled Named Credentials.
6. Click Save.
If you only want a subset of your users to have access, then you must create a third Permission
Set in addition to the two that were created automatically when the app was installed. Use the
following steps to configure this access.
1. In the Setup menu, go to Administration > Users, and select Permission Sets.
2. Click New to create a new Permission Set
3. For Label, enter IBM FileNet Named Credential
4. For API Name, enter IBM_FileNet_Named_Credential
5. Leave the Session Activation Required checkbox unchecked.
6. Leave the License dropdown set to Salesforce
7. Click Save to save the Permission Set.
8. In the Apps section for the Permission Set that you just created, click on Named Credential
Access.
9. Click Edit.
10. In the Available Named Credentials list, select the IBMFileNetCredential Named Credential
and move it to the Enabled Named Credentials List.
11. Click Save to save your changes.
12. On the Permission set screen, click Manage Assignments.
13. Select the user or users that you want to add to the permission set (or unselect users who
you would like to remove from the permission set), and click Assign.
14. Click Save to save your changes.
You can remove the installed package. When a package is removed, all the components within
that package are also removed.
Note: When a Salesforce standard object has a reference to the package component, for
example, assigned users to a Permission Set, Salesforce prevents you from uninstalling the
package. You must delete those references first before you uninstall the package.
This information was developed for products and services offered in the U.S.A.
IBM may not offer the products, services, or features discussed in this document in
other countries. Consult your local IBM representative for information on the products
and services currently available in your area. Any reference to an IBM product,
program, or service is not intended to state or imply that only that IBM product, program,
or service may be used. Any functionally equivalent product, program, or service that
does not infringe any IBM intellectual property right may be used instead. However, it is
the user's responsibility to evaluate and verify the operation of any non-IBM product,
program, or service.
IBM may have patents or pending patent applications covering subject matter described
in this document. The furnishing of this document does not grant you any license to
these patents. You can send license inquiries, in writing, to:
For license inquiries regarding double-byte (DBCS) information, contact the IBM
Intellectual Property Department in your country or send inquiries, in writing, to:
The following paragraph does not apply to the United Kingdom or any other country where such
provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES
CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR
FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of
express or implied warranties in certain transactions, therefore, this statement may not
apply to you.
Any references in this information to non-IBM Web sites are provided for convenience
only and do not in any manner serve as an endorsement of those Web sites. The
materials at those Web sites are not part of the materials for this IBM product and use of
those Web sites is at your own risk.
Licensees of this program who wish to have information about it for the purpose of
enabling: (i) the exchange of information between independently created programs and
other programs (including this one) and (ii) the mutual use of the information which has
been exchanged, should contact:
The licensed program described in this document and all licensed material available for
it are provided by IBM under terms of the IBM Customer Agreement, IBM International
Program License Agreement or any equivalent agreement between us.
Information concerning non-IBM products was obtained from the suppliers of those
products, their published announcements or other publicly available sources. IBM has
not tested those products and cannot confirm the accuracy of performance,
compatibility or any other claims related to non-IBM products. Questions on the
capabilities of non-IBM products should be addressed to the suppliers of those
products.
All statements regarding IBM's future direction or intent are subject to change or
withdrawal without notice and represent goals and objectives only.
This information contains examples of data and reports used in daily business
operations. To illustrate them as completely as possible, the examples include the
names of individuals, companies, brands and products. All of these names are fictitious
and any similarity to the names and addresses used by an actual business enterprise is
entirely coincidental.
COPYRIGHT LICENSE:
IBM, the IBM logo and ibm.com are trademarks or registered trademarks of
International Business Machines Corp., registered in many jurisdictions worldwide.
Other product and service names might be trademarks of IBM or other companies. A
current list of IBM trademarks is available on the Web at "Copyright and trademark
information" at www.ibm.com/legal/copytrade.shtml.
Intel, Intel logo, Intel Inside, Intel Inside logo, Intel Centrino, Intel Centrino logo, Celeron,
Intel Xeon, Intel SpeedStep, Itanium and Pentium are trademarks or registered
trademarks of Intel Corporation or its subsidiaries in the United States and other
countries.
Linux is a registered trademark of Linus Torvalds in the United States, other countries,
or both.
Microsoft, Windows, Windows NT and the Windows logo are trademarks of Microsoft
Corporation in the United States, other countries, or both.
UNIX is a registered trademark of The Open Group in the United States and other
countries.
Java and all Java-based trademarks and logos are trademarks or registered
trademarks of Oracle and/or its affiliates. Other product and service names might be
trademarks of IBM or other companies.