Java Object Gateway Server errors in Caché 2017.2.2

Primary tabs

This is a FYI for anyone who has experienced the following error after upgrading an existing  instance to any product based on Caché 2017.2.2. In our case, the products are HealthShare HealthConnect for Redhat x64 and for Windows x86-64 but I believe it would be a common problem for any InterSystems product on any platform, if based on Caché 2017.2.2. After upgrading our development instance from 2016.2.2 to 2017.2.2, we experienced the following errors when attempting to start a pre-existing Java Object Gateway that was defined prior to the upgrade:

Execution returned: 'Error: Could not find or load main class '

*ERROR* Return from StartGatewayObject: ERROR #5001: There were errors returned when trying to start the Java Gateway

An error occurred while trying to start the Gateway Server

The root cause is a code change made by InterSystems to the system class %Net.Remote.ObjectGateway.cls. The class extent is stored in the global ^%SYS("gateway","DEFINITION","data",{gateway_name}). For 2017.2.2, two new properties were added to the class:

  • UsePassPhrase - $list(data,23)
  • MainClassName - $list(data,24)

This is an example of what the global looks like both before and after the upgrade:

^%SYS("gateway","DEFINITION","DATA","ISDEVJavaGateway")=$lb("","1","ISDEVJavaGateway","127.0.0.1","55555","/opt/InterSystems/CACHE/mgr/javagateway.log",5,5,10,30,"R",300,"/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64","JDK18","","",,"127.0.0.1","",,0,"2.0")

Note that this global node only has 22 list elements.

This is an example of what the global needs to look like after the upgrade (note the addition of elements 23 and 24):

^%SYS("gateway","DEFINITION","DATA","ISDEVJavaGateway")=$lb("","1","ISDEVJavaGateway","127.0.0.1","55555","/opt/InterSystems/CACHE/mgr/javagateway.log",5,5,10,30,"R",300,"/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64","JDK18","","",,"127.0.0.1","",,0,"2.0",0,"com.intersys.gateway.JavaGateway")

Unfortunately, the 2017.2.2 installation kit does not automatically convert pre-existing object gateway definitions to the new structure, and editing a pre-existing Java Object Gateway definition after the upgrade does not fix the problem. This is because MainClassName is populated via a default value and editing a pre-existing object gateway definition does not cause default values to be populated - only creation of a new object gateway would populate the default value. I opened a ticket with the WRC and the recommendation was to re-create the object gateway definitions in 2017.2.2. My own testing showed that manually editing the global also works.

I have no idea whether the changes to %Net.Remote.ObjectGateway.cls would adversely affect any pre-existing %Net Object Gateway definitions.

Ray Lawrence

Associate Software Development Director

Interoperability

IQVIA logo_96dpi_100pxheight

Learn more about IQVIA™

 

4820 Emperor Blvd,

Durham, NC  27703

United States