Glassfish 4 - cluster setup - pooling database connections in DAS
I have a glass fish setup (DAS). One remote (SSH) node and one cluster with one instance per node. I also defined a connection pool and a data source for it.
My test app is very simple - it's a single servlet web app where I load the datasource like this:
@Resource(lookup = "jdbc/vadsacRootSource")
private Datasource datasource;
What doesn't work - the data source on the cluster instance (remote) cannot be created because the underlying pool cannot be found - see the stacktrace at the end of the post.
What works:
- The same application on a local DAS node (defaul node)
- Loading a string stored as a custom JNDI resource on both - remote and local
- All application (data source too) for glassfish 3.1 - remote and local
So, something is wrong with the current version of Glassfish 4 - Datasources (or its pool) is not getting an instance (or found on JNDI?) On some remote SSH instance. I tested official release 4.0 and nightly version 4.1-bl3 - same problem
Do you have any ideas?
GlassFish Server Open Source Edition 4.0 - Bug Reporting
HTTP Status 500 - Internal Server Error
Type Exception report
message Internal Server Error
Description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Error instantiating servlet class com.sedo.webtesty.HelloWorldThe main reason
com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class com.sedo.webtesty.HelloWorldThe main reason
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Res-Ref-Env-Property: com.sedo.webtesty.HelloWorld / datasource@javax.sql.DataSource @ resolved as: jndi: jdbc / vadsacRootSource @ res principal: null @ mail : null No Runtime properties Database Vendor: null Create Tables at Deploy: false Delete Tables at Undeploy: false into class com.sedo.webtesty.HelloWorld: Lookup failed for 'java: comp / env / com.sedo.webtesty.HelloWorld / datasource' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming}root cause
javax.naming.NamingException: Lookup failed for 'java: comp / env / com.sedo.webtesty.HelloWorld / datasource' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Lookup failed for 'jdbc / vadsacRootSource' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName = java: comp / env / com.sedo.webtesty.HelloWorld / datasource} [Root exception is javax.naming.NamingException: Unable to lookup resource: jdbc / vadsacRootSource [Root exception is com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Lookup failed for '__SYSTEM / pools / mysqlRootVadsacPool' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName = java: comp / env / com.sedo.webtesty.HelloWorld / datasource}]]]root cause
javax.naming.NamingException: Lookup failed for 'jdbc / vadsacRootSource' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName = java: comp / env / com.sedo.webtesty.HelloWorld / datasource} [Root exception is javax.naming.NamingException: Unable to lookup resource: jdbc / vadsacRootSource [Root exception is com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Lookup failed for '__SYSTEM / pools / mysqlRootVadsacPool' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName = java: comp / env / com.sedo.webtesty.HelloWorld / datasource}]]root cause
javax.naming.NamingException: Unable to lookup resource : jdbc / vadsacRootSource [Root exception is com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Lookup failed for '__SYSTEM / pools / mysqlRootVadsacPool' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName = java: comp / env / com.sedo.webtesty.HelloWorld / datasource}]root call
com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Lookup failed for '__SYSTEM / pools / mysqlRootVadsacPool' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName = java: comp / env / com.sedo.webtesty.HelloWorld / datasource}root cause
javax.naming.NamingException: Lookup failed for '__SYSTEM / pools / mysqlRootVadsacPool' in SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming, com.sun.enterprise.naming.logicalName = java: comp / env / com.sedo.webtesty.HelloWorld / datasource} [Root exception is javax.naming.NameNotFoundException: pools]The main reason
javax.naming.NameNotFoundException: poolsNote A complete trace of the exception stack and its root causes is available in GlassFish Server Open Source Edition 4.0 logs.
GlassFish Server Open Source Edition 4.0
The problem is fixed in the current version 4.1 - everything works now