0

我通过以下方式在 wsadmin 控制台的 jython 中创建 DataSource:

首先,我按名称搜索 JDBC 提供程序:

for provider in AdminConfig.list('JDBCProvider').split('\r\n'):
  if AdminConfig.showAttribute(provider, 'name') == providerName:
    print 'Found JDBC provider: '+provider
    db2provider = provider

找到了 JDBC 提供程序。现在我使用此提供程序创建 DataSource:

dsAttrs = [['name', 'myDS1'], ['jndiName','jdbc/MY/DS1']]    
newDs = AdminConfig.create('DataSource', db2provider, dsAttrs)

但我得到一个例外:

WASX7015E: 异常运行命令:“newDs = AdminConfig.create('DataSource', db2provider, dsAttrs)”; 异常信息:com.ibm.websphere.management.exception.ConfigServiceException java.lang.NullPointerException: java.lang.NullPointerException

该代码有什么问题?我正在关注 IBM 文档和互联网上的示例。

我正在使用WebSphere 8.5

4

1 回答 1

1

我的猜测是你已经在 Windows 上开发了你的脚本,然后你在 UNIX/Linux 上运行它。因此,.split('\r\n')它在 Windows 上运行良好,不会拆分行。使用.splitlines()您的脚本将更加便携,您不必再为'\n'vs烦恼'\r\n'

顺便说一句:有一种更快的方法可以通过以下方式找到合适的提供商AdminConfig.getid

# getid will return only JDBCProviders with specified name
# then splitlines will return an array of matched objects
# finally [0] will get the first item
db2provider = AdminConfig.getid('/JDBCProvider:%s/' % providerName).splitlines()[0]
if db2provider:
    dsAttrs = [['name', 'myDS1'], ['jndiName','jdbc/MY/DS1']]    
    newDs = AdminConfig.create('DataSource', db2provider, dsAttrs)
else:
    print 'JDBCProvider not found'

与 WDR 库 ( http://wdr.github.io/WDR/ ) 相同的脚本:

# getid1 will return single JDBCProvider1 or fail
db2provider = getid1('/JDBCProvider:%s/' % providerName)
newDs = db2provider.create('DataSource', name = 'myDS1', jndiName = 'jdbc/MY/DS1')

甚至更好(幂等):

# getid1 will return single JDBCProvider1 or fail
db2provider = getid1('/JDBCProvider:%s/' % providerName)
ds = db2provider.assure('DataSource', {'name': 'myDS1'}, jndiName = 'jdbc/MY/DS1')

坦白:我是 WDR 的贡献者之一。

于 2013-09-30T21:30:26.870 回答