Problem Statement:
When we add some columns in the AdHoc Report , application throws the error "already closed" with no more information given.
Solution Explanation:
This error appears randomly and disappears without doing anything in the same session.
For example, I try to insert an object three times with an error, and the fourth time it works fine.
Quoting the stack trace from jasperserver.log file that was related to this behavior:
2014-10-02 20:06:48,831 ERROR BaseJdbcDataSource,http-apr-8080-exec-3:62 - Error closing connection. java.sql.SQLException: Already closed. at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:77) at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:180) at com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.BaseJdbcDataSource.closeConnection(BaseJdbcDataSource.java:57) at com.jaspersoft.commons.semantic.impl.DataSourceResolverImpl.closeDataSourceServices(DataSourceResolverImpl.java:88) at com.jaspersoft.ji.adhoc.strategy.CommonDomainDataStrategy.getWorkingDataSet(CommonDomainDataStrategy.java:1164)
This problem was related to the incorrect configuration of JasperReports Server (and all other JNDI’s) in this environment.
Quoting the incorrect configuration:
<Resource name="jdbc/jasperserver" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="postgres" password="postgres" driverClassName="org.postgresql.Driver" accessToUnderlyingConnectionAllowed="true" testOnBorrow="true" url="jdbc:postgresql://localhost:5432/jasperserver" factory="com.jaspersoft.jasperserver.tomcat.jndi.JSBasicDataSourceFactory" />
and the default configuration:
<Resource name="jdbc/jasperserver" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="jasperdb" password="password" driverClassName="org.postgresql.Driver" validationQuery="SELECT 1" testOnBorrow="true" url="jdbc:postgresql://127.0.0.1:5432/jasperserver?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&autoReconnectForPools=true" factory="com.jaspersoft.jasperserver.tomcat.jndi.JSBasicDataSourceFactory" />
Please use the recommended settings to avoid such behavior.
Recommended Comments