/** * 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.getProperty(DATA_SOURCE_CLASS); if (OptionHelper.isEmpty(dsClassName)) { addWarn("dsClassName is a required parameter"); ec.addError("dsClassName is a required parameter"); return; } String urlStr = ec.getProperty(URL); String userStr = ec.getProperty(USER); String passwordStr = ec.getProperty(PASSWORD); try { DataSource ds = (DataSource) OptionHelper.instantiateByClassName(dsClassName, DataSource.class, context); PropertySetter setter = new PropertySetter(ds); setter.setContext(context); 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 + "]."); } }