![]() ![]() ![]() ![]() ![]() ![]() ![]() |
This appendix contains the complete code for the two Python scripts referred to in Annotation Overrides.
Note: | Customization is required before you can use these scripts. For example, you will have to set the username and password for the WebLogic Server domain you are using. |
import sys
from jarray import zeros, array
from java.lang import System
from java.lang import String
from java.util import Random
if(len(sys.argv) != 4):
print "usage: scriptPath appPath planPath"
sys.exit()
sys.path.append(sys.argv[1])
import OverrideUtils
connect('weblogic','weblogic')
print 'Connected'
appPath = sys.argv[2]
planPath = sys.argv[3]
plan = loadApplication(appPath, planPath, 'false')
print 'Got plan'
util = OverrideUtils.PlanUpdater(plan, appPath, planPath)
r = Random()
# Update a field's override value
moduleName='service/HelloService.war'
key=moduleName+'/service.HelloService/_jcxBean/value'
value='I hereby override this value to %d' % (r.nextInt())
util.applyOverride(moduleName, key, value)
# The array case
key=moduleName+'/service.HelloService/_jcxBean/arrayValue'
val1=str(r.nextInt())
val2=str(r.nextInt())
val3=str(r.nextInt())
val4=str(r.nextInt())
arrArg=array([val1,val2,val3,val4],String)
util.applyOverride(moduleName, key, arrArg)
# Update a class' override value
moduleName='OAMEar'
key=moduleName+'/controls.MyJcx/controls.MyAnnotation/value'
value2='Application scope set at %d!!' % (r.nextInt())
util.applyOverride(moduleName, key, value2)
util.flush()
progress=updateApplication('OAMEar', planPath, stageMode='STAGE', testMode='false')
f=open('override-value.txt', 'w')
f.writelines('override.value=' + value)
f.writelines('\n\n')
f.writelines('app.override.value=' + value2)
f.flush()
f.close()
import sys
class PlanUpdater:
def __init__(self, plan, appPath, planPath):
self.MANIFEST="META-INF/annotation-manifest.xml"
self.plan = plan
self.updateCount = 0
############################################################################
#
# Call this method repeatedly to override different values.
# In the end, call flush() to persist the changes
#
# There are 2 ways to construct the key here:
#
# 1. moduleName+"/"+className+"/"+annotationClassName+"/"+memberName
# 2. moduleName+"/"+className+"/"+fieldName+"/"+memberName
#
#
############################################################################
def applyOverride(self, moduleName, key, value):
print '\n---------------------------------------------------------------\n'
if self.plan == None:
print 'PlanUpdater was not initialized'
return
if moduleName == None or key == None or value == None:
print 'Invalid input parameter to overrideValue() - null parameters not allowed'
return
moduleDescriptor = self.plan.getModuleDescriptor(self.MANIFEST, moduleName)
if moduleDescriptor == None:
print 'unable to obtain moduleDescriptor for ' + moduleName
return
dConfigBean = self.plan.getDConfigBean(moduleDescriptor)
classes = dConfigBean.getAnnotatedClasses()
for clazz in classes:
className = clazz.getAnnotatedClassName()
annotations = clazz.getAnnotations()
for annotation in annotations:
annotationClassName = annotation.getAnnotationClassName()
members = annotation.getMembers()
for member in members:
memberName = member.getMemberName()
theKey = moduleName+"/"+className+"/"+annotationClassName+"/"+memberName
## FIXME: should probably only change if the values has changed
if theKey == key:
originalValue = member.getMemberValue()
currentOverrideValue = member.getOverrideValue()
overrideValue = value
print '[ Updating Key]: '+ theKey
if originalValue != None:
print '[ Original Value]: '+ originalValue
if currentOverrideValue != None:
print '[Current Override]: '+ currentOverrideValue
if overrideValue != None:
print '[ New Override]: '+ overrideValue
print '\n'
member.setOverrideValue(overrideValue)
self.updateCount += 1
return
arrayMembers = annotation.getArrayMembers()
for arrayMember in arrayMembers:
memberName = arrayMember.getMemberName()
theKey = moduleName+"/"+className+"/"+annotationClassName+"/"+memberName
if theKey == key:
print 'About to override array member %s' % (memberName)
original = arrayMember.getMemberValues()
currOvrdValue = arrayMember.getOverrideValues()
print 'There are %d items in the array' % (len(currOvrdValue))
print '[ Updating Key]: '+ theKey
if original != None and len(original) > 0:
print '[ Original Value]: '+self.arrayToString(original)
if currOvrdValue != None and len(currOvrdValue) > 0:
print '[Current Override]: '+ self.arrayToString(currOvrdValue)
if value != None and len(value) > 0:
print '[ New Override]: '+self.arrayToString(value)
print '\n'
arrayMember.setOverrideValues(value)
self.updateCount += 1
return
fields = clazz.getFields()
for field in fields:
fieldName = field.getFieldName()
annotations = field.getAnnotations()
for annotation in annotations:
annotationClassName = annotation.getAnnotationClassName()
members = annotation.getMembers()
for member in members:
memberName = member.getMemberName()
theKey = moduleName+"/"+className+"/"+fieldName+"/"+memberName
if theKey == key:
originalValue = member.getMemberValue()
currentOverrideValue = member.getOverrideValue()
overrideValue = value
print '[ Updating Key]: '+ theKey
if originalValue != None:
print '[ Original Value]: '+ originalValue
if currentOverrideValue != None:
print '[Current Override]: '+ currentOverrideValue
if overrideValue != None:
print '[ New Override]: '+ overrideValue
print '\n'
member.setOverrideValue(overrideValue)
self.updateCount += 1
return
arrayMembers = annotation.getArrayMembers()
if arrayMembers == None:
print '====> No arrayMembers found'
else:
print '====>>> got arrayMembers, size = %d' % (len(arrayMembers))
for arrayMember in arrayMembers:
memberName = arrayMember.getMemberName()
theKey = moduleName+"/"+className+"/"+fieldName+"/"+memberName
if theKey == key:
print 'About to override array member %s' % (memberName)
original = arrayMember.getMemberValues()
currOvrdValue = arrayMember.getOverrideValues()
print '[ Updating Key]: '+ theKey
if original != None and len(original) > 0:
print '[ Original Value]: '+self.arrayToString(original)
if currOvrdValue != None and len(currOvrdValue) > 0:
print '[Current Override]: '+self.arrayToString(currOvrdValue)
if value != None and len(value) > 0:
print '[ New Override]: '+self.arrayToString(value)
print '\n'
arrayMember.setOverrideValues(value)
self.updateCount += 1
return
def arrayToString(self, values):
if values == None or len(values) == 0:
return ''
else:
result = '[ '
for value in values:
result = result + value + ' '
result = result + ']'
return result
########################################################
#
# flush() - Persist the changes to file
#
#######################################################
def flush(self):
if self.updateCount > 0:
print 'Saving plan. There were %d changes in this update.' % (self.updateCount)
self.plan.save()
else:
print 'There has been no change to override values. plan not saved.'
![]() ![]() ![]() |