使用wsadmin创建JMSProvider时重复生成资源却无异常报错
解决WebSphere ND 8.5.5.9中wsadmin重复创建JMSProvider无报错的问题
我来帮你梳理这个问题的原因和解决办法——这其实是WebSphere wsadmin工具的默认行为导致的:
为什么重复创建不会报错?
WebSphere的wsadmin里,AdminConfig.create()方法本身不会自动校验同范围下是否存在同名的JMSProvider。它的核心逻辑就是按你传入的参数生成新的配置条目,只要参数格式合法、语法没问题,就会直接创建新资源,哪怕名称和现有资源完全一致。这就是你重复执行命令后能生成重复资源却没收到异常的原因。
怎么避免重复创建?
要解决这个问题,你需要在执行创建操作前,先手动检查目标节点下是否已经存在同名的JMSProvider。下面是具体的Jython脚本步骤,你可以直接在wsadmin里运行:
先获取目标节点的配置ID(和你之前的操作一致):
node = AdminConfig.getid('/Node:TestDmgrNode/')查询该节点下所有JMSProvider,检查目标名称是否已存在:
# 获取节点下所有JMSProvider列表 existing_providers = AdminConfig.list('JMSProvider', node).splitlines() target_name = 'TestProvider1' provider_exists = False # 遍历列表,匹配名称 for provider in existing_providers: current_name = AdminConfig.showAttribute(provider, 'name') if current_name == target_name: provider_exists = True break根据检查结果决定是否创建:
只有当资源不存在时,才执行创建和保存操作:if not provider_exists: # 创建新的JMSProvider new_provider = AdminConfig.create('JMSProvider', node, [ ['name', target_name], ['description', target_name], ['classpath', '/var/tmp/test.jar'], ['externalInitialContextFactory', 'testICF'], ['externalProviderURL', 'testexternalurl'] ]) print(f"Successfully created JMSProvider: {new_provider}") AdminConfig.save() else: print(f"JMSProvider '{target_name}' already exists in node {node}, skipping creation.")
额外提醒
- WebSphere本身并没有强制同范围下JMSProvider名称唯一,所以这种前置检查是避免重复资源的关键。
- 你可以把这段逻辑整合成一个可复用的wsadmin脚本,以后执行创建操作时直接调用,减少手动操作的失误。
内容的提问来源于stack exchange,提问作者sb9
相关产品推荐
相关产品推荐

