Thursday, July 23, 2009

Remove Folder in Java

How to delete folders/files recursively in Java ?.

We do not have an direct API to remove folder and its child elements. However, it is not big deal to us to write


import java.io.File;

public class RemoveDir {
public static void main(String[] args) {
if(removeDir(new File("/tmp/a")))
{
System.out.println("Successfully removed Directory");
}
else
{
System.out.println("Not able to delete Directory, please refer exceptions");
}
}

public static boolean removeDir(File dir) {
try {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = removeDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}

// The directory is now empty so delete it
return dir.delete();
} catch (Throwable e) {
e.printStackTrace();
}
return false;
}
}

Saturday, April 25, 2009

weblogic.jdbc.extensions.ConnectionDeadSQLException: weblogic.common.resourcepool.ResourceDeadException

weblogic.jdbc.extensions.ConnectionDeadSQLException: weblogic.common.resourcepool.ResourceDeadException


MisfireHandler: Error handling misfires: Failed to obtain DB connection
from data source 'soaNonManagedDS': java.sql.SQLException: 
Could notretrieve datasource via JNDI url 'jdbc/SOALocalTxDataSource' 
weblogic.jdbc.extensions.ConnectionDeadSQLException: 
weblogic.common.resourcepool.ResourceDeadException: 
0:weblogic.common.ResourceException: Could not create pool connection. 
The DBMS driver exception was: Socket read timed out[[org.quartz.JobPersistenceException: 
Failed to obtain DB connection from data source 'soaNonManagedDS': 
java.sql.SQLException: Could not retrieve datasource via JNDI url 
'jdbc/SOALocalTxDataSource' weblogic.jdbc.extensions.ConnectionDeadSQLException: 
weblogic.common.resourcepool.ResourceDeadException: 0:weblogic.common.ResourceException: 
Could not create pool connection. The DBMS driver exception was: Socket read timed out 
[See nested exception: java.sql.SQLException: Could not retrieve datasource via JNDI 
url 'jdbc/SOALocalTxDataSource' weblogic.jdbc.extensions.ConnectionDeadSQLException: 
weblogic.common.resourcepool.ResourceDeadException: 0:weblogic.common.ResourceException: 
Could not create pool connection. The DBMS driver exception was: Socket read timed out] 
at org.quartz.impl.jdbcjobstore.JobStoreCMT.getNonManagedTXConnection(JobStoreCMT.java:167) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3011) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.manage(JobStoreSupport.java:3789) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobStoreSupport.java:3809)


The above exception comes while reserved connection test started by application server while all connections are used by application. In general, we can stop the Application server test on connection, if we are running heavy load application. In Application console, we have to set Connection Pool param "test-connections-on-reserve" as false


Sample:

<jdbc-connection-pool-params> 
 <initial-capacity>0</initial-capacity>
 <max-capacity>50</max-capacity>    
 <capacity-increment>1</capacity-increment>    
 <connection-creation-retry-frequency-seconds>10</connection-creation-retry-frequency-seconds>    
 <test-frequency-seconds>300</test-frequency-seconds>    
 <strong><test-connections-on-reserve>false</test-connections-on-reserve> </strong>   
 <test-table-name>SQL SELECT 1 FROM DUAL</test-table-name>    
 <seconds-to-trust-an-idle-pool-connection>0</seconds-to-trust-an-idle-pool-connection>
</jdbc-connection-pool-params>
Read more about unexpected exception while enlisting

Unexpected exception while enlisting XAConnection:


Caused by: java.sql.SQLException: Unexpected exception while enlisting XAConnection 
java.sql.SQLException: Transaction rolled back: Transaction timed out after 50 seconds
BEA1-450F175C33A65FA1D8A0
at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1431)
at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1331)
at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:426)
at weblogic.jdbc.jta.DataSource.connect(DataSource.java:383)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:346)
at oracle.toplink.jndi.JNDIConnector.connect(JNDIConnector.java:123)
at oracle.toplink.jndi.JNDIConnector.connect(JNDIConnector.java:84)
at oracle.toplink.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:153)
at oracle.toplink.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:273)
at oracle.toplink.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:230)
at oracle.toplink.internal.databaseaccess.DatasourceAccessor.reconnect(DatasourceAccessor.java:478)
at oracle.toplink.internal.databaseaccess.DatabaseAccessor.reconnect(DatabaseAccessor.java:1342)
at oracle.toplink.internal.databaseaccess.DatasourceAccessor.incrementCallCount(DatasourceAccessor.java:251)
at oracle.toplink.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:511)
at oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:467)
at oracle.toplink.internal.sessions.AbstractSession.executeCall(AbstractSession.java:800)
at oracle.toplink.internal.sessions.IsolatedClientSession.executeCall(IsolatedClientSession.java:115)
at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeCall(
DatasourceCallQueryMechanism.java:193)
at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeCall(
DatasourceCallQueryMechanism.java:179)
at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeNoSelectCall(
DatasourceCallQueryMechanism.java:222)
at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeNoSelect(
DatasourceCallQueryMechanism.java:202)
at oracle.toplink.queryframework.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:55)
at oracle.toplink.queryframework.DatabaseQuery.execute(DatabaseQuery.java:674)
at oracle.toplink.queryframework.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:597)
at oracle.toplink.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2741)

This exception thrown out due to the JTA time out specified in application server exceeded for the connection. Here in this exception, 50seconds specified and crossed the limit. We can increase this number(upto 600s) and test the application , if still problem persist, then we have to eye on Database.

Read More about ConnectionDeadSQLException

Recent Posts

Unix Commands | List all My Posts

Texts

This blog intended to share the knowledge and contribute to JAVA Community such a way that by providing samples and pointing right documents/webpages. We try to give our knowledege level best and no guarantee can be claimed on truth. Copyright and Terms of Policy refer blogspot.com