I don't know the exact reason for your problem. But what is the version of the JDBC driver you use? Did you use the correct version? Did you always correctly close the connection when the resultset is not necessary anymore?
Try the usage of a DataSource. You can use them at the following manner:
Initialize an instance of OracleDataSource only one time in your application:
OracleDataSource oracleDataSource = new OracleDataSource();
oracleDataSource.setDriverType("thin");
oracleDataSource.setServerName(hostName);
oracleDataSource.setDatabaseName(databaseName); // XE, ORA1, ORC1, OCL1, etc.
oracleDataSource.setUser(userName);
oracleDataSource.setPassword(password);
Then reuse this DataSource instance whereever you need a new connection:
oracleDataSource.getConnection();
Hope this helps for you.