Saturday, September 19, 2009

Spring Bean locator

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A python file to read applicationcontext.xml and generate Spring bean locator class. this will remove the need to lookup bean using string constant. This class assumes that you have a SpringUtil class that will provide you the application context. A sample class that will be generated looks like


package xxx.util;

import xxx.util.SpringUtils;
public class SpringBeanLocator {

public static xxx.cache.JCache getJcache() {
return (xxx.cache.JCache) SpringUtils.getApplicationContext().getBean("jcache");
}

public static xxx.ldap.LDAPHelper getLdapHelper() {
return (xxx.ldap.LDAPHelper) SpringUtils.getApplicationContext().getBean("ldapHelper");
}
......................
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
import sys
try:
from xml.etree import ElementTree as ET
except ImportError:
from elementtree import ElementTree as ET

CLASS_TEMPLATE ="""
package xxx.util;

import xxx.SpringUtils;
public class SpringBeanLocator {
%s
}
"""
METHOD_TEMPLATE ="""
public static %(className)s get%(methodName)s() {
return (%(className)s) SpringUtils.getApplicationContext().getBean("%(beanId)s");
}
"""
def main(contextPath, targetDir):
f = open(contextPath, 'r')
contextXml = f.read();
f.close()
root = ET.fromstring(contextXml)
methods = []
for bean in root.findall('bean'):
beanId = bean.get('id')
if beanId == None:
beanId = bean.get('name')
className = bean.get('class')
methodName = beanId[0].upper() + beanId[1:]
method = METHOD_TEMPLATE % ({'className':className, 'methodName':methodName, 'beanId':beanId})
methods.append(method)
classStr = CLASS_TEMPLATE % ("".join(methods))
f = open(targetDir + '/SpringBeanLocator.java', 'w')
f.write(classStr)
f.close()

def init():
main(sys.argv[1], sys.argv[2])

if __name__ == '__main__':
init()

Subeclipse ignore whitespace compare

Subeclipse uses eclipse compare functionality.
Go to Windows->Preferences->General->Compare and check the ignore whitespace property

Thursday, September 17, 2009

TimeStamp your ant build

Download your ant contrib from http://ant-contrib.sourceforge.net and add it to your ANT_HOME\lib directory and run

ant -listener net.sf.antcontrib.perf.AntPerformanceListener deploy

This will print a summary report at the end like

precompile-jsps:

BUILD SUCCESSFUL
Total time: 6 minutes 23 seconds

Statistics:
-------------- Target Results ---------------------
ui._applet_jar_deploy: 0.000 sec
server.replaceLdapTokens: 0.001 sec
ui.replace_applet_version_tags: 0.008 sec
server.baseDeploy.common: 0.018 sec
server.baseDeploy.common: 0.019 sec
server.baseDeploy.common: 0.023 sec
server.baseDeploy.common: 0.052 sec
ui.baseDeploy.common: 0.062 sec
server.baseDeploy: 0.102 sec
server.baseDeploy: 0.105 sec
server.baseDeploy: 0.108 sec
server.baseDeploy: 0.149 sec
ui.svnversion: 0.160 sec