创建DataSource时wsadmin控制台中的错误(NPE)

时间:2013-09-30 13:49:48

标签: websphere jython websphere-8 wsadmin

我正在以下列方式在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

1 个答案:

答案 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贡献者之一。