处理 python 脚本中的 wlst 异常
Handling wlst exception in python script
我正在维护一个在尝试删除丢失的 MDS 分区时中断的构建。
有东西要去掉就好了。
我不太熟悉这个主题,我也想
- 删除前检查分区是否存在
- 处理错误并继续 maven 生命周期
有问题的pom部分是
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>delete-MDS</id>
<phase>pre-integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${oracle.wlst}</executable>
<arguments>
<argument>${predeploy.script.deletemds}</argument>
<argument>weblogic</argument>
<argument>${adminServerPassword}</argument>
<argument>${adminServerUrl}</argument>
<argument>${mds.repository}</argument>
<argument>${mds.partition}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
${predeploy.script.deletemds}内容为
print '\nStarting deleteMDSOnDomain.py'
#skipped mapping input to variables here
try:
connect(username,password,url)
print "Deleting MDS configuration"
#fails if partition already removed
deleteMetadataPartition( repository=mdsRepository, partition=mdsPartition)
except Exception, e:
print e
print "Error while trying to delete MDS configuration"
dumpStack()
#raise
print 'Finished deleteMDSOnDomain.py\n'
当运行我得到
...
[INFO] Deleting MDS configuration
[INFO] Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root.
[INFO] For more help, use help(domainRuntime)
[INFO]
[INFO]
[INFO] Problem invoking WLST - Traceback (innermost last):
[INFO] File "C:\Dev\trunk\<App>\<Project>\scripts\deleteMDSOnDomain.py", line 24, in ?
[INFO] File "C:\Dev\Oracle\MIDDLE~1\ORACLE~1\common\wlst\mdsWLSTCommands.py", line 471, in deleteMetadataPartition
[INFO] File "C:\Dev\Oracle\MIDDLE~1\ORACLE~1\common\wlst\mdsWLSTCommands.py", line 836, in executeDomainRuntimeMBeanOperation
[INFO] File "C:\Dev\Oracle\MIDDLE~1\ORACLE~1\common\wlst\mdsWLSTCommands.py", line 1097, in saveStackAndRaiseException
[INFO] WLSTException: MDS-00555: The partitionName <App> is invalid.
[INFO] ORA-01403: no data found
[INFO] ORA-06512: at "<env>_MDS.MDS_INTERNAL_SHREDDED", line 580
[INFO] ORA-06512: at line 1
[INFO] MDS-91009: Operation "deleteMetadataPartition" failure. Use dumpStack() to view the full stacktrace.
[INFO]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Result of cmd.exe /X /C "C:\Dev\Oracle\Middleware\oracle_common\common\bin\wlst.cmd scripts/deleteMDSOnDomain.py weblogic <pass> <url> mds-CustomPortalDS <App>" execution is: '1'.
[INFO] ------------------------------------------------------------------------
似乎第一个结果“1”被传播到 Maven,例如我的 py catch 没有完全处理这个问题 - 我可以在那里手动将它更改为“0,好的”吗?
编辑:打字错误
万事俱备。该错误是由另一个尝试接下来取消部署应用程序的插件引发的。注意到后才知道
[INFO] [Deployer:149001]No application named '<app>' exists for operation undeploy.
我可以发誓它以前不存在......无论如何我在下面的答案中也得到了一些代码来检查分区是否存在。
我更像是一个 Look Before You Leap 类型的程序员,所以下面是我在删除 MDS 分区时使用的一些 WLST,以首先检查它们是否存在。不幸的是,您不得不求助于直接访问 MDSDomainRuntime mBean,因为有人忘记在 WLST 中公开 listPartitions 方法。
from org.python.modules import jarray
from javax.management import ObjectName, Attribute
#skipped mapping input to variables here
connect(username, password, url)
domainRuntime()
mdsName = ObjectName('oracle.mds.lcm:name=MDSDomainRuntime,type=MDSDomainRuntime')
beans = mbs.queryMBeans(mdsName, None)
if (beans.size() == 0):
# This _should_ be impossible
raise Exception("Could not find mbean '%s' in the current tree '%s'." % (mdsName, pwd()))
beanName = beans.iterator().next().getObjectName()
params = jarray.array([mdsRepository], java.lang.Object)
signature = ['java.lang.String']
partitions = mbs.invoke(beanName, "listPartitions", params, signature)
if (mdsPartition not in partitions):
print("Partition '%s' does not exist in repository '%s'." % (mdsPartition, mdsRepository))
else:
params = jarray.array([mdsRepository, mdsPartition], java.lang.Object)
signature = jarray.array(['java.lang.String','java.lang.String'], java.lang.String)
mbs.invoke(beanName, 'deleteMetadataPartition', params, signature)
print("Partition '%s' deleted from repository '%s'." % (mdsPartition, mdsRepository))
我正在维护一个在尝试删除丢失的 MDS 分区时中断的构建。
有东西要去掉就好了。
我不太熟悉这个主题,我也想
- 删除前检查分区是否存在
- 处理错误并继续 maven 生命周期
有问题的pom部分是
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>delete-MDS</id>
<phase>pre-integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${oracle.wlst}</executable>
<arguments>
<argument>${predeploy.script.deletemds}</argument>
<argument>weblogic</argument>
<argument>${adminServerPassword}</argument>
<argument>${adminServerUrl}</argument>
<argument>${mds.repository}</argument>
<argument>${mds.partition}</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
${predeploy.script.deletemds}内容为
print '\nStarting deleteMDSOnDomain.py'
#skipped mapping input to variables here
try:
connect(username,password,url)
print "Deleting MDS configuration"
#fails if partition already removed
deleteMetadataPartition( repository=mdsRepository, partition=mdsPartition)
except Exception, e:
print e
print "Error while trying to delete MDS configuration"
dumpStack()
#raise
print 'Finished deleteMDSOnDomain.py\n'
当运行我得到
...
[INFO] Deleting MDS configuration
[INFO] Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root.
[INFO] For more help, use help(domainRuntime)
[INFO]
[INFO]
[INFO] Problem invoking WLST - Traceback (innermost last):
[INFO] File "C:\Dev\trunk\<App>\<Project>\scripts\deleteMDSOnDomain.py", line 24, in ?
[INFO] File "C:\Dev\Oracle\MIDDLE~1\ORACLE~1\common\wlst\mdsWLSTCommands.py", line 471, in deleteMetadataPartition
[INFO] File "C:\Dev\Oracle\MIDDLE~1\ORACLE~1\common\wlst\mdsWLSTCommands.py", line 836, in executeDomainRuntimeMBeanOperation
[INFO] File "C:\Dev\Oracle\MIDDLE~1\ORACLE~1\common\wlst\mdsWLSTCommands.py", line 1097, in saveStackAndRaiseException
[INFO] WLSTException: MDS-00555: The partitionName <App> is invalid.
[INFO] ORA-01403: no data found
[INFO] ORA-06512: at "<env>_MDS.MDS_INTERNAL_SHREDDED", line 580
[INFO] ORA-06512: at line 1
[INFO] MDS-91009: Operation "deleteMetadataPartition" failure. Use dumpStack() to view the full stacktrace.
[INFO]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Result of cmd.exe /X /C "C:\Dev\Oracle\Middleware\oracle_common\common\bin\wlst.cmd scripts/deleteMDSOnDomain.py weblogic <pass> <url> mds-CustomPortalDS <App>" execution is: '1'.
[INFO] ------------------------------------------------------------------------
似乎第一个结果“1”被传播到 Maven,例如我的 py catch 没有完全处理这个问题 - 我可以在那里手动将它更改为“0,好的”吗?
编辑:打字错误
万事俱备。该错误是由另一个尝试接下来取消部署应用程序的插件引发的。注意到后才知道
[INFO] [Deployer:149001]No application named '<app>' exists for operation undeploy.
我可以发誓它以前不存在......无论如何我在下面的答案中也得到了一些代码来检查分区是否存在。
我更像是一个 Look Before You Leap 类型的程序员,所以下面是我在删除 MDS 分区时使用的一些 WLST,以首先检查它们是否存在。不幸的是,您不得不求助于直接访问 MDSDomainRuntime mBean,因为有人忘记在 WLST 中公开 listPartitions 方法。
from org.python.modules import jarray
from javax.management import ObjectName, Attribute
#skipped mapping input to variables here
connect(username, password, url)
domainRuntime()
mdsName = ObjectName('oracle.mds.lcm:name=MDSDomainRuntime,type=MDSDomainRuntime')
beans = mbs.queryMBeans(mdsName, None)
if (beans.size() == 0):
# This _should_ be impossible
raise Exception("Could not find mbean '%s' in the current tree '%s'." % (mdsName, pwd()))
beanName = beans.iterator().next().getObjectName()
params = jarray.array([mdsRepository], java.lang.Object)
signature = ['java.lang.String']
partitions = mbs.invoke(beanName, "listPartitions", params, signature)
if (mdsPartition not in partitions):
print("Partition '%s' does not exist in repository '%s'." % (mdsPartition, mdsRepository))
else:
params = jarray.array([mdsRepository, mdsPartition], java.lang.Object)
signature = jarray.array(['java.lang.String','java.lang.String'], java.lang.String)
mbs.invoke(beanName, 'deleteMetadataPartition', params, signature)
print("Partition '%s' deleted from repository '%s'." % (mdsPartition, mdsRepository))