org.h2.jdbcx.JdbcDataSourceFactory Maven / Gradle / Ivy
/*
* Copyright 2004-2022 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (https://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.jdbcx;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.Reference;
import javax.naming.spi.ObjectFactory;
import org.h2.engine.Constants;
import org.h2.engine.SysProperties;
import org.h2.message.Trace;
import org.h2.message.TraceSystem;
/**
* This class is used to create new DataSource objects.
* An application should not use this class directly.
*/
public final class JdbcDataSourceFactory implements ObjectFactory {
private static final TraceSystem traceSystem;
private final Trace trace;
static {
traceSystem = new TraceSystem(SysProperties.CLIENT_TRACE_DIRECTORY + "h2datasource"
+ Constants.SUFFIX_TRACE_FILE);
traceSystem.setLevelFile(SysProperties.DATASOURCE_TRACE_LEVEL);
}
/**
* The public constructor to create new factory objects.
*/
public JdbcDataSourceFactory() {
trace = traceSystem.getTrace(Trace.JDBCX);
}
/**
* Creates a new object using the specified location or reference
* information.
*
* @param obj the reference (this factory only supports objects of type
* javax.naming.Reference)
* @param name unused
* @param nameCtx unused
* @param environment unused
* @return the new JdbcDataSource, or null if the reference class name is
* not JdbcDataSource.
*/
@Override
public synchronized Object getObjectInstance(Object obj, Name name,
Context nameCtx, Hashtable, ?> environment) {
if (trace.isDebugEnabled()) {
trace.debug("getObjectInstance obj={0} name={1} " +
"nameCtx={2} environment={3}", obj, name, nameCtx, environment);
}
if (obj instanceof Reference) {
Reference ref = (Reference) obj;
if (ref.getClassName().equals(JdbcDataSource.class.getName())) {
JdbcDataSource dataSource = new JdbcDataSource();
dataSource.setURL((String) ref.get("url").getContent());
dataSource.setUser((String) ref.get("user").getContent());
dataSource.setPassword((String) ref.get("password").getContent());
dataSource.setDescription((String) ref.get("description").getContent());
String s = (String) ref.get("loginTimeout").getContent();
dataSource.setLoginTimeout(Integer.parseInt(s));
return dataSource;
}
}
return null;
}
/**
* INTERNAL
* @return TraceSystem
*/
public static TraceSystem getTraceSystem() {
return traceSystem;
}
Trace getTrace() {
return trace;
}
}