Saturday, February 28, 2009

Complex investigation, easy solution

Yesterday I was facing one production issue where somehow at some time the connection to a database which is located at another server will be reset. I was getting java.lang.SqlException(io exception: connection resrt). I have reused a method that will reconnect to the database. I hope it works in the next deployment and i believe it should work. Code snippet as below:



public Connection getDBConnection(String dbName) throws OracleConnException, Exception {
if (logger.isInfoEnabled()) {
logger.info("getDBConnection(String) - String dbName=" + dbName); //$NON-NLS-1$
}

Connection cachedConnection = null;
if (ocDataSource == null) {
ocDataSource = new HashMap();
this.printSQL("new HashMap");
}

OracleDataSource ds = (OracleDataSource) ocDataSource.get(dbName);

if(ds == null){
this.printSQL("creatingNewOracleDS");
ds = createNewOracleDS(dbName);
this.printSQL("createdNewOracleDS");
ocDataSource.put(dbName.trim(), ds);
}

int i = 0;
int retry = KenanAdaptorProperties.getORACLE_RETRY_NUM();

for(i = 0; i < retry; i++){
try {
this.printSQL("ds.getConnection() " + ds.getPortNumber());

cachedConnection = ds.getConnection();
this.printSQL("error in connection? ");

if(!isConnectionAlive(cachedConnection)){
this.printSQL("connection is not alive???");
try { ds.close(); } catch(Exception e){
//log.debug("Can't close DataSource object!");
}
ds = null;

ocDataSource.remove(dbName);

ds = createNewOracleDS(dbName);
ocDataSource.put(dbName, ds);
} else {
break;
}

} catch (SQLException se){
logger.error("getDBConnection(String)", se); //$NON-NLS-1$
} catch (Exception e){
this.printSQL("Exception:\r\n" + Util.getStackTraceForLog(e));
}

// sleep for a specific amount of time!
//make it configurable
try {
Thread.sleep(KenanAdaptorProperties.getORACLE_RETRY_SLEEP_TIME());
} catch (InterruptedException e) {
// log.debug("Interrupted Exception:\r\n" + Util.getStackTraceForLog(e));
}

}

if(i == retry){
throw new OracleConnException("Connection is not established. Failed after " + retry + " retries.");
}

return cachedConnection;
}

Wednesday, February 25, 2009

production rollout for Kenan Adapter running on Websphere Business Integration Adapters is successful!

Finally the production rollout for Kenan Adapter is successful!

This is the third deployment after the unsuccessful first two. Well it went well in spite of some minor issues. Most of the scenarios are catered this time. The client's testing team had done a good job this time for testing thoroughly on all kind of possible scenarios! Yeah they should have done that during the UAT time! If they would allocate some time for more scenario testing, the deployment would have gone well even before year 2009! No it's approaching March and the client only managed to use it now. Well, this project does not bring any income to my team anyway. My project manager took this project to cover up some other unit's shit. Now that the long term outsource deal has been closed.

I am studying Websphere Process Server now. It looks far more complicated. I think i need some time to digest some new terms here. I should get myself involved in at least one project related to this product so that i can gain more expertise in this product.

All in all, good news this week. I am glad especially for the successfull rollout for Kenan Adapter. I have put very much effort in making this successful. I would like to thank my project manager for the support! That is important to continue to boost my morale.