【问题标题】:Jython script to create oracle datasource in Websphere在 Websphere 中创建 oracle 数据源的 Jython 脚本
【发布时间】:2015-04-03 07:36:14
【问题描述】:

以下代码成功创建数据源,但调用测试连接时出现异常。但是当我重新启动服务器并在控制台中使用测试连接时它可以工作。

如何避免服务器重启并使测试连接在脚本中工作。 脚本执行后重启前我确实有这个错误:

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.

代码:

#
# 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

【问题讨论】:

    标签: java oracle jython websphere-7 wsadmin


    【解决方案1】:

    在服务器被回收之前,j2c 身份验证不会被初始化。

    【讨论】:

    • 我通常将 wsadmin 用于我的脚本,因为我不熟悉 jython 脚本是如何完成的。但是,我已经看到,当您创建新的 j2c 身份验证并将其与新数据源一起使用时,需要回收 jvm 或节点同步。我已经对此进行了多次测试,除非完成回收/节点同步,否则数据源将抛出 j2c 身份验证错误。
    • 所以唯一的方法就是像我在代码中所做的那样重新启动服务器,所以这是一个错误@Websphere。
    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2014-12-10
    • 2021-01-05
    • 2012-09-16
    • 2013-06-06
    • 2014-10-02
    • 2015-09-16
    相关资源
    最近更新 更多