persistence@glassfish.java.net

Re: Error with Spring, Hibernate JPA and GlassFish

From: Sanjeeb Kumar Sahoo <Sanjeeb.Sahoo_at_Sun.COM>
Date: Wed, 04 Oct 2006 13:55:52 +0530

 From the stack trace it looks like you are injecting either an emf or
an em using @PersistenceContext or @PersistenceUnit or its equivalent
XML DD. Is this true? So GlassFish is trying to resolve the injected em
or emf when your web app is loaded. GlassFish uses information from
persistence.xml only to decide the provider to be used. It does not read
your Spring configuration file. You did not see this problem in Tomcat
because Tomcat does not yet understand @PersistenceContext or
@PersistenceUnit as Marina hinted in her email.

Your concern for duplicating the info in persistence.xml and in Spring
XML is very valid. You should either use Spring to set the bean property
or let GF inject it. If you opt for the former, then remove any
injection annotations from your code. If you choose the later, then
remove the JPA configurations from Spring xml file. With later approach,
your app will correctly in GF, but no more in Tomcat.

Thanks,
Sahoo

Guillaume Bilodeau wrote:
> Hi Marina,
>
> Yes that's exactly what I thought. But what if I don't want GlassFish to
> pick up anything, since I'm defining it in my Spring application context and
> it will be loaded when this context will itself be loaded?
>
> I know I can define Hibernate as the JPA provider in my persistence.xml (as
> suggested by Sahoo) but I don't know how this will interact with my Spring
> definition.
>
> I'll try that and get back to you.
>
> Thanks for your answer,
> GB
>
>
> Marina Vatkina wrote:
>
>> Hi,
>>
>> Of course we pick up TopLink - it's the default provider, and you didn't
>> tell us otherwise. Tomcat is not a Java EE 5 container, and is not
>> required
>> to do so.
>>
>> regards,
>> -marina
>>
>> Guillaume Bilodeau wrote:
>>
>>> Hi all,
>>>
>>> Once more I'm asking for your help. One of our applications is using
>>> Spring
>>> 2.0 (still RC1, didn't upgrade to final yet) and Hibernate EntityManager
>>> as
>>> the JPA provider. It's packaged as a WAR file and deployed to GlassFish.
>>>
>>> We're getting the following error upon deploying:
>>>
>>> [code]
>>> [#|2006-10-04T10:22:42.816+0400|WARNING|sun-appserver-pe9.0|javax.enterprise.system.container.web|_ThreadID=14;_ThreadName=Thread-32;_RequestID=0bbadd76-dd9f-4fea-974a-4fddddd5a04d;|
>>> Internal Exception: java.sql.SQLException: Error in allocating a
>>> connection.
>>> Cause: Connection could not be allocated because:
>>> java.security.PrivilegedActionException : Error opening socket to server
>>> localhost on port 1527 with message : nullError Code: 0
>>> Local Exception Stack:
>>> Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.4 (Build
>>> 060412)): oracle.toplink.essentials.exceptions.DatabaseException
>>> Internal Exception: java.sql.SQLException: Error in allocating a
>>> connection.
>>> Cause: Connection could not be allocated because:
>>> java.security.PrivilegedActionException : Error opening socket to server
>>> localhost on port 1527 with message : nullError Code: 0
>>> at
>>> oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:289)
>>> at
>>> oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:135)
>>> at
>>> oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:167)
>>> at
>>> oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:537)
>>> at
>>> oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:193)
>>> at
>>> oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createContainerEntityManagerFactory(EntityManagerFactoryProvider.java:168)
>>> at
>>> com.sun.enterprise.server.PersistenceUnitLoaderImpl.load(PersistenceUnitLoaderImpl.java:195)
>>> at
>>> com.sun.enterprise.server.PersistenceUnitLoaderImpl.load(PersistenceUnitLoaderImpl.java:106)
>>> at
>>> com.sun.enterprise.web.WebModuleListener.loadPersistenceUnits(WebModuleListener.java:175)
>>> at
>>> com.sun.enterprise.web.WebModuleListener.lifecycleEvent(WebModuleListener.java:152)
>>> at
>>> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:130)
>>> at
>>> org.apache.catalina.core.StandardContext.start(StandardContext.java:4673)
>>> at com.sun.enterprise.web.WebModule.start(WebModule.java:292)
>>> at
>>> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:833)
>>> at
>>> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:817)
>>> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:659)
>>> at
>>> com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1468)
>>> at
>>> com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1133)
>>> at
>>> com.sun.enterprise.server.WebModuleDeployEventListener.moduleDeployed(WebModuleDeployEventListener.java:171)
>>> at
>>> com.sun.enterprise.server.WebModuleDeployEventListener.moduleDeployed(WebModuleDeployEventListener.java:275)
>>> at
>>> com.sun.enterprise.admin.event.AdminEventMulticaster.invokeModuleDeployEventListener(AdminEventMulticaster.java:954)
>>> at
>>> com.sun.enterprise.admin.event.AdminEventMulticaster.handleModuleDeployEvent(AdminEventMulticaster.java:941)
>>> at
>>> com.sun.enterprise.admin.event.AdminEventMulticaster.processEvent(AdminEventMulticaster.java:448)
>>> at
>>> com.sun.enterprise.admin.event.AdminEventMulticaster.multicastEvent(AdminEventMulticaster.java:160)
>>> at
>>> com.sun.enterprise.admin.server.core.DeploymentNotificationHelper.multicastEvent(DeploymentNotificationHelper.java:296)
>>> at
>>> com.sun.enterprise.deployment.phasing.DeploymentServiceUtils.multicastEvent(DeploymentServiceUtils.java:203)
>>> at
>>> com.sun.enterprise.deployment.phasing.ServerDeploymentTarget.sendStartEvent(ServerDeploymentTarget.java:285)
>>> at
>>> com.sun.enterprise.deployment.phasing.ApplicationStartPhase.runPhase(ApplicationStartPhase.java:119)
>>> at
>>> com.sun.enterprise.deployment.phasing.DeploymentPhase.executePhase(DeploymentPhase.java:95)
>>> at
>>> com.sun.enterprise.deployment.phasing.PEDeploymentService.executePhases(PEDeploymentService.java:871)
>>> at
>>> com.sun.enterprise.deployment.phasing.PEDeploymentService.start(PEDeploymentService.java:541)
>>> at
>>> com.sun.enterprise.deployment.phasing.PEDeploymentService.start(PEDeploymentService.java:585)
>>> at
>>> com.sun.enterprise.admin.mbeans.ApplicationsConfigMBean.start(ApplicationsConfigMBean.java:719)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>> at
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>> at java.lang.reflect.Method.invoke(Method.java:585)
>>> at
>>> com.sun.enterprise.admin.MBeanHelper.invokeOperationInBean(MBeanHelper.java:353)
>>> at
>>> com.sun.enterprise.admin.MBeanHelper.invokeOperationInBean(MBeanHelper.java:336)
>>> at
>>> com.sun.enterprise.admin.config.BaseConfigMBean.invoke(BaseConfigMBean.java:448)
>>> at
>>> com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:213)
>>> at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220)
>>> at
>>> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:815)
>>> at
>>> com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784)
>>> at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
>>> at
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>> at java.lang.reflect.Method.invoke(Method.java:585)
>>> at
>>> com.sun.enterprise.admin.util.proxy.ProxyClass.invoke(ProxyClass.java:77)
>>> at $Proxy1.invoke(Unknown Source)
>>> at
>>> com.sun.enterprise.admin.server.core.jmx.SunoneInterceptor.invoke(SunoneInterceptor.java:297)
>>> at
>>> com.sun.enterprise.deployment.client.DeploymentClientUtils.startApplication(DeploymentClientUtils.java:133)
>>> at
>>> com.sun.enterprise.deployment.client.DeployAction.run(DeployAction.java:517)
>>> at java.lang.Thread.run(Thread.java:595)
>>> Caused by: java.sql.SQLException: Error in allocating a connection.
>>> Cause:
>>> Connection could not be allocated because:
>>> java.security.PrivilegedActionException : Error opening socket to server
>>> localhost on port 1527 with message : null
>>> at com.sun.gjc.spi.DataSource.getConnection(DataSource.java:100)
>>> at
>>> oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:130)
>>> ... 51 more
>>> [/code]
>>>
>>> It seems that TopLink is being picked up as the JPA provider instead of
>>> Hibernate. This seems understandable, since it's defined in our
>>> applicationContext.xml file instead of the persistence.xml file.
>>>
>>> persistence.xml:
>>> [code]
>>> <?xml version="1.0" encoding="UTF-8"?>
>>>
>>> <persistence xmlns="http://java.sun.com/xml/ns/persistence"
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
>>> version="1.0">
>>>
>>> <persistence-unit name="corePersistenceUnit"
>>> transaction-type="RESOURCE_LOCAL">
>>> <class>com.auchan.core.model.goods.Assortment</class>
>>> </persistence-unit>
>>>
>>> </persistence>
>>> [/code]
>>>
>>> applicationContext.xml:
>>> [code]
>>> <?xml version="1.0" encoding="UTF-8"?>
>>>
>>> <beans xmlns="http://www.springframework.org/schema/beans"
>>> xmlns:aop="http://www.springframework.org/schema/aop"
>>> xmlns:ehcache="http://www.springmodules.org/schema/ehcache"
>>> xmlns:jee="http://www.springframework.org/schema/jee"
>>> xmlns:tx="http://www.springframework.org/schema/tx"
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> xsi:schemaLocation="
>>> http://www.springframework.org/schema/aop
>>> http://www.springframework.org/schema/aop/spring-aop.xsd
>>> http://www.springframework.org/schema/beans
>>> http://www.springframework.org/schema/beans/spring-beans.xsd
>>> http://www.springmodules.org/schema/ehcache
>>> http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd
>>> http://www.springframework.org/schema/jee
>>> http://www.springframework.org/schema/jee/spring-jee.xsd
>>> http://www.springframework.org/schema/tx
>>> http://www.springframework.org/schema/tx/spring-tx.xsd">
>>>
>>> <jee:jndi-lookup id="mainDataSource"
>>> jndi-name="java:comp/env/jdbc/MainDataSource"
>>> proxy-interface="javax.sql.DataSource" lookup-on-startup="false" />
>>>
>>> <bean id="entityManagerFactory"
>>>
>>> class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
>>> <property name="dataSource" ref="mainDataSource" />
>>> <property name="jpaVendorAdapter">
>>> <bean
>>> class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
>>> <property name="databasePlatform"
>>> value="org.hibernate.dialect.Oracle9Dialect" />
>>> <property name="showSql" value="true" />
>>> </bean>
>>> </property>
>>> </bean>
>>>
>>> <bean id="transactionManager"
>>> class="org.springframework.orm.jpa.JpaTransactionManager">
>>> <property name="entityManagerFactory"
>>> ref="entityManagerFactory" />
>>> <property name="dataSource" ref="mainDataSource" />
>>> </bean>
>>>
>>> <tx:annotation-driven />
>>> </beans>
>>> [/code]
>>>
>>> Note that when deploying on Tomcat, we have no such error and everything
>>> is
>>> running smoothly.
>>>
>>> Does anybody have a clue?
>>>
>>> Cheers,
>>> GB
>>>
>>>
>>
>
>