package org.n3r.eql.trans;
import lombok.SneakyThrows;
import org.n3r.eql.config.EqlConfig;
import org.n3r.eql.util.EqlUtils;
import org.n3r.eql.util.S;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Hashtable;
public class EqlJndiConnection extends AbstractEqlConnection {
private DataSource dataSource;
@Override @SneakyThrows
public Connection getConnection(String dbName) {
return dataSource.getConnection();
}
@Override
public void destroy() {
dataSource = null;
}
@Override
public String getDriverName() {
return EqlUtils.getDriverNameFromConnection(dataSource);
}
@Override
public String getJdbcUrl() {
return EqlUtils.getJdbcUrlFromConnection(dataSource);
}
@Override
public void initialize(EqlConfig eqlConfig) {
String jndiName = eqlConfig.getStr("jndiName");
String initial = eqlConfig.getStr("java.naming.factory.initial");
String url = eqlConfig.getStr("java.naming.provider.url");
createDataSource(jndiName, initial, url);
}
@SneakyThrows
private void createDataSource(String jndiName, String initial, String url) {
Hashtable<String, String> context = new Hashtable<String, String>();
if (S.isNotEmpty(url)) context.put("java.naming.provider.url", url);
if (S.isNotEmpty(initial))
context.put("java.naming.factory.initial", initial);
dataSource = (DataSource) new InitialContext(context).lookup(jndiName);
}
}