Java 用于在Websphere中创建oracle数据源的Jython脚本
下面的代码成功创建了数据源,但调用测试连接时出现异常。但当我重新启动服务器并在控制台中使用测试连接时,它就可以工作了 如何避免服务器重启并使测试连接在脚本中工作。 在执行脚本之后和重新启动之前,我确实存在以下错误:Java 用于在Websphere中创建oracle数据源的Jython脚本,java,oracle,jython,websphere-7,wsadmin,Java,Oracle,Jython,Websphere 7,Wsadmin,下面的代码成功创建了数据源,但调用测试连接时出现异常。但当我重新启动服务器并在控制台中使用测试连接时,它就可以工作了 如何避免服务器重启并使测试连接在脚本中工作。 在执行脚本之后和重新启动之前,我确实存在以下错误: J2CA0130I: Data Source [nMINEDB] has Component-managed Authentication Alias [test/nMINEDBUser] but no corresponding J2C Authentication Data En
J2CA0130I: Data Source [nMINEDB] has Component-managed Authentication Alias [test/nMINEDBUser] but no corresponding J2C Authentication Data Entry is defined in security.xml. This may have undesirable effects.
代码:
直到服务器被回收,j2c身份验证才被初始化。我通常对脚本使用wsadmin,因为我不熟悉jython脚本是如何完成的。然而,我已经看到,当您创建新的j2c身份验证并将其与新的数据源一起使用时,需要回收jvm或节点同步。我已经对此进行了多次测试,除非完成循环/节点同步,否则数据源将抛出j2c身份验证错误。因此,唯一的方法是像我在代码中所做的那样重新启动服务器,这也是一个bug@Websphere。
#
# Jython Script to create MINE web data-source and JDBC provider.
#
#Import Statements
import os
import re
import sys
# Create JDBC provider for MINE oracle database.
def createMINEJDBCProvider():
server = '/Server:server1'
# Set the Node ID
serverID = AdminConfig.getid(server)
print 'Server ID:' + serverID
#Configuring J2c auth
userAlias='test/nMINEDBUser'
alias = ['alias', userAlias]
userid = ['userId', 'MINEDB']
password = ['password', 'MINEpass']
jaasAttrs = [alias, userid, password]
security = AdminConfig.getid('/Security:/')
print 'security:'+security
j2cUser=AdminConfig.create('JAASAuthData', security, jaasAttrs)
AdminConfig.save()
print 'Creating MINE User sucessfull'
# Test to see if the provider has already been created.
MINEJDBCprovider = AdminConfig.getid('/JDBCProvider:nOracle JDBC Driver/')
if len(MINEJDBCprovider) == 0:
providerName='nOracle JDBC Driver'
print 'creating Oracle JDBC provider on server:'+serverID
print 'JDBC provider Name:'+providerName
MINEJDBCprop1 = ['name', providerName]
MINEJDBCprop2 = ['description','Oracle JDBC Driver for MINE Application']
MINEJDBCprop3 = ['implementationClassName','oracle.jdbc.pool.OracleConnectionPoolDataSource']
MINEJDBCprop4 = ['classpath','C:/jars/ojdbc/ojdbc6.jar']
MINEJDBCprops=[MINEJDBCprop1,MINEJDBCprop2,MINEJDBCprop3,MINEJDBCprop4]
providerID = AdminConfig.create('JDBCProvider', serverID, MINEJDBCprops)
AdminConfig.save()
print 'Creating Oracle JDBC provider on server sucessfull with provider:'+providerID
createMINEDataSource()
else:
print 'oracle provider exists:'+MINEJDBCprovider
def createMINEDataSource():
providerName='nOracle JDBC Driver'
userAlias='test/nMINEDBUser'
MINEJDBCprovider = AdminConfig.getid('/JDBCProvider:nOracle JDBC Driver/')
MINEDataSource = AdminConfig.getid('/JDBCProvider:'+providerName+'/DataSource:MINEDB/')
if len(MINEDataSource) == 0:
# Set the datasource attributes
MINEDSprop1 = ['name', 'nMINEDB']
MINEDSprop2 = ['jndiName', 'jdbc/nMINEdb']
MINEDSprop3 = ['description', 'MINE database']
MINEDSprop4 = ['datasourceHelperClassname', 'com.ibm.websphere.rsadapter.Oracle11gDataStoreHelper']
MINEDSprop5 = ['authDataAlias' , userAlias]
mapConfigprop=["mappingConfigAlias", "DefaultPrincipalMapping"]
mapConfigs=[MINEDSprop5 , mapConfigprop]
mappingConfig=["mapping", mapConfigs]
MINEDSprops = [MINEDSprop1, MINEDSprop2, MINEDSprop3, MINEDSprop4, MINEDSprop5, mappingConfig]
MINEDataSource = AdminConfig.create('DataSource', MINEJDBCprovider, MINEDSprops)
#Set the DB URL
propSet = AdminConfig.create('J2EEResourcePropertySet', MINEDataSource, [])
AdminConfig.create('J2EEResourceProperty', propSet, [["name", "URL"], ["value", "jdbc:oracle:thin:@myserver:1523:MINED2"]])
AdminConfig.save()
print 'Creating MINE JDBC Datasource on server sucessfull with datasource:'+MINEDataSource
#Mapping module not trying right now
#AdminConfig.create('MappingModule', MINEDataSource, mappingConfig)
else:
print 'MINE Datasource already exists in the server:'+MINEDataSource
print 'Testing datasource connection'
print AdminControl.testConnection(MINEDataSource)
try:
print 'start'
createMINEJDBCProvider()
createMINEDataSource()
print 'end'
except:
print "***** Unexpected error while creating JDBC datasource:", sys.exc_info(), " *****"
raise