I got the question if it is possible to have a the WebLogic JDBC Data Source to be resolved by an LDAP entry. The answer is yes; since WebLogic 12.2.1.3 a JDBC connection pool URL declaration can point to an LDAP entry.
This can be done by simply editing an existing JDBC data source.
jdbc:oracle:thin:@ldap://vm01.dbi-workshop.com:1389/cn=orcl,cn=OracleContext,dc=DatabaseConnection,dc=com

Of course the LDAP server needs to have been configured to store the TNS entries. I explained how to do this in one of my previous blogs: how-to-declare-tns-entries-in-oracle-unified-directory-oud
Or it can be done using WLST scripts.
First a properties file
DS_NAME=MyLDAPDatasource JNDIName=jdbc/MyLDAPDatasource TEST_TABLE_QUERY=SQL SELECT 1 FROM DUAL JDBC_DRIVER=oracle.jdbc.OracleDriver TARGET=Server1 JDBC_URL=jdbc:oracle:thin:@ldap://vm01.dbi-workshop.com:1389/cn=orcl,cn=OracleContext,dc=DatabaseConnection,dc=com DB_USER=USER01 DB_USER_PASSWORD=Welcome1 POOL_MIN_CAPACITY=10 POOL_MAX_CAPACITY=100 POOL_INITIAL_CAPACITY=1 POOL_STATEMENT_CACHE=10 XA_TRANSACTION_TIMEOUT=7200 XA_RETRY_INTERVAL_SECONDS=60 XA_RETRY_DURATION_SECONDS=300 JDBC_DEBUG_LEVEL=10
and then the python script
#read the domain properties file
try:
print "Load properties file"
properties = os.environ["WEBLOGIC_DOMAIN_DEF_DIR"] + "/" + os.environ["WEBLOGIC_DOMAIN"] + "/domain.properties"
print properties
loadProperties(properties)
except :
print "unable to load domain.properties file"
# exit(exitcode=1)
try:
jdbcProperties=os.path.realpath(os.path.dirname(sys.argv[0])) + "/JDBC_Datasource.properties"
print jdbcProperties
loadProperties(jdbcProperties)
except :
print "Unable to load JDBC_Camunda.properties"
exit(exitcode=1)
#AdminUser=raw_input('Please Enter WebLogic Domain Admin user Name: ')
#AdminPassword= "".join(java.lang.System.console().readPassword("%s", ['Please enter WebLogic Domain Admin user password:']))
try:
#Connect to AdminServer
connect(userConfigFile=CONFIG_FILE,userKeyFile=KEY_FILE,url=ADMIN_URL)
#connect(url=ADMIN_URL)
#connect(AdminUser,AdminPassword,ADMIN_URL)
#connect()
#connect('weblogic','Welcome1')
except:
print "Unable to connect"
exit(exitcode=1)
try:
edit()
startEdit()
cd('/')
cmo.createJDBCSystemResource(DS_NAME)
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME)
cmo.setName(DS_NAME)
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME+'/JDBCDataSourceParams/'+DS_NAME)
print "Setting JNDI Names"
set('JNDINames',jarray.array([String(JNDIName)], String))
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME)
cmo.setDatasourceType('GENERIC')
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME+'/JDBCDriverParams/'+DS_NAME)
print "Setting JDBC URL"
cmo.setUrl(JDBC_URL)
print "Setting Driver Name"
cmo.setDriverName(JDBC_DRIVER)
print "Setting Password"
set('Password', DB_USER_PASSWORD)
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME+'/JDBCConnectionPoolParams/'+DS_NAME)
cmo.setTestTableName(TEST_TABLE_QUERY)
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME+'/JDBCDriverParams/'+DS_NAME+'/Properties/'+DS_NAME)
cmo.createProperty('user')
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME+'/JDBCDriverParams/'+DS_NAME+'/Properties/'+DS_NAME+'/Properties/user')
cmo.setValue(DB_USER)
cd('/JDBCSystemResources/'+DS_NAME)
set('Targets',jarray.array([ObjectName('com.bea:Name='+TARGET+',Type=Server')], ObjectName))
print "Saving and activating changes"
save()
activate()
except Exception, e:
dumpStack()
print "ERROR 2... check error messages for cause."
print e
dumpStack()
stopEdit(defaultAnswer='y')
exit(exitcode=1)
try:
edit()
startEdit()
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME+'/JDBCDriverParams/'+DS_NAME+'/Properties/'+DS_NAME+'/Properties/user')
cmo.unSet('SysPropValue')
cmo.unSet('EncryptedValue')
cmo.setValue(DB_USER)
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME+'/JDBCConnectionPoolParams/'+DS_NAME)
cmo.setInitialCapacity(long(POOL_INITIAL_CAPACITY))
cmo.setMinCapacity(long(POOL_MIN_CAPACITY))
cmo.setStatementCacheSize(long(POOL_STATEMENT_CACHE))
cmo.setMaxCapacity(long(POOL_MAX_CAPACITY))
cmo.setStatementCacheType('LRU')
cd('/JDBCSystemResources/'+DS_NAME+'/JDBCResource/'+DS_NAME+'/JDBCDataSourceParams/'+DS_NAME)
cmo.setGlobalTransactionsProtocol('OnePhaseCommit')
save()
activate()
except Exception, e:
print "ERROR... check error messages for cause."
print e
stopEdit(defaultAnswer='y')
exit(exitcode=1)
exit(exitcode=0)
This script and properties file can be used to create the JDBC connection on one WebLogic Server defined as TARGET in the properties file.