2012-08-22 200 views
1

看起來問題是舊的,但我找不到正確的解決方案。Spring-hibernate:通過tomcat的dataSource jndi

細節:

的web.xml

<resource-ref> 
    <res-ref-name>jdbc/jndisqldbhello</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

的context.xml

<Context> 
<Resource name="jdbc/jndisqldbhello" 
    auth="Container" 
    type="javax.sql.DataSource" 
    factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 
    maxActive="10" 
    maxIdle="5" 
    maxWait="10000" 
    username="root" 
    password="123456" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/javatest" 
    validationQuery="select 1"/> 
</Context> 

的applicationContext.xml

<jee:jndi-lookup jndi-name="jdbc/jndisqldbhello" id="dataSource" /> 
    <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

的persistence.xml

<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_2_0.xsd" 
version="2.0"> 
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.format_sql" value="true" /> 
     <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/> 
    </properties> 
</persistence-unit> 
</persistence> 

STARTING沒有例外TOMCAT,但我混淆有關NULL定義的對象警告:

2011-04-08 20:32:30,311 - INFO ContextLoader - Root WebApplicationContext: initialization started 
2011-04-08 20:32:30,576 - INFO XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Fri Apr 08 20:32:30 EEST 2011]; root of context hierarchy 
2011-04-08 20:32:30,770 - INFO XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [META-INF/spring/applicationContext.xml] 
***2011-04-08 20:32:33,082 - INFO XmlWebApplicationContext - Bean 'dataSource' of type [class org.springframework.jndi.JndiObjectFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)*** 
***2011-04-08 20:32:33,087 - INFO XmlWebApplicationContext - Bean 'dataSource' of type [class org.apache.tomcat.dbcp.dbcp.BasicDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)*** 
2011-04-08 20:32:33,139 - INFO LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'persistenceUnit' 
2011-04-08 20:32:33,687 - INFO Version - HCANN000001: Hibernate Commons Annotations {4.0.1.Final} 
2011-04-08 20:32:33,716 - INFO Version - HHH000412: Hibernate Core {4.1.5.Final} 
2011-04-08 20:32:33,730 - INFO Environment - HHH000206: hibernate.properties not found 
2011-04-08 20:32:33,738 - INFO Environment - HHH000021: Bytecode provider name : javassist 
2011-04-08 20:32:33,920 - INFO Ejb3Configuration - HHH000204: Processing PersistenceUnitInfo [ 
    name: persistenceUnit 
    ...] 
2011-04-08 20:32:34,738 - INFO ConnectionProviderInitiator - HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider 
***2011-04-08 20:32:34,836 - WARN JdbcServicesImpl - HHH000342: Could not obtain connection to query metadata : Cannot create JDBC driver of class '' for connect URL 'null'*** 
2011-04-08 20:32:34,865 - INFO Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
***2011-04-08 20:32:34,903 - INFO LobCreatorBuilder - HHH000422: Disabling contextual LOB creation as connection was null*** 
2011-04-08 20:32:34,952 - INFO TransactionFactoryInitiator - HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory 
2011-04-08 20:32:34,972 - INFO ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory 
2011-04-08 20:32:35,193 - INFO Version - HV000001: Hibernate Validator 4.3.0.Final 
***2011-04-08 20:32:36,437 - INFO XmlWebApplicationContext - Bean 'entityManagerFactory' of type [class org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)*** 
2011-04-08 20:32:36,511 - INFO DefaultListableBeanFactory - Pre-instantiating singletons in org.s[email protected]f474205: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,org.springframework.context.config.internalBeanConfigurerAspect,userRepository,org.springframework.data.repository.core.support.RepositoryInterfaceAwareBeanPostProcessor#0,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0,mySimpleDBService,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,transactionManager,org.springframework.transaction.config.internalTransactionAspect,entityManagerFactory,dataSource,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy 
2011-04-08 20:32:37,004 - INFO ContextLoader - Root WebApplicationContext: initialization completed in 6692 ms 
апр 08, 2011 8:32:37 PM org.apache.catalina.core.ApplicationContext log 
INFO: Initializing Spring FrameworkServlet 'webapp' 
2011-04-08 20:32:37,107 - INFO DispatcherServlet - FrameworkServlet 'webapp': initialization started 
2011-04-08 20:32:37,120 - INFO XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'webapp-servlet': startup date [Fri Apr 08 20:32:37 EEST 2011]; parent: Root WebApplicationContext 
2011-04-08 20:32:37,126 - INFO XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/webapp-servlet.xml] 
2011-04-08 20:32:37,459 - INFO DefaultListableBeanFactory - Pre-instantiating singletons in org.s[email protected]654309f0: defining beans [restExampleController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,org.springframework.web.servlet.view.InternalResourceViewResolver#0,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; parent: org.s[email protected]f474205 
2011-04-08 20:32:37,696 - INFO RequestMappingHandlerMapping - Mapped "{[/test/hi],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.first.web.controller.RestExampleController.getHi() 
2011-04-08 20:32:37,697 - INFO RequestMappingHandlerMapping - Mapped "{[/test/hello],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.first.web.controller.RestExampleController.getMovies(org.springframework.ui.ModelMap) 
2011-04-08 20:32:38,992 - INFO DispatcherServlet - FrameworkServlet 'webapp': initialization completed in 1884 ms 
апр 08, 2011 8:32:39 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8080"] 

啓動時沒有異常,但我敢肯定,我會得到他們。 另外,如果我加入到persistance.xml

<property name="hibernate.hbm2ddl.auto" value="update"/> 

我有例外:

2011-04-08 20:50:17,160 - INFO Version - HV000001: Hibernate Validator 4.3.0.Final 
2011-04-08 20:50:18,221 - INFO SchemaUpdate - HHH000228: Running hbm2ddl schema update 
2011-04-08 20:50:18,222 - INFO SchemaUpdate - HHH000102: Fetching database metadata 
2011-04-08 20:50:18,227 -ERROR SchemaUpdate - HHH000319: Could not get database metadata 
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70) 
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) 
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:194) 
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:492) 
    .... 
2011-04-08 20:50:18,238 -ERROR SchemaUpdate - HHH000299: Could not complete schema update 
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70) 
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) 

誰能幫助我瞭解應該如何定,好嗎?

回答

2

似乎解決方案是在最接近topic

它是不是在第一時間(不工作),明確對我來說,因爲hibernate issue

我已經發現,如果我用我的persistence.xml是一般問題解決

java://comp/env/jdbc/myDatabase 

例如

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<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_2_0.xsd" 
version="2.0"> 
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <non-jta-data-source>java://comp/env/jdbc/jndisqldbhello</non-jta-data-source> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.connection.datasource" value="java://comp/env/jdbc/jndisqldbhello"/> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.format_sql" value="true" /> 
     <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/> 
    </properties> 
</persistence-unit> 
</persistence> 

,但如果我添加屬性

<property name="hibernate.hbm2ddl.auto" value="create"/> 

它不起作用(((。

如果有任何建議,請通知我,謝謝。