IBM Support

Resolving ICU4J class conflicts between Alphablox and WebSphere Application Server

Troubleshooting


Problem

Resolving ICU4J class conflicts between Alphablox and WebSphere Application Server.

Symptom

During installation, Alphablox deploys multiple jar files to the WebSphere server as shared libraries. However, WebSphere Application Server ships with jar files that are used by some WebSphere applications. One technology that is shipped by both Alphablox and WebSphere is ICU4J. Due to architectural limitations, Alphablox deploys its version of the ICU4J jar in a manner that effectively overrides the WebSphere version for all applications deployed on the same Application Server. The version shipped with Alphablox is at a higher level than the WebSphere version, and can lead to class conflict errors, when non-Alphablox applications that are on the same Application Server attempt to use the WebSphere version. The symptoms can vary.

One example is a NullPointerException. This occurs when the computer is set to a non-Daylight Savings time zone. For example:

 java.lang.NullPointerException
 at com.ibm.icu.impl.OlsonTimeZone.setRawOffset(OlsonTimeZone.java:165)
 at com.ibm.bpc.clientcore.converter.CalendarConverter.getAsString
  (CalendarConverter.java:109)        
 at com.ibm.bpe.jsf.converter.FacesSimpleConverter.getAsString
  (FacesSimpleConverter.java:141)
 at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormatted
  Value(HtmlBasicRenderer.java:325)
 at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrent
  Value(HtmlBasicRenderer.java:219)

Cause

This exception is caused by a defect in the icu4j3_6.jar file.

There is an APAR for Alphablox to package a later version of this jar file in a future release. The APAR number is PJ33738.

Resolving The Problem

The recommended solution to configure the WebSphere server’s ICU4J classes to be on a separate server-level PARENT_LAST class loader, but at a level lower than the class loaders used by Alphablox. This way, applications other than Alphablox will use the WebSphere version, but Alphablox will use Alphablox version because the Alphablox classes are loaded by a class loader which is a parent of the class loader referencing the WebSphere ICU4J classes.

Follow these steps:

1. Create another server-level shared library called was_icu4j345 that points to the WebSphere ICU4J jar. In the following example the jar file is:

${WAS_INSTALL_ROOT}/plugins/com.ibm.icu_3.4.5.jar





2. Create a new Application Server class loader.



3. Add the shared library that you created to the new class loader:









This allows Alphablox to use the icu4j classes that are included with the Alphablox, and stand-alone WebSphere web applications use the WebSphere version of the icu4j jar file.

[{"Product":{"code":"SSCPX3","label":"DB2 Alphablox"},"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Component":"WS and WAS Integration","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"},{"code":"PF016","label":"Linux"}],"Version":"8.4;9.5","Edition":"Edition Independent","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
16 June 2018

UID

swg21307220