Do Not Use Commas For Multi-Source JNDI

Here’s a bit of fun with WebLogic JDBC configurations.  I ran into this issue after reading that p13nDataSource and  cgDataSource-NonXA should not be configured as multi-source. There were  some issues changing them to use the basic JDBC connection string and  when rolling back to the bad configuration the server went “Boom”.  Since one purpose behind this blog is to share lessons learned, I just had to post this.

If you write your descriptors manually (as opposed to generating them using the WLS console) and put a comma-separated list of JNDI addresses like this:

<jdbc-data-source-params>
  <jndi-name>weblogic.jdbc.jts.commercePool,
	contentDataSource,
	contentVersioningDataSource,
	portalFrameworkPool</jndi-name>
  <algorithm-type>Load-Balancing</algorithm-type>
  <data-source-list>portalDataSource-rac0,
	portalDataSource-rac1</data-source-list>
  <failover-request-if-busy>false</failover-request-if-busy>
</jdbc-data-source-params>

so long as the first address resolves, it will still work. Sort of.  If you call this connection to do an update, only one node of the RAC instance is updated. Other wonderful side-effects include the server refusing to start sometimes.

The proper way to list the JNDI sources is one per node, like this:

<jdbc-data-source-params>
	<jndi-name>weblogic.jdbc.jts.commercePool</jndi-name>
	<jndi-name>contentDataSource</jndi-name>
	<jndi-name>contentVersioningDataSource</jndi-name>
	<jndi-name>portalFrameworkPool</jndi-name>
	<algorithm-type>Load-Balancing</algorithm-type>
	<data-source-list>portalDataSource-rac0,
			portalDataSource-rac1,
			portalDataSource-rac2
	</data-source-list>
	<failover-request-if-busy>false</failover-request-if-busy>
</jdbc-data-source-params>

 

(Props to Sandeep Seshan for locating the root cause)

Facebooktwitterredditlinkedinmail
© Scott S. Nelson

Leave a Reply

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