Ошибка при использовании транзакции гибернации в сервлете - PullRequest
0 голосов
/ 09 ноября 2019

Я не знаю, как метод getCurrentSession (), работающий в javaBean, который будет использоваться в сервлете

Я настроил hibernate sessionFactory в applicationContext.xml и 'current_session_context_class' в hibernate.cfg.xml.

это мой служебный компонент:

@Service()
public class serviceDao{
    @Autowired
    private sessionFactory sessionFactory;

    public session getSession(){
        return sessionFactory.getCurrentSession();
    }
    public void startTransaction(){
        getSession().beginTransaction();
    }
    public void submitTransaction(){
        getSession().getTransaction().commit();
    }
    public void doSomething(){
        getSession.createQuery("...");
        ......
    }
}

это сервлет

public class CommentAction extends HttpServlet {
    private serviceDao serviceDao;

    @Override
    public void init() throws ServletException {
        super.init();
        ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
        serviceDao = (serviceDao) context.getBean("serviceDao");
    }

    public void doPost(){
        serviceDao.startTransaction();
        serviceDao.doSomething();
        serviceDao.submitTransaction();
    }
}

Если сервлет обрабатывает 10 запросов подряд, он сообщит об ошибке.

09-Nov-2019 23:19:11.206 [http-nio-8080-exec-123] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [commentAction] in context with path [] threw exception
    java.lang.IllegalStateException: Transaction already active
        at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:74)
        at org.hibernate.internal.AbstractSharedSessionContract.beginTransaction(AbstractSharedSessionContract.java:467)
        at sun.reflect.GeneratedMethodAccessor251.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:350)
        at com.sun.proxy.$Proxy358.beginTransaction(Unknown Source)
        at com.qiang.dao.serviceDao.startTransaction(serviceDao.java:28)
        at com.qiang.dao.serviceDao$$FastClassBySpringCGLIB$$19d44572.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:671)
        at com.qiang.dao.serviceDao$$EnhancerBySpringCGLIB$$71a65c7d.startTransaction(<generated>)
        at com.qiang.servlet.CommentAction.doPost(CommentAction.java:35)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at com.qiang.servlet.LoginFilter.doFilter(LoginFilter.java:61)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

1 Ответ

0 голосов
/ 09 ноября 2019

Здравствуйте, вы можете проверить документацию java, четко объясняя, в чем реальная проблема.

открытый класс IllegalStateException расширяет RuntimeException

Сигналы о том, что метод был вызван в недопустимое или неподходящее время. Другими словами, среда Java или приложение Java не находятся в надлежащем состоянии для запрошенной операции. С тех пор: JDK1.1 См. Также: Сериализованная форма

введите описание ссылки здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...