![]() ![]() ![]() ![]() ![]() ![]() |
WARNING: | This document is deprecated as of version 10.0 of WebLogic Server. This deprecation warning applies only to this documentation, and not to the underlying functionality it describes nor to the open-source Beehive project. Users who wish to develop and deploy Beehive applications should do so using Workshop for WebLogic, which offers support for all aspects of Beehive technology. Current documentation for integrating Beehive and WebLogic Server can be found at Workshop for WebLogic Platform User's Guide. |
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.'
![]() ![]() ![]() |