BLOG ARTICLE jboss5 | 1 ARTICLE FOUND

  1. 2010/01/26 DataSource parsing using groovy xml

XML 관련 핸들러를 smooks를 사용하던 중 transanslation이 없다면 groovy가 훌륭한 대안이 될 수 있어 groovy script로 변경중에 있습니다. 훨씬 사용하기도 편하고 XML 핸들링하기도 수월하여 개발시간이 상당히 단축되었습니다.

아래 예제는 JBoss에서 사용하는 datasource xml을 groovy를 이용하여 parsing하는 코드입니다. XML을 groovy코드에서 파싱하여 자바 객체로 전달합니다.

코드 파싱후 객체로 사용될 POJO 클래스 :

실제 파싱하는 클래스는 다음과 같습니다.
package jdbc

import java.util.ArrayList;

/**
 * Handle $JBOSS_SERVER_DIR/conf/bootstrap/profile.xml
 * @author jchoi
 */
class DataSourceXmlHander {
    def datasource;
    
    def DataSourceDescritor parseCommon(local, ds) {
        ds.setJndiName(local.'jndi-name'.text())
        ds.setConnectionUrl(local.'connection-url'.text())
        ds.setDriverClass(local.'driver-class'.text())
        ds.setUserName(local.'user-name'.text())
        ds.setPassword(local.'password'.text())
        ds.setMinPoolSize(local.'min-pool-size'.text())
        ds.setMaxPoolSize(local.'max-pool-size'.text())
        ds.setBlockingTimeoutMillis(local.'blocking-timeout-millis'.text())
        ds.setIdleTimeoutMinutes(local.'idle-timeout-minutes'.text())
        ds.setValidConnectionCheckerClassName(local.'valid-connection-checker-class-name'.text())
        ds.setPreparedStatementCacheSize(local.'prepared-statement-cache-size'.text())
        ds.setSharePreparedStatement(local.'share-prepared-statement'.text())
        ds.setExceptionSorterClassName(local.'exception-sorter-class-name'.text())
        ds.setNewConnectionSql(local.'new-connection-sql'.text())
        ds.setBackgroundValidation(local.'background-validation'.text())
        ds.setBackgroundValidationMinutes(local.'background-validation-minutes'.text())
        ds.setUseJavaContext(local.'use-java-context'.text())
        ds.setQueryTimeout(local.'query-timeout'.text())
        ds.setTypeMapping(local.'metadata'.'type-mapping'.text())
        return ds
    }
    
    def ArrayList<DataSourceDescritor> getDataSourceDescriptor(path) {
        println " Your web.xml path is " + path;
        def dsxml = new XmlSlurper().parse(path)
        def localtx = dsxml.'local-tx-datasource'
        ArrayList<DataSourceDescritor> descriptors = new ArrayList<DataSourceDescritor>()
        localtx.each { local ->
            DataSourceDescritor ds = new DataSourceDescritor();
            ds = parseCommon(local, ds)
            descriptors.add(ds)
        }
        
        def xsds = dsxml.'xa-datasource'
        xsds.each { xml ->
            DataSourceDescritor xa = new DataSourceDescritor();
            xa = parseCommon(xml, xa)
            xa.setIsSameRMOverrideValue(xml.'isSameRM-override-value'.text())
            xa.setXaDatasourceClass(xml.'xa-datasource-class'.text())
            ArrayList<XADataSourceProperty> props = new ArrayList<XADataSourceProperty>();
            xml.'xa-datasource-property'.each { data ->
                XADataSourceProperty prop = new XADataSourceProperty();
                prop.setName(data.'@name'.text())
                prop.setValue(data.text())
                println prop
                props.add(prop)
            }
            xa.setXaDatasourceProperty(props)
            
            descriptors.add(xa)
        }
        return descriptors;
    }
    
    public static void main(args) {
        DataSourceXmlHander handler = new DataSourceXmlHander()
        ArrayList<DataSourceDescritor> result = handler.getDataSourceDescriptor("/home/jchoi/Desktop/mysql-ds.xml");
        ArrayList<DataSourceDescritor> result2 = handler.getDataSourceDescriptor("/opt/jboss-as/jboss-5.1.0.GA/docs/examples/jca/oracle-xa-ds.xml")
        println result
        println result2
    }
}



크리에이티브 커먼즈 라이센스
Creative Commons License
2010/01/26 14:54 2010/01/26 14:54