2012-08-09 82 views
0

JNDI问题,我一直在使用的EclipseLink作为持久性提供在Spring 3.0的应用程序。该应用程序在Jetty应用程序服务器上正常工作,但在部署到weblogic中时发生错误。 Neccessary细节都低于与WebLogic +弹簧+的EclipseLink

的Spring XML文件

<context:property-placeholder location="classpath:jdbc.properties" 
    ignore-unresolvable="true" /> 
    <jee:jndi-lookup id="jndiDataSource" jndi-name="${jndi.name}" 
    resource-ref="true" /> 

<bean id="pum" 
    class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
    <property name="persistenceXmlLocations"> 
     <list> 
      <value>classpath*:META-INF/persistence.xml</value> 
     </list> 
    </property> 
    <property name="defaultDataSource" ref="jndiDataSource" /> 
</bean> 
     <bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="my-persistence" /> 
    <property name="persistenceUnitManager" ref="pum" /> 
    <property name="jpaDialect" ref="jpaDialect" /> 
    <property name="jpaVendorAdapter" ref="jpaAdapter" /> 
    <property name="loadTimeWeaver" ref="loadTimeWeaver" /> 
</bean> 

<bean id="jpaAdapter" 
    class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter" 
    p:databasePlatform="${toplink.database.platform}" p:showSql="true" /> 

<bean id="jpaDialect" 
    class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect" /> 

属性文件是如下

  jdbc.driverClassName=org.postgresql.Driver 
     jdbc.url=jdbc:postgresql://localhost:5432/myDB 
     jdbc.username=*** 
     jdbc.password=*** 

     jndi.name=jndi/myDBjndi 
     jndi.resourceRef=true 
      jndi.enabled=true 

     hibernate.database.platform=org.hibernate.dialect.PostgreSQLDialect 
    toplink.database.platform=org.eclipse.persistence.platform.database.PostgreSQLPlatform  

我已经宣布在web.xml标签

  <resource-ref> 
    <descriptionMy DataSource Reference</description> 
    <res-ref-name>jndi/myDBjndi</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref>  

上述工程在码头,但在Weblogic的10.3.4我收到以下异常

 ####<Aug 9, 2012 6:19:46 PM CST> <Info> <EclipseLink> <AdminServer> <[ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <f637fb3f44bc7f84:-2787ac98:1390ae3403e:-8000-000000000000001e> <1344507586988> <BEA-2005000> <2012-08-09 18:19:46.988--ServerSession(57821834)--Connection(55507026)--connecting(DatabaseLogin(
platform=>PostgreSQLPlatform 
user name=> "" 
datasource URL=> "null"))> 
     ####<Aug 9, 2012 6:19:47 PM CST> <Alert> <EclipseLink> <AdminServer> < [ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <f637fb3f44bc7f84:-2787ac98:1390ae3403e:-8000-000000000000001e> <1344507587003> <BEA-2005000> <2012-08-09 18:19:47.003--ServerSession(57821834)--Local Exception Stack: 
       Exception [EclipseLink-4021] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): 
      org.eclipse.persistence.exceptions.DatabaseException 
      Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null]. Verify that you have set the expected driver class and URL. Check your login, persistence.xml or sessions.xml resource. The jdbc.driver property should be set to a class that is compatible with your database platform 
       at org.eclipse.persistence.exceptions.DatabaseException.unableToAcquireConnectionFromDriverException(DatabaseException.java:376) 
at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:91) 
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162) 
at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:293) 

任何想法,我做错了什么?

+0

是数据源定义,并在WebLogic Server的工作呢? – Luciano 2012-08-09 12:59:27

+0

是的。我检查了weblogic服务器中的JNDI,它的工作原理是正确的。 – 2012-08-10 05:16:29

+0

只是为了更新。我把persistence.xml的名字改成了其他的东西,这似乎解决了这个问题。不知道确切的原因。 – 2012-08-20 09:00:24

回答

0

这是因为在Java EE容器像weblogic自动检测在/META-INF文件夹分配persistence.xml文件和预加载的Persistence Unit(使用内置的实现),但没有在休眠级别设置了JPA性质的线索。持久化单元只能由Spring来启动拮据,所以重命名文件到别的解决了这个问题。