我正在以下列方式在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
答案 0 :(得分:1)
我的猜测是你在Windows上开发了脚本,然后在UNIX / Linux上运行它。因此,.split('\r\n')
在Windows上运行正常,不会分割行。使用.splitlines()
,您的脚本将更具可移植性,您无需担心'\n'
vs '\r\n'
。
BTW:通过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贡献者之一。