Hi guys
Thanks for all the responses, it's much appreciated!
My Glassfish resources file looks as follows:
<resources>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="true" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.javasimon.jdbcx4.SimonXADataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="connectionPoolFreight" non-transactional-connections="false" ping="false" pool-resize-quantity="2" pooling="true" res-type="javax.sql.XADataSource" statement-cache-size="0" statement-leak-reclaim="false" statement-leak-timeout-in-seconds="0" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="URL" value="jdbc:sqlserver://dbServer:1433;databaseName=db1;sendStringParametersAsUnicode=false"/>
<property name="User" value="dbUsername"/>
<property name="Password" value="dbPassword"/>
<property name="RealDataSourceClassName" value="com.microsoft.sqlserver.jdbc.SQLServerXADataSource"/>
</jdbc-connection-pool>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="true" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.javasimon.jdbcx4.SimonXADataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="connectionPoolCoreExchange" non-transactional-connections="false" ping="false" pool-resize-quantity="2" pooling="true" res-type="javax.sql.XADataSource" statement-cache-size="0" statement-leak-reclaim="false" statement-leak-timeout-in-seconds="0" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="URL" value="jdbc:sqlserver://dbServer:1433;databaseName=db1;sendStringParametersAsUnicode=false"/>
<property name="User" value="dbUsername"/>
<property name="Password" value="dbPassword"/>
<property name="RealDataSourceClassName" value="com.microsoft.sqlserver.jdbc.SQLServerXADataSource"/>
</jdbc-connection-pool>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="true" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.javasimon.jdbcx4.SimonXADataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="connectionPoolCoreDocs" non-transactional-connections="false" ping="false" pool-resize-quantity="2" pooling="true" res-type="javax.sql.XADataSource" statement-cache-size="0" statement-leak-reclaim="false" statement-leak-timeout-in-seconds="0" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="URL" value="jdbc:sqlserver://dbServer:1433;databaseName=db1;sendStringParametersAsUnicode=false"/>
<property name="User" value="dbUsername"/>
<property name="Password" value="dbPassword"/>
<property name="RealDataSourceClassName" value="com.microsoft.sqlserver.jdbc.SQLServerXADataSource"/>
</jdbc-connection-pool>
<jdbc-resource jndi-name="jdbc/db1" enabled="true" pool-name="connectionPoolFreight"/>
<jdbc-resource jndi-name="jdbc/db2" enabled="true" pool-name="connectionPoolCoreExchange"/>
<jdbc-resource jndi-name="jdbc/db3" enabled="true" pool-name="connectionPoolCoreDocs"/>
</resources>
This configuration works for the most part, except that I keep on getting database connection closed exceptions.
See stacktrace:
WARNING: Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
Error Code: 0
Call: SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC
Query: ReadAllQuery(referenceClass=AppVersion sql="SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processExceptionForCommError(DatabaseAccessor.java:1494)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:636)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1702)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:253)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:264)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:646)
at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:418)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1097)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:829)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1056)
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:390)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1144)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2863)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1501)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1483)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1457)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:485)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:773)
at com.corefreight.backend.coreversioning.service.AppVersionFacadeREST.findLatest(AppVersionFacadeREST.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
at $Proxy388.findLatest(Unknown Source)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
at com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolProxy.checkClosed(SQLServerConnectionPoolProxy.java:55)
at com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolProxy.prepareStatement(SQLServerConnectionPoolProxy.java:66)
at org.javasimon.jdbc4.SimonConnection.prepareStatement(SimonConnection.java:157)
at com.sun.gjc.spi.base.ConnectionHolder.prepareStatement(ConnectionHolder.java:502)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1474)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1423)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:697)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:585)
... 89 more
WARNING: java.lang.NullPointerException
at com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolProxy.setClientInfo(SQLServerConnectionPoolProxy.java:375)
at org.javasimon.jdbc4.SimonConnection.setClientInfo(SimonConnection.java:486)
at com.sun.gjc.spi.jdbc40.ConnectionHolder40.setClientInfo(ConnectionHolder40.java:322)
at com.sun.gjc.spi.jdbc40.ConnectionHolder40.close(ConnectionHolder40.java:530)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.closeDatasourceConnection(DatabaseAccessor.java:473)
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.closeConnection(DatasourceAccessor.java:504)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.closeConnection(DatabaseAccessor.java:496)
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.closeJTSConnection(DatasourceAccessor.java:179)
at org.eclipse.persistence.sessions.server.ClientSession.releaseJTSConnection(ClientSession.java:117)
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.afterCompletion(AbstractSynchronizationListener.java:218)
at org.eclipse.persistence.transaction.JTASynchronizationListener.afterCompletion(JTASynchronizationListener.java:79)
at com.sun.jts.jta.SynchronizationImpl.after_completion(SynchronizationImpl.java:156)
at com.sun.jts.CosTransactions.RegisteredSyncs.distributeAfter(RegisteredSyncs.java:213)
at com.sun.jts.CosTransactions.TopCoordinator.afterCompletion(TopCoordinator.java:2588)
at com.sun.jts.CosTransactions.CoordinatorTerm.rollback(CoordinatorTerm.java:569)
at com.sun.jts.CosTransactions.TerminatorImpl.rollback(TerminatorImpl.java:305)
at com.sun.jts.CosTransactions.CurrentImpl.rollback(CurrentImpl.java:766)
at com.sun.jts.jta.TransactionManagerImpl.rollback(TransactionManagerImpl.java:359)
at com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.rollbackDistributedTransaction(JavaEETransactionManagerJTSDelegate.java:223)
at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.rollback(JavaEETransactionManagerSimplified.java:896)
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5089)
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
at $Proxy388.findLatest(Unknown Source)
When I enable Connection Validation, all my queries execute, however in the log files I see this:
INFO: RAR5074 : Table based validation detected invalid connection. Querying the table dbo.logLevels failed. Set resource-adapter log-level to FINE for exception stack trace.
FINE: SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC
INFO: RAR5074 : Table based validation detected invalid connection. Querying the table dbo.logLevels failed. Set resource-adapter log-level to FINE for exception stack trace.
FINE: SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC
FINE: SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC
INFO: RAR5074 : Table based validation detected invalid connection. Querying the table dbo.logLevels failed. Set resource-adapter log-level to FINE for exception stack trace.
FINE: SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC
INFO: RAR5074 : Table based validation detected invalid connection. Querying the table dbo.logLevels failed. Set resource-adapter log-level to FINE for exception stack trace.
FINE: SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC
INFO: RAR5074 : Table based validation detected invalid connection. Querying the table dbo.logLevels failed. Set resource-adapter log-level to FINE for exception stack trace.
FINE: SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC
INFO: RAR5074 : Table based validation detected invalid connection. Querying the table dbo.logLevels failed. Set resource-adapter log-level to FINE for exception stack trace.
FINE: SELECT TOP 1 * FROM AppVersion WHERE IsEnabled = 1 ORDER BY AppRelDate DESC, AppVerNo DESC
I'm trying to work out how to enable the resource-adapter log-levels that they are talking about
Tim