users@glassfish.java.net

V2 -> AS 8.2: jdbc resource NameNotFoundException

From: <glassfish_at_javadesktop.org>
Date: Thu, 13 Mar 2008 06:30:39 PST

Hi,

I moved my Spring app from Glassfish V2 to Sun Application Server 8.2 for architectural and support reasons. I'm running this dev environment on Windows XP sp2 with Oracle 10g express on it.

Since I moved to 8.2, I am getting this exception in my browser when I access the app:

[i]org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeFormController' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot resolve reference to bean 'emplMan' while setting bean property 'emplMan'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emplMan' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot resolve reference to bean 'emplManDao' while setting bean property 'employeeManagerDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emplManDao' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: No object bound to name java:comp/env/jdbc/oracle
        org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:274)
        org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1274)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1042)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:485)
        java.security.AccessController.doPrivileged(Native Method)[/i]

I believe I have configured the Connection pool and JDBC resource correctly; I am able to successfully ping the oracle db from the appserver admin console, the domain.xml:

[i]<resources>
    <jdbc-resource enabled="true" jndi-name="jdbc/__TimerPool" object-type="system-admin" pool-name="__TimerPool"/>
    <jdbc-resource enabled="true" jndi-name="jdbc/__default" object-type="user" pool-name="DerbyPool"/>
    <jdbc-resource enabled="true" jndi-name="jdbc/sample" object-type="user" pool-name="SamplePool"/>
    <jdbc-resource enabled="true" jndi-name="jdbc/oracle" object-type="user" pool-name="OraclePool"/>
    <jdbc-connection-pool connection-validation-method="auto-commit" datasource-classname="org.apache.derby.jdbc.EmbeddedXADataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" max-pool-size="32" max-wait-time-in-millis="60000" name="__TimerPool" pool-resize-quantity="2" res-type="javax.sql.XADataSource" steady-pool-size="8">
      <property name="databaseName" value="${com.sun.aas.instanceRoot}/lib/databases/ejbtimer"/>
    </jdbc-connection-pool>
    <jdbc-connection-pool connection-validation-method="auto-commit" datasource-classname="org.apache.derby.jdbc.ClientDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="false" max-pool-size="32" max-wait-time-in-millis="60000" name="DerbyPool" pool-resize-quantity="2" res-type="javax.sql.DataSource" steady-pool-size="8">
      <property name="PortNumber" value="1527"/>
      <property name="Password" value="APP"/>
      <property name="User" value="APP"/>
      <property name="serverName" value="localhost"/>
      <property name="DatabaseName" value="sun-appserv-samples"/>
      <property name="connectionAttributes" value=";create=true"/>
    </jdbc-connection-pool>
    <jdbc-connection-pool connection-validation-method="auto-commit" datasource-classname="org.apache.derby.jdbc.ClientDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" max-pool-size="32" max-wait-time-in-millis="60000" name="SamplePool" pool-resize-quantity="2" res-type="javax.sql.DataSource" steady-pool-size="8">
      <property name="serverName" value="localhost"/>
      <property name="DatabaseName" value="sample"/>
      <property name="PortNumber" value="1527"/>
      <property name="User" value="app"/>
      <property name="Password" value="app"/>
      <property name="URL" value="jdbc:derby://localhost:1527/sample"/>
    </jdbc-connection-pool>
    <jdbc-connection-pool connection-validation-method="auto-commit" datasource-classname="oracle.jdbc.pool.OracleDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="false" max-pool-size="32" max-wait-time-in-millis="60000" name="OraclePool" pool-resize-quantity="2" res-type="javax.sql.DataSource" steady-pool-size="8">
      <property name="portNumber" value="1521"/>
      <property name="user" value="matt"/>
      <property name="password" value="password"/>
      <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
    </jdbc-connection-pool>
  </resources>[/i]

In my app I reference the data source in my dispatcher config:

[i] <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>/WEB-INF/jdbc.properties</value>
            </list>
        </property>
    </bean>

...


    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="${jndi.name}"/>
        <property name="expectedType" value="javax.sql.DataSource"/>
    </bean>
[/i]

In jdbc.properties, jndi.name is equal to "java:comp/env/jdbc/oracle".


Is there any extra configuration needed in 8.2 that is not in 9.1?
[Message sent by forum member 'phife757' (phife757)]

http://forums.java.net/jive/thread.jspa?messageID=263807