我正在维护尝试删除缺失的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。不幸的是,由于有人忘记在WLST中公开listPartitions方法,因此您不得不直接访问MDSmainRuntime mBean。

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))

关于python - 在python脚本中处理wlst异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28852346/

10-12 21:48