2012-06-20 4 views
0

Tomcat이 나는이 메시지를 얻을 시작합니다봄 + 최대 절전 모드 + 주석 + XmlWebApplicationContext이

INFO: Initializing Spring FrameworkServlet 'spring' 
2012-06-20 17:02:55,209 INFO [org.springframework.web.servlet.DispatcherServlet] - <FrameworkServlet 'spring': initialization started> 
2012-06-20 17:02:55,243 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - <Refreshing WebApplicationContext for namespace 'spring-servlet': startup date [Wed Jun 20 17:02:55 CEST 2012]; root of context hierarchy> 
2012-06-20 17:02:55,305 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - <Loading XML bean definitions from ServletContext resource [/WEB-INF/spring-servlet.xml]> 



2012-06-20 17:02:56,094 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - <Bean 'hibernateConfiguration' of type [class com.xxxxxxxxxx.android.market.config.HibernateConfiguration$$EnhancerByCGLIB$$53f79727] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)> 
2012-06-20 17:02:56,690 INFO [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean] - <Building new Hibernate SessionFactory> 
2012-06-20 17:02:57,285 INFO [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean] - <Updating database schema for Hibernate SessionFactory> 
2012-06-20 17:02:57,621 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - <Bean 'sessionFactoryBean' of type [class org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)> 


2012-06-20 17:02:57,694 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - <Pre-instantiating singletons in org.s[email protected]46ed5d9d: defining beans [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,beanConfiguration,hibernateConfiguration,AppService,appController,homeController,jspViewResolver,messageSource,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,appCategory,appDAO,appReleaseDAO,appService,sessionFactoryBean,transactionManager,persistenceExceptionTranslationPostProcessor]; root of factory hierarchy> 
2012-06-20 17:02:58,011 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - <Mapped URL path [/{id}] onto handler 'appController'> 
2012-06-20 17:02:58,012 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - <Mapped URL path [/{id}.*] onto handler 'appController'> 
2012-06-20 17:02:58,012 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - <Mapped URL path [/{id}/] onto handler 'appController'> 
2012-06-20 17:02:58,012 INFO [org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping] - <Root mapping to handler 'homeController'> 
2012-06-20 17:02:58,482 INFO [org.springframework.web.servlet.DispatcherServlet] - <FrameworkServlet 'spring': initialization completed in 3273 ms> 
Jun 20, 2012 5:02:58 PM org.apache.coyote.http11.Http11Protocol start 
INFO: Starting Coyote HTTP/1.1 on http-8080 
Jun 20, 2012 5:02:58 PM org.apache.jk.common.ChannelSocket init 
INFO: JK: ajp13 listening on /0.0.0.0:8009 
Jun 20, 2012 5:02:58 PM org.apache.jk.server.JkMain start 
INFO: Jk running ID=0 time=0/122 config=null 
Jun 20, 2012 5:02:58 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 4237 ms 

가 여기 내 최대 절전 모드 설정 클래스입니다. 주석이 달렸고, Junit tets @ContextConfiguration 내부에서 사용할 때 모든 것이 작동합니다.

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here 
    org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63) 
    org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:685) 
    com.xxxxxxxxxxxxx.android.market.dao.AppDAOImpl.currentSession(AppDAOImpl.java:22) 
    com.xxxxxxxxxxxxx.android.market.dao.AppDAOImpl.getAppById(AppDAOImpl.java:46) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    $Proxy21.getAppById(Unknown Source) 
    com.xxxxxxxxxxxxx.android.market.service.app.AppServiceImpl.getAppById(AppServiceImpl.java:29) 
    com.xxxxxxxxxxxxx.android.market.controller.AppController.getApp(AppController.java:22) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 



    package com.xxxxxxxxxxxxx.android.market.controller; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

import com.xxxxxxxxxxxxx.android.market.dao.App; 
import com.xxxxxxxxxxxxx.android.market.service.app.AppService; 

@Controller 
public class AppController { 

    @Autowired 
    private AppService appService; 

    @RequestMapping(value = "/{id}", method = RequestMethod.GET) 
    public ModelAndView getApp(@PathVariable int id) { 
     App app = appService.getAppById(id); 
     return new ModelAndView("appXmlView", BindingResult.MODEL_KEY_PREFIX 
       + "app", app); 
    } 
} 




    package com.xxxxxxxxxxxxx.android.market.service.app; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 

import com.xxxxxxxxxxxxx.android.market.dao.App; 
import com.xxxxxxxxxxxxx.android.market.dao.AppDAO; 

@Service("AppService") 
public class AppServiceImpl implements AppService { 

    @Autowired 
    private AppDAO appDAO; 

    public boolean saveApp(App app) { 
     return appDAO.insert(app); 
    } 

    public void deleteApp(App app) { 
     appDAO.delete(app); 

    } 

    public void updateApp(App app) { 
     appDAO.update(app); 
    } 

    @Transactional 
    public App getAppById(int id) { 
     return appDAO.getAppById(id); 
    } 

    public App getAppByName(String name) { 
     return appDAO.getAppByName(name); 
    } 

} 




import java.util.Properties; 

import org.hibernate.dialect.MySQL5InnoDBDialect; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; 
import org.springframework.orm.hibernate3.HibernateTransactionManager; 
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

import com.xxxxxxxxxxxxxxxx.android.market.dao.App; 
import com.xxxxxxxxxxxxxxxx.android.market.dao.AppCategory; 
import com.xxxxxxxxxxxxxxxx.android.market.dao.AppRelease; 

새로운 HibernateConfiguration 파일 : 데이터베이스에서 나머지-API에 의해 일부 항목을 얻을 것이다 때

package com.xxxxxxxxxxxxx.android.market.config; 

import java.util.Properties; 

import org.hibernate.dialect.MySQL5InnoDBDialect; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; 
import org.springframework.orm.hibernate3.HibernateTransactionManager; 
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean; 

import com.xxxxxxxxxxxxx.android.market.dao.xxx; 
import com.xxxxxxxxxxxxx.android.market.dao.xxx; 
import com.xxxxxxxxxxxxx.android.market.dao.xxx; 

@Configuration 
public class HibernateConfiguration { 

    @Bean 
    public AnnotationSessionFactoryBean sessionFactoryBean() { 
     Properties props = new Properties(); 
     props.put("hibernate.dialect", MySQL5InnoDBDialect.class.getName()); 
     props.put("hibernate.format_sql", "true"); 
     props.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
     props.put("hibernate.connection.password", "philipp"); 
     props.put("hibernate.connection.url", "jdbc:mysql://localhost/Market"); 
     props.put("hibernate.connection.username", "philipp"); 

     AnnotationSessionFactoryBean bean = new AnnotationSessionFactoryBean(); 
     bean.setAnnotatedClasses(new Class[] { xxx.class, xxx.class, xxx.class }); 
     bean.setHibernateProperties(props); 
     bean.setSchemaUpdate(true); 
     return bean; 
    } 

    @Bean 
    public HibernateTransactionManager transactionManager() { 
     return new HibernateTransactionManager(sessionFactoryBean().getObject()); 
    } 

    @Bean 
    public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() { 
     return new PersistenceExceptionTranslationPostProcessor(); 
    } 

} 

내 봄-servlet.xml에

<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:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" 
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
     http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 

    <context:annotation-config /> 

    <!-- eingefügt aus app-context --> 
    <context:component-scan base-package="com.xxxxxxxxxxxxx.android.market.config" /> 
    <context:component-scan base-package="com.xxxxxxxxxxxxx.android.market.market.dao" /> 
    <context:component-scan base-package="com.xxxxxxxxxxxxx.android.market.service.app" /> 
    <context:component-scan base-package="com.xxxxxxxxxxxxx.android.market.controller" /> 
    <!-- eingefügt aus app-context --> 

    <bean id="jspViewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

    <bean id="messageSource" 
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="classpath:messages" /> 
     <property name="defaultEncoding" value="UTF-8" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

</beans> 

지금,이 얻을

@Configuration 
@EnableTransactionManagement 
public class HibernateConfiguration { 

    @Bean 
    public AnnotationSessionFactoryBean sessionFactoryBean() { 
     Properties props = new Properties(); 
     props.put("hibernate.dialect", MySQL5InnoDBDialect.class.getName()); 
     props.put("hibernate.format_sql", "true"); 
     props.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
     props.put("hibernate.connection.password", "philipp"); 
     props.put("hibernate.connection.url", "jdbc:mysql://localhost/BusinessMarket"); 
     props.put("hibernate.connection.username", "philipp"); 

     AnnotationSessionFactoryBean bean = new AnnotationSessionFactoryBean(); 
     bean.setAnnotatedClasses(new Class[] { AppCategory.class, App.class, AppRelease.class }); 
     bean.setHibernateProperties(props); 
     bean.setExposeTransactionAwareSessionFactory(false); 
     bean.setSchemaUpdate(true); 
     return bean; 
    } 

    @Bean 
    public HibernateTransactionManager transactionManager() { 
     return new HibernateTransactionManager(sessionFactoryBean().getObject()); 
    } 

    @Bean 
    public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() { 
     return new PersistenceExceptionTranslationPostProcessor(); 
    } 

} 
+0

오류를 다음과 같이 HibernateConfiguration에 @EnableTransactionManagement을 지정하려고, 느릅 나무는 생성 된 클래스입니다. 당신의 에러는 Hibernate 설정에서 나온다 :'org.hibernate.HibernateException : 쓰레드에 바인드 된 Hibernate Session 없음 '. 이 특별한 경우에 멀티 스레딩 또는 스레드 풀링을 사용합니까? 또한 올바른 MySQL 포트 (기본값은 3306)를 지정합니까? – Grooveek

+0

난 기본 물건을 사용하고 내가 Junit 테스트와 함께 실행하면 모든 것이 잘 동작한다. – Philippxp

+0

AppServiceImpl 및 AppController를 확인할 수 있습니까? –

답변

0

자바에서 사용하는 스프링 3.1 구성

<tx:annotation-driven transaction-manager="transactionManager" />

제거하고이 $ Proxy21에서 오지 않는다

@Configuration 
@EnableTransactionManagement 
public class HibernateConfiguration 
+0

을 app-context.xml에서 삭제하고 @@ EnableTransactionManagement를 추가하십시오. bean.setExposeTransactionAwareSessionFactory (false);를 추가하십시오. 이제이 오류가 발생합니다 : org.springframework.orm.hibernateSystemException : CurrentSessionContext가 구성되지 않았습니다! 필자의 초기 게시글 끝에 새로운 최대 절전 모드 구성을 추가합니다. – Philippxp

+0

AppServiceImpl에서 @Transaction을 메서드에 추가하면 이제 작동합니다 :-) thx! – Philippxp

+0

도움이 되니 기쁩니다. @Configuration 클래스와 XML 파일을로드하는 방법을 지정하지 않았지만 Java에서 트랜잭션 관리자를 지정하고 XML에서 주석 기반 트랜잭션 관리를 활성화하는 데 문제가 있다고 생각됩니다. 루트 컨텍스트의 일부이고 운영자 컨텍스트의 일부입니까? –

관련 문제