forked from Coded/SIPRP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
412 lines
13 KiB
412 lines
13 KiB
/*
|
|
* To change this template, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
package db.providers;
|
|
|
|
import com.evolute.entity.ProviderInterface;
|
|
import com.evolute.entity.ProviderRegistry;
|
|
import com.evolute.entity.evo.EvoDataException;
|
|
import com.evolute.entity.evo.EvoDataObject;
|
|
import com.evolute.entity.evo.EvoDataProvider;
|
|
import com.evolute.entity.evo.EvoDataProviderFactory;
|
|
import com.evolute.entity.utils.ConnectionIdentity;
|
|
import com.evolute.utils.Singleton;
|
|
import com.evolute.utils.db.DBException;
|
|
import com.evolute.utils.db.DBManager;
|
|
import com.evolute.utils.db.Executer;
|
|
import com.evolute.utils.db.JDBCManager;
|
|
import com.evolute.utils.error.ErrorLogger;
|
|
import com.evolute.utils.jdbc.DBStatementExecuter;
|
|
import com.evolute.utils.jdbc.StatementExecuterFactory;
|
|
import com.evolute.utils.sql.SQLQuery;
|
|
import com.evolute.utils.strings.UnicodeChecker;
|
|
import db.DBConstants;
|
|
import db.DBPropertiesLoader;
|
|
import java.sql.Connection;
|
|
import java.sql.DriverManager;
|
|
import java.sql.ResultSet;
|
|
import java.sql.Statement;
|
|
import javax.faces.context.ExternalContext;
|
|
import javax.faces.context.FacesContext;
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
/**
|
|
*
|
|
* @author dneves
|
|
*/
|
|
public class EvoBaseProvider
|
|
{
|
|
private static EvoBaseProvider INSTANCE = null;
|
|
|
|
private ProviderInterface< EvoDataObject< ? >, EvoDataException > providerInterface;
|
|
private DBManager dbManager;
|
|
|
|
private ProviderInterface< EvoDataObject< ? >, EvoDataException > localProviderInterface;
|
|
private DBManager localDBManager;
|
|
|
|
private String url;
|
|
private String username;
|
|
private String password;
|
|
|
|
private String url_local;
|
|
private String username_local;
|
|
private String password_local;
|
|
|
|
|
|
|
|
private EvoBaseProvider() throws DBException
|
|
{
|
|
init();
|
|
}
|
|
|
|
public static synchronized EvoBaseProvider getInstance() throws DBException
|
|
{
|
|
if ( INSTANCE == null )
|
|
{
|
|
INSTANCE = new EvoBaseProvider();
|
|
}
|
|
return INSTANCE;
|
|
}
|
|
|
|
private void init() throws DBException
|
|
{
|
|
// System.out.println( "EvoBaseProvider . init() : " );
|
|
|
|
String server = DBPropertiesLoader.getInstance().findProperty( DBConstants.SERVER_SIPRP );
|
|
int port = DBPropertiesLoader.getInstance().findProperty( DBConstants.PORT_SIPRP, -1 );
|
|
String dbname = DBPropertiesLoader.getInstance().findProperty( DBConstants.DATABASE_SIPRP );
|
|
username = DBPropertiesLoader.getInstance().findProperty( DBConstants.USERNAME_SIPRP );
|
|
password = DBPropertiesLoader.getInstance().findProperty( DBConstants.PASSWORD_SIPRP );
|
|
|
|
// System.out.println( "\t" + server + " : " + port + " : " + dbname + " : " + username + " : " + password );
|
|
|
|
String server_local = DBPropertiesLoader.getInstance().findProperty( DBConstants.SERVER_SIPRP_LOCAL );
|
|
int port_local = DBPropertiesLoader.getInstance().findProperty( DBConstants.PORT_SIPRP_LOCAL, -1 );
|
|
String dbname_local = DBPropertiesLoader.getInstance().findProperty( DBConstants.DATABASE_SIPRP_LOCAL );
|
|
username_local = DBPropertiesLoader.getInstance().findProperty( DBConstants.USERNAME_SIPRP_LOCAL );
|
|
password_local = DBPropertiesLoader.getInstance().findProperty( DBConstants.PASSWORD_SIPRP_LOCAL );
|
|
|
|
// System.out.println( "\t" + server_local + " : " + port_local + " : " + dbname_local + " : " + username_local + " : " + password_local );
|
|
|
|
init( DBConstants.DB.SIPRP, server, port, dbname, username, password );
|
|
init( DBConstants.DB.SIPRP_LOCAL, server_local, port_local, dbname_local, username_local, password_local );
|
|
}
|
|
|
|
private void init( DBConstants.DB db, String dbServer, Integer dbPort, String dbName, String dbUsername, String dbPassword )
|
|
throws DBException
|
|
{
|
|
String dbUrl = "jdbc:postgresql://" + dbServer + ":" + dbPort + "/" + dbName + "?prepareThreshold=2";
|
|
if ( DBConstants.DB.SIPRP.equals( db ) )
|
|
{
|
|
Singleton.setInstance( DBConstants.CONNECTION_URL, dbUrl );
|
|
url = dbUrl;
|
|
}
|
|
else if ( DBConstants.DB.SIPRP_LOCAL.equals( db ) )
|
|
{
|
|
Singleton.setInstance( DBConstants.LOCAL_CONNECTION_URL, dbUrl );
|
|
url_local = dbUrl;
|
|
}
|
|
|
|
createDBManager( db, dbUsername, dbPassword );
|
|
initProviderConnection( db, dbUsername, dbPassword );
|
|
}
|
|
|
|
private void createDBManager( DBConstants.DB db, String username, String password )
|
|
throws DBException
|
|
{
|
|
if ( DBConstants.DB.SIPRP.equals( db ) )
|
|
{
|
|
if( dbManager != null )
|
|
{
|
|
dbManager.close();
|
|
}
|
|
String dbUrl = ( String ) Singleton.getInstance( DBConstants.CONNECTION_URL );
|
|
DBManager manager = new JDBCManager( dbUrl, username, password , 14, 7, 7, new SQLQuery[] { } );
|
|
StatementExecuterFactory.initialize( new DBStatementExecuter( manager.getSharedExecuter( EvoBaseProvider.class ) ) );
|
|
UnicodeChecker.setUseDoubleSlash( true );
|
|
// Insert.setDefaultKeyRetriever( PostgresqlAutoKeyRetriever.RETRIEVER );
|
|
dbManager = manager;
|
|
// Singleton.setInstance( Singleton.DEFAULT_DBMANAGER, dbManager );
|
|
// System.out.println( "\nDBManager : " + dbManager );
|
|
}
|
|
else if ( DBConstants.DB.SIPRP_LOCAL.equals( db ) )
|
|
{
|
|
if( localDBManager != null )
|
|
{
|
|
localDBManager.close();
|
|
}
|
|
String dbUrl = ( String ) Singleton.getInstance( DBConstants.LOCAL_CONNECTION_URL );
|
|
DBManager manager = new JDBCManager( dbUrl, username, password , 14, 7, 7, new SQLQuery[] { } );
|
|
StatementExecuterFactory.initialize( new DBStatementExecuter( manager.getSharedExecuter( EvoBaseProvider.class ) ) );
|
|
UnicodeChecker.setUseDoubleSlash( true );
|
|
// Insert.setDefaultKeyRetriever( PostgresqlAutoKeyRetriever.RETRIEVER );
|
|
localDBManager = manager;
|
|
Singleton.setInstance( Singleton.DEFAULT_DBMANAGER, localDBManager );
|
|
// System.out.println( "\nLocalDBManager : " + localDBManager );
|
|
}
|
|
}
|
|
|
|
private void initProviderConnection( DBConstants.DB db, String username, String password )
|
|
{
|
|
if ( DBConstants.DB.SIPRP.equals( db ) )
|
|
{
|
|
String dbUrl = ( String ) Singleton.getInstance( DBConstants.CONNECTION_URL );
|
|
providerInterface = createInstance( db, dbUrl, username, password );
|
|
}
|
|
else if ( DBConstants.DB.SIPRP_LOCAL.equals( db ) )
|
|
{
|
|
String dbUrl = ( String ) Singleton.getInstance( DBConstants.LOCAL_CONNECTION_URL );
|
|
localProviderInterface = createInstance( db, dbUrl, username, password );
|
|
}
|
|
}
|
|
|
|
private static ProviderInterface< EvoDataObject< ? >, EvoDataException > createInstance( DBConstants.DB db, String url, String user, String password )
|
|
{
|
|
ProviderRegistry.registerDefaultProviderFactory( new EvoDataProviderFactory() );
|
|
ConnectionIdentity conn = new ConnectionIdentity( url, user );
|
|
ProviderRegistry.registerDefaultConnection( conn );
|
|
ProviderInterface< EvoDataObject< ? >, EvoDataException > provider =
|
|
( ProviderInterface< EvoDataObject< ? >, EvoDataException > ) ProviderRegistry.getDefaultProvider( conn );
|
|
( ( EvoDataProvider ) provider ).setIsUsingCache( Boolean.FALSE );
|
|
if ( DBConstants.DB.SIPRP.equals( db ) )
|
|
{
|
|
Singleton.setInstance( DBConstants.DEFAULT_PROVIDER, provider );
|
|
}
|
|
else if ( DBConstants.DB.SIPRP_LOCAL.equals( db ) )
|
|
{
|
|
Singleton.setInstance( DBConstants.LOCAL_PROVIDER, provider );
|
|
Singleton.setInstance( Singleton.DEFAULT_EVO_DATA_PROVIDER, provider );
|
|
Singleton.setInstance( Singleton.DEFAULT_OBJECT_PROVIDER, provider );
|
|
}
|
|
conn.setPassword( password );
|
|
return provider;
|
|
}
|
|
|
|
public ProviderInterface< EvoDataObject< ? >, EvoDataException > getProvider()
|
|
{
|
|
return getProvider( DBConstants.DB.SIPRP );
|
|
}
|
|
|
|
public ProviderInterface< EvoDataObject< ? >, EvoDataException > getProvider( DBConstants.DB db )
|
|
{
|
|
ProviderInterface< EvoDataObject< ? >, EvoDataException > provider = null;
|
|
|
|
if ( DBConstants.DB.SIPRP.equals( db ) )
|
|
{
|
|
provider = providerInterface;
|
|
}
|
|
else if ( DBConstants.DB.SIPRP_LOCAL.equals( db ) )
|
|
{
|
|
provider = localProviderInterface;
|
|
}
|
|
|
|
return provider;
|
|
}
|
|
|
|
public DBManager getDbManager()
|
|
{
|
|
return getDbManager( DBConstants.DB.SIPRP );
|
|
}
|
|
|
|
public DBManager getDbManager( DBConstants.DB db )
|
|
{
|
|
DBManager manager = null;
|
|
if ( DBConstants.DB.SIPRP.equals( db ) )
|
|
{
|
|
manager = dbManager;
|
|
}
|
|
else if ( DBConstants.DB.SIPRP_LOCAL.equals( db ) )
|
|
{
|
|
manager = localDBManager;
|
|
}
|
|
return manager;
|
|
}
|
|
|
|
public Executer getExecuter() throws DBException
|
|
{
|
|
return getExecuter( this );
|
|
}
|
|
|
|
private Executer getExecuter( Object clazz ) throws DBException
|
|
{
|
|
if ( getDbManager() == null )
|
|
{
|
|
init();
|
|
}
|
|
|
|
// DBManager dbm = ( DBManager ) Singleton.getInstance( DBConstants.DEFAULT_DBMANAGER );
|
|
// return dbm.getSharedExecuter( this );
|
|
|
|
DBManager dbm = getDbManager( DBConstants.DB.SIPRP );
|
|
if ( dbm != null )
|
|
{
|
|
return dbm.getSharedExecuter( this );
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public Executer getLocalExecuter() throws DBException
|
|
{
|
|
return getLocalExecuter( this );
|
|
}
|
|
|
|
private Executer getLocalExecuter( Object clazz ) throws DBException
|
|
{
|
|
if ( getDbManager( DBConstants.DB.SIPRP_LOCAL ) == null )
|
|
{
|
|
init();
|
|
}
|
|
// DBManager dbm = ( DBManager ) Singleton.getInstance( DBConstants.LOCAL_DBMANAGER );
|
|
// return dbm.getSharedExecuter( this );
|
|
|
|
DBManager dbm = getDbManager( DBConstants.DB.SIPRP_LOCAL );
|
|
if ( dbm != null )
|
|
{
|
|
return dbm.getSharedExecuter( this );
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Deprecated
|
|
public Statement createStatement()
|
|
{
|
|
String connectionURL = ( String ) Singleton.getInstance( DBConstants.CONNECTION_URL );
|
|
String username = DBPropertiesLoader.getInstance().findProperty( DBConstants.USERNAME_SIPRP );
|
|
String password = DBPropertiesLoader.getInstance().findProperty( DBConstants.PASSWORD_SIPRP );
|
|
|
|
return getStatement( DBConstants.DB.SIPRP, connectionURL, username, password );
|
|
}
|
|
|
|
@Deprecated
|
|
public Statement createLocalStatement()
|
|
{
|
|
String connectionURL = ( String ) Singleton.getInstance( DBConstants.LOCAL_CONNECTION_URL );
|
|
String username = DBPropertiesLoader.getInstance().findProperty( DBConstants.USERNAME_SIPRP_LOCAL );
|
|
String password = DBPropertiesLoader.getInstance().findProperty( DBConstants.PASSWORD_SIPRP_LOCAL );
|
|
|
|
return getStatement( DBConstants.DB.SIPRP_LOCAL, connectionURL, username, password );
|
|
}
|
|
|
|
private Statement getStatement( DBConstants.DB db, String connectionURL, String username, String password )
|
|
{
|
|
Statement stm = null;
|
|
try
|
|
{
|
|
Connection connection = getConnection( db, connectionURL, username, password );
|
|
if ( connection != null )
|
|
{
|
|
stm = connection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY );
|
|
}
|
|
}
|
|
catch ( Exception e )
|
|
{
|
|
ErrorLogger.logException( e );
|
|
}
|
|
return stm;
|
|
}
|
|
|
|
private Connection getConnection( DBConstants.DB db, String connectionURL, String username, String password ) throws Exception
|
|
{
|
|
Connection connection = null;
|
|
// System.out.println( "\nEvoBaseProvider . getConnection( " + connectionURL + ", " + username + " ) : " );
|
|
|
|
FacesContext fc = FacesContext.getCurrentInstance();
|
|
// System.out.println( "\tFacesContext : " + fc );
|
|
if ( fc != null )
|
|
{
|
|
|
|
ExternalContext ec = fc.getExternalContext();
|
|
// System.out.println( "\tExternalContext : " + ec );
|
|
if ( ec != null )
|
|
{
|
|
HttpSession session = ( HttpSession ) ec.getSession( false );
|
|
// System.out.println( "\tSession : " + session );
|
|
|
|
if ( session != null )
|
|
{
|
|
if ( DBConstants.DB.SIPRP.equals( db ) )
|
|
{
|
|
connection = ( Connection ) session.getAttribute( DBConstants.SESSION_CONNECTION );
|
|
if ( connection == null )
|
|
{
|
|
// System.out.println( "\n-> Creating new SIPRP connection ..." );
|
|
Class.forName( "org.postgresql.Driver" ).newInstance();
|
|
connection = DriverManager.getConnection( connectionURL, username, password );
|
|
session.setAttribute( DBConstants.SESSION_CONNECTION, connection );
|
|
}
|
|
}
|
|
else if ( DBConstants.DB.SIPRP_LOCAL.equals( db ) )
|
|
{
|
|
connection = ( Connection ) session.getAttribute( DBConstants.SESSION_CONNECTION_LOCAL );
|
|
if ( connection == null )
|
|
{
|
|
// System.out.println( "\n-> Creating new SIPRP_LOCAL connection ..." );
|
|
Class.forName( "org.postgresql.Driver" ).newInstance();
|
|
connection = DriverManager.getConnection( connectionURL, username, password );
|
|
session.setAttribute( DBConstants.SESSION_CONNECTION_LOCAL, connection );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( connection == null )
|
|
{
|
|
connection = ( Connection ) Singleton.getInstance( "CONNECTION_OBJECT" );
|
|
if ( connection == null )
|
|
{
|
|
// System.out.println( "\nEvoBaseProvider . getConnection() : session is null !" );
|
|
|
|
if ( DBConstants.DB.SIPRP.equals( db ) )
|
|
{
|
|
// System.out.println( "\t-> Creating new SIPRP connection ..." );
|
|
Class.forName( "org.postgresql.Driver" ).newInstance();
|
|
connection = DriverManager.getConnection( connectionURL, username, password );
|
|
}
|
|
else if ( DBConstants.DB.SIPRP_LOCAL.equals( db ) )
|
|
{
|
|
// System.out.println( "\t-> Creating new SIPRP_LOCAL connection ..." );
|
|
Class.forName( "org.postgresql.Driver" ).newInstance();
|
|
connection = DriverManager.getConnection( connectionURL, username, password );
|
|
}
|
|
Singleton.setInstance( "CONNECTION_OBJECT", connection );
|
|
}
|
|
}
|
|
|
|
// System.out.println( "<-- getConnection() : " + connection );
|
|
return connection;
|
|
}
|
|
|
|
public String getUrl()
|
|
{
|
|
return url;
|
|
}
|
|
|
|
public String getUsername()
|
|
{
|
|
return username;
|
|
}
|
|
|
|
public String getPassword()
|
|
{
|
|
return password;
|
|
}
|
|
|
|
public String getUrl_local()
|
|
{
|
|
return url_local;
|
|
}
|
|
|
|
public String getUsername_local()
|
|
{
|
|
return username_local;
|
|
}
|
|
|
|
public String getPassword_local()
|
|
{
|
|
return password_local;
|
|
}
|
|
}
|