/** * 构建DataSource,子类可覆盖. 如果存在Druid,则使用之,否则使用内置的SimpleDataSource * * @param props 配置信息 * @return 目标DataSource */ protected DataSource buildDataSource(Properties props) { if (druidFactoryClass != null) { log.debug("build DruidDataSource by props"); Mirror<?> mirror = Mirror.me(druidFactoryClass); DataSource ds = (DataSource) mirror.invoke(null, "createDataSource", props); if (!props.containsKey("maxWait")) Mirror.me(ds).setValue(ds, "maxWait", 15 * 1000); return ds; } log.debug("build SimpleteDataSource by props"); return SimpleDataSource.createDataSource(props); }
public Object run(List<Object> param) { Object obj = fetchVar(); Mirror<?> me = null; if (obj == null) throw new NullPointerException(); if (obj instanceof Class) { // 也许是个静态方法 me = Mirror.me(obj); try { return me.invoke(obj, right.toString(), param.toArray()); } catch (InvokingException e) { throw e; } catch (Throwable e) { if (Lang.unwrapThrow(e) instanceof NoSuchMethodException) { me = Mirror.me(obj.getClass().getClass()); return me.invoke(obj, right.toString(), param.toArray()); } throw Lang.wrapThrow(e); } } else { me = Mirror.me(obj); return me.invoke(obj, right.toString(), param.toArray()); } }