Solving java.net.ProtocolException: Tunneling result not OK in weblogic server

Oracle Weblogic Server

When using T3 HTTP tunneling with a hardware/external load balancer and JMS, an error like this is observed:

Exception in thread “main” org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 203 completed:
at com.sun.corba.se.impl.logging.ORBUtilSystemException.writeErrorSend(ORBUtilSystemException.java:2259)
at com.sun.corba.se.impl.logging.ORBUtilSystemException.writeErrorSend(ORBUtilSystemException.java:2277)

Caused by: java.net.ProtocolException: Tunneling result not OK, result: ‘DEAD’, id: ‘0’
at weblogic.corba.client.http.TunneledSocketImpl.throwProtocolException(TunneledSocketImpl.java:498)
This issue happens if you use the default setting with JMS server affinity turned on.

The load balancer will not be able to connect to the JMS server node, thus will throw the above error.

The purpose of server affinity is to minimize the number of IP sockets opened between external Java clients and server instances in a cluster.

WebLogic Server accomplishes this by causing method calls on objects to “stick” to an existing connection, instead of being load balanced among the available server instances.

With server affinity algorithms, the less costly server-to-server connections are still load-balanced according to the configured load balancing algorithm.

The load balancing is disabled only for external client connections.

When using T3 tunneling with a load balancer, you should set the load balancing algorithm to one of the server affinity algorithms to ensure that clients connect only through the tunneled connection.

In this issue, to use the hardware/external load balancer, server affinity should be turned off for the connection factory that linked to the JMS client.

Probable Solution

Modify the configuration for the environment to turn off server affinity for the connection factory of the JMS server node.

WLS itself has a cluster load balancing feature for JMS server with affinity enabled, which is the default setting.

Thus in an environment which uses a hardware load balancer rather than the WLS internal load balancer, the WLS load balancer should be turned off at the connection factory.

 

To set server affinity off for the connection factory.

Follow the directions for navigating to the JMS Connection Factory-> Configuration -> General page in Configure connection factory load balancing parameters in the Administration Console.

Define the setting of the Load Balancing Enabled field using the following guidelines:

set Load Balancing Enabled = True
set Server Affinity Enabled =Off
Click on Save.

See below for complete Steps:

If you have not already done so, in the Change Center of the Administration Console, click Lock & Edit .

In the Administration Console, navigate to the connection factory resource that you want to configure:

To navigate to a configured JMS resource in a system module:

In the Administration Console, expand Services > Messaging > JMS Modules.
In the JMS Modules table, click the JMS module that contains the configured resource.
In the selected JMS module’s Summary of Resources table, click the JMS resource that you want to edit.

Or

Navigate to JMS resources in an application module

In the Domain Structure tree, select Deployments.
On the Summary of Deployments: Control page, choose one of the following options:
For a stand-alone JMS module, click the name of the module.
For a packaged JMS module, expand the application to view the application modules, then click the name of the JMS module that you want to modify.
In the resulting Overview: Resources table, click the JMS resource that you want to modify.

Click the Configuration > Load Balance tab.

On the Load Balance page:

In Server Affinity Enabled, specify whether non-anonymous producers sending to a distributed destination are load balanced on a per-send basis. When server affinity is turned off, then a server instance will load balance consumers or producers across member destinations in a distributed destination and disregard any other physical destinations also running on the same server instance.

In Load Balancing Enabled, specify whether a server instance that is load balancing consumers or producers across multiple member destinations in a distributed destination will first attempt to load balance across any other physical destinations that are also running on the same instance. You can turn off load balancing if you have applications that use distributed destinations to distribute or balance their producers and consumers across multiple physical destinations, but do not want WebLogic Server to make a load balancing decision each time a message is produced.

Save your changes and make sure you have this configuration set like below screenshot:

Connection factory Load Balancing

set Load Balancing Enabled = True
set Server Affinity Enabled =Off

To activate these changes, in the Change Center of the Administration Console, click Activate Changes.

Not all changes take effect immediately—some require a restart.

In case of any ©Copyright or missing credits issue please check CopyRights page for faster resolutions.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.