Monday, August 10, 2009

Oracle Pool Connection (Java)

Μήπως δεν είστε ευχαριστημένοι από το connection pooling μηχανισμό του JBoss? Μήπως θέλετε να σκοτώσετε λίγο το χρόνο σας. Χρησιμιποιήστε το connection pooling της Oracle με τις παραμέτρους από το κλασσικό oracle-ds ή κάποιο άλλο *-ds που σας περισεύει.


import java.sql.Connection;
import java.sql.SQLException;
import java.io.*;
import java.util.Properties;
import oracle.jdbc.pool.OracleDataSource;
import org.apache.log4j.Logger;
import org.dom4j.*;
import org.dom4j.io.SAXReader; //<--Ναι θα μπορούσαμε να μη το χρησιμοποιήσουμε

public class OraclePoolDatasource{
File oracleDsFile ;
OracleDataSource ods;
Properties ps;
private org.dom4j.Document doc;

private static final String SERVER_HOME_DIR = "jboss.server.home.dir";
protected final Logger log = Logger.getLogger(OraclePoolDatasource.class.getName());

public void parseWithSAX(File dsFile) throws DocumentException {
SAXReader xmlReader = new SAXReader();
this.doc = xmlReader.read(dsFile);
}

public void createPool() {
String diployDirPath = System.getProperty(SERVER_HOME_DIR);
diployDirPath = diployDirPath.replaceAll("\\\\", "/");
final String pathname = diployDirPath + "/deploy";

File deployDir = new File(pathname);
FilenameFilter filter = new FilenameSuffixFilter("-ds.xml");
String[] oracleFileName = deployDir.list(filter);
try{
log.error("Datasource file: "+oracleFileName[0]);
oracleDsFile = new File(pathname+"/"+oracleFileName[0]);

}
catch (NullPointerException e) {
log.error("Oracle-ds file not found. Check for other -ds.xml file");
}

parseWithSAX(oracleDsFile);

Element root = doc.getRootElement();

log.error( "Database Connection URL --> "+doc.valueOf( "//datasources/local-tx-datasource/connection-url" ));

ods = new oracle.jdbc.pool.OracleDataSource();
ods.setConnectionCacheName("ShocksPool");
ods.setURL(doc.valueOf( "//datasources/local-tx-datasource/connection-url" ));
ods.setUser(doc.valueOf( "//datasources/local-tx-datasource/user-name" ));
ods.setPassword(doc.valueOf( "//datasources/local-tx-datasource/password" ));
ops = new Properties();
ops.put("MinLimit", 5);
ops.put("InitialLimit", 5);
ops.put("MaxLimit", 10);
ops.put("TimeToLiveTimeout", 360);
ods.setConnectionCacheProperties(ps);
ods.setConnectionCachingEnabled(true);
}

public void destroy() {
ods = null;
}

public Object getConnection(){
try {
if (ods!=null) {
log.info("Returning connection ");

Connection con = ods.getConnection();

con.setAutoCommit(true); //ή ότι άλλο θέλετε
if (con != null)
log.info("getConnection OK");
else
log.info("Connection creation failed");
//και σώστε τον κόσμο εδώ
return con;
}
else {
log.info("το χασαμε το datasource πατριώτη!");
return null; //και να είστε έτοιμοι για ένα ωραίο NullPointerException
}
} catch (SQLException e) {
log.info("Exception");
e.printStackTrace(); //και άντε βγάλε τα μάτια σου
return null;
}

}
}

0 σχόλια:

Post a Comment