svn commit: r882 - logback/trunk/logback-core/src/main/java/ch/qos/logback/core/db

Author: seb Date: Tue Nov 7 14:46:11 2006 New Revision: 882 Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/db/BindDataSourceToJNDIAction.java Log: added BindDataSourceToJNDIAction.java Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/db/BindDataSourceToJNDIAction.java ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/db/BindDataSourceToJNDIAction.java Tue Nov 7 14:46:11 2006 @@ -0,0 +1,85 @@ +/** + * Logback: the reliable, generic, fast and flexible logging framework. + * + * Copyright (C) 1999-2006, QOS.ch + * + * This library is free software, you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation. + */ + +package ch.qos.logback.core.db; + + +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.sql.DataSource; + +import org.xml.sax.Attributes; + +import ch.qos.logback.core.joran.action.Action; +import ch.qos.logback.core.joran.spi.InterpretationContext; +import ch.qos.logback.core.util.OptionHelper; +import ch.qos.logback.core.util.PropertySetter; + +/** + * + * @author Ceki Gulcu + * + */ +public class BindDataSourceToJNDIAction extends Action { + + static final String DATA_SOURCE_CLASS = "dataSourceClass"; + static final String URL = "url"; + static final String USER = "user"; + static final String PASSWORD = "password"; + + /** + * Instantiates an a data source and bind it to JNDI + * Most of the required parameters are placed in the ec.substitutionProperties + */ + public void begin( + InterpretationContext ec, String localName, Attributes attributes) { + String dsClassName = ec.getSubstitutionProperty(DATA_SOURCE_CLASS); + + if (OptionHelper.isEmpty(dsClassName)) { + addWarn("dsClassName is a required parameter"); + ec.addError("dsClassName is a required parameter"); + + return; + } + + String urlStr = ec.getSubstitutionProperty(URL); + String userStr = ec.getSubstitutionProperty(USER); + String passwordStr = ec.getSubstitutionProperty(PASSWORD); + + try { + DataSource ds = + (DataSource) OptionHelper.instantiateByClassName(dsClassName, DataSource.class); + + PropertySetter setter = new PropertySetter(ds); + + if (!OptionHelper.isEmpty(urlStr)) { + setter.setProperty("url", urlStr); + } + + if (!OptionHelper.isEmpty(userStr)) { + setter.setProperty("user", userStr); + } + + if (!OptionHelper.isEmpty(passwordStr)) { + setter.setProperty("password", passwordStr); + } + + Context ctx = new InitialContext(); + ctx.rebind("dataSource", ds); + } catch (Exception oops) { + addError( + "Could not bind datasource. Reported error follows.", oops); + ec.addError("Could not not bind datasource of type [" + dsClassName + "]."); + } + } + + public void end(InterpretationContext ec, String name) { + } +}
participants (1)
-
noreply.seb@qos.ch