2013-07-30 2 views
0

Spring의 propertiesPlaceholderConfigurer로 Hibernate를 설정하는 데 문제가 있습니다. 데이터베이스 설정이있는 키 - 값 쌍을 포함하는 db.properties 파일이 있습니다. 이제 Spring의 applicationContext.xml 파일 내에서 Hibernate를 설정해야한다.ApplicationContext.xml로 최대 절전 모드를 구성하는 중 오류가 발생했습니다.

<?xml version="1.0" encoding="windows-1252"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:lang="http://www.springframework.org/schema/lang" 
     xmlns:osgi="http://www.springframework.org/schema/osgi" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:util="http://www.springframework.org/schema/util" 

     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 
      http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.2.xsd 
      http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd 
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd 
"> 

    <context:component-scan base-package="com.dataart.mediaportal" /> 

<!-- DATA SOURCE AND PERSISTENCE SETTINGS--> 
    <bean id="propertiesPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list> 
       <value>classpath:db.properties</value> 
      </list> 
     </property> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dmDataSource"/> 
     <property name="packagesToScan" value="com.dataart.mediaportal"/> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${db.dialect}</prop> 
       <prop key="hibernate.show_sql">${db.show_sql}</prop> 
       <prop key="hibernate.hbm2ddl.import_files">${db.import_files}</prop> 
       <prop key="hibernate.hbm2ddl.auto">${db.hbm2ddl_auto}</prop> 
       <prop key="connection.pool_size">${db.pool_size}</prop> 
       <prop key="current_session_context_class">${db.current_session_context_class}</prop> 
       <prop key="hibernate.cache.provider_class">${db.provider_class}</prop> 
       <prop key="hibernate.cache.use_second_level_cache">${db.use_second_level_cache}</prop> 
       <prop key="hibernate.cache.use_query_cache">${db.use_query_cache}</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="tm" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

    <bean id="dmDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${db.driver}" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
     <property name="maxActive" value="5" /> 
     <property name="maxWait" value="5000" /> 
    </bean> 

</beans> 

Folder's structure. Maybe this will clear the situation.

db.properies :

db.username=postgres 
db.password=4351 
db.driver=org.postgresql.Driver 
db.url=jdbc:postgresql://localhost/MediaPortalDB 
db.pool_size=1 
db.dialect=org.hibernate.dialect.PostgreSQLDialect 
db.import_files=import.sql 
db.hbm2ddl_auto=create 
db.use_query_cache=true 
db.use_second_level_cache=true 
db.provider_class=org.hibernate.cache.HashtableCacheProvider 
db.show_sql=true 
db.current_session_context_class=thread 

여기

javax.faces.el.EvaluationException: java.lang.ExceptionInInitializerError 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:374) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.ExceptionInInitializerError 
    at com.dataart.mediaportal.db.HibernateUtil.buildSessionFactory(HibernateUtil.java:15) 
    at com.dataart.mediaportal.db.HibernateUtil.<clinit>(HibernateUtil.java:8) 
    at com.dataart.mediaportal.dao.impl.UserDAOImpl.login(UserDAOImpl.java:45) 
    at com.dataart.mediaportal.controller.bean.LoginBean.authorize(LoginBean.java:42) 
    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:597) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    ... 27 more 
Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set 
    at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57) 
    at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39) 
    at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:409) 
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:119) 
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2006) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1289) 
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915) 
    at com.dataart.mediaportal.db.HibernateUtil.buildSessionFactory(HibernateUtil.java:12) 
    ... 38 more 

내 applicationContext.xml이다 :

는하지만 말, 오류가 계속누군가가 해결책을 가르쳐 주거나 나에게 무엇이 잘못 될 수 있는지 말해 주시면 감사하겠습니다.

미리 감사드립니다.

나자르. 오류의 근본 원인 때문에

답변

1

: 당신이 속성 dialect 파일을 제대로 정의되지 않은 것처럼

org.hibernate.HibernateException: Hibernate Dialect must be explicitly set

이 보인다, 그것은 필수 속성입니다.

세션 팩토리를 구성하는 방법 (코드에 표시되지 않음)은 무엇입니까? 당신은 예를 들어, buildSessionFactory 전에 configure()가 호출 전화를해야합니다

new AnnotationConfiguration().configure().buildSessionFactory(); 

는 특정 구성을로드하려면 :

디폴트있는 hibernate.cfg.xml을로드하려면이있는 것처럼

new AnnotationConfiguration().configure("hibernate-specific.cfg.xml")..buildSessionFactory(); 
+0

: <속성 이름 = "hibernate.dialect"> org.hibernate.dialect.PostgreSQLDialect 나는 같은 오류가 점점 계속. 내 applicationContext 전혀 실행되지 quess. –

1

보인다 방언이 누락되었습니다 :

Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set 

이 정보를 추가하면 도움이 될 수 있습니다.

  <prop key="hibernate.dialect"> 
       org.hibernate.dialect.SQLServerDialect //add your specific dialect 
      </prop> 

최대 절전 모드 속성 중 하나입니다. 당신의 재산에

<property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${db.dialect}</prop> 
      <prop key="hibernate.show_sql">${db.show_sql}</prop> 
      <prop key="hibernate.hbm2ddl.import_files">${db.import_files}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${db.hbm2ddl_auto}</prop> 
      <prop key="connection.pool_size">${db.pool_size}</prop> 
      <prop key="current_session_context_class">${db.current_session_context_class}</prop> 
      <prop key="hibernate.cache.provider_class">${db.provider_class}</prop> 
      <prop key="hibernate.cache.use_second_level_cache">${db.use_second_level_cache}</prop> 
      <prop key="hibernate.cache.use_query_cache">${db.use_query_cache}</prop> 
     </props> 
    </property> 

넣어이 : 등록 정보 파일을로드하는 방법

db.dialect=org.hibernate.dialect.PostgreSQLDialect 

:

<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="/WEB-INF/connection.properties" /> 

세션 공장의 예 :

<bean id="XXX" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
     p:dataSource-ref="XXX" > 
    <property name="annotatedClasses"> 
     <list> 
      <value>XXX</value> 
     </list>  
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       XXX 
      </prop> 
      <prop key="hibernate.show_sql">false</prop> 
     </props> 
    </property> 
</bean> 

이 중요한 부분입니다 세션 팩토리 선언의 :

AnnotationSessionFactoryBean 
+0

명시 적으로 다음과 같이 방아쇠에 값을 할당하더라도 : org.hibernate.dialect.PostgreSQLDialect 계속 같은 오류가 발생합니다. 내 applicationContext 전혀 실행되지 quess. –

+1

최대 절전 모드 속성을 올바르게 설정했는지 확인하기 위해 제 대답을 편집했습니다. 여전히 같은 오류가 발생합니까? – Lenymm

+0

예. 내 앱에 코드를 붙여도 아무 것도 바뀌지 않았습니다. 다른 이유가있을 것 같네요. –

0

문제가 다른 곳에 숨겨져 있습니다.내 응용 프로그램 (Facelets/Managed Beans)은 Spring에 의해 전혀 관리되지 않았습니다. web.xml 파일에 다음 라인을 추가 한 후, 모든 일 : - 당신은 서블릿을 사용하는 경우

<application> 
     <el-resolver> 
      org.springframework.web.jsf.el.SpringBeanFacesELResolver 
     </el-resolver> 
</application> 

/JSP 대신의 DispatcherServlet을 추가

<servlet> 
    <servlet-name>example</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>example</servlet-name> 
    <url-pattern>*.form</url-pattern> 
</servlet-mapping> 

희망이 언젠가는 누군가가 도움이 될 것이다. 내가 명시 적으로이 같은 사투리를 최대 절전 모드로 값을 할당 할 경우에도

관련 문제