동시 요청 실패- "세션이 닫혔습니다!"

사용자 4324324

아래 코드에 무엇이 잘못되었는지 모르겠습니다. 브라우저에서 내 요청을 받으면 제대로 작동합니다. 그러나 동시 요청을 할 때 세션이 닫혔다는 메시지가 실패합니다 ! . 동시에 또는 동시에 (비동기 호출) 아래 두 개의 URL을 치고 있습니다.

http://localhost:8080/getEmployee
http://localhost:8080/getDepartment

Controller.java

@RequestMapping(value = "/getEmployees", method = RequestMethod.POST)
 public @ResponseBody List<Employee> getEmployee() {

        List<Employee> empList = null;
        empList = services.getEmployee();
        return empList;
    }

 @RequestMapping(value = "/getDepartments", method = RequestMethod.GET)
 public @ResponseBody List<Department> getDepartment() {

        List<Department> deptList = null;
        deptList = services.getDepartment();
        return deptList;
    }

두 모델 클래스

Table 1 (Employee)
@Entity
@Table(name = "employee")
public class Employee implements java.io.Serializable {

    private static final long serialVersionUID = 2650114334774359089L;

    @Id
    @Column(name = "id", unique = true, nullable = false, length = 100)
    private String id;

    @Column(name = "name", unique = true, nullable = false, length = 50)
    private String name;

// getter setter

// 두 번째 모델 클래스

Table 2 (Department)
@Entity
@Table(name = "department")
public class Department implements java.io.Serializable {

    private static final long serialVersionUID = 2650114334774359089L;

    @Id
    @Column(name = "id", unique = true, nullable = false, length = 100)
    private String id;

    @Column(name = "dept_name", unique = true, nullable = false, length = 50)
    private String dept_name;

    // getter setter

DAOImpl

@Autowired
    SessionFactory sessionFactory;

    Session session = null;
    Transaction tx = null;

    static final Logger LOGGER = Logger.getLogger(DataDaoImpl.class);
    public List<Employee> getEmployee() throws Exception {
        List<Employee> result = null;
        session = sessionFactory.openSession();
        String hql = "from Employee";
        Query lQuery = session.createQuery(hql);
        result = lQuery.list();
        tx = session.getTransaction();
        session.beginTransaction();
        tx.commit();
        return result;
    }

    public List<Department> getDepartment() throws Exception {
        List<Department> result = null;
        session = sessionFactory.openSession();
        String hql = "from Department";
        Query lQuery = session.createQuery(hql);
        result = lQuery.list();
        tx = session.getTransaction();
        session.beginTransaction();
        tx.commit();
        return result;
    }

ServiceImpl

@Override
    public List<Employee> getEmployee() throws Exception {
        return dataDao.getEmployee();
    }

    @Override
    public List<Department> getDepartment() throws Exception {
        return dataDao.getDepartment();
    }

spring-config.xml

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
        <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
        <property name="username" value="root" />
        <property name="password" value="password"/>
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.srdh.model.Employee</value>
                <value>com.srdh.model.Department</value>

            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>

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

    <bean id="persistenceExceptionTranslationPostProcessor"
        class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

    <bean id="dataDao" class="com.test.dao.DaoImpl"></bean>
    <bean id="dataServices" class="com.test.service.ServicesImpl"></bean>

누구든지 내 코드에서 내가 뭘 잘못했는지 도와 줄 수 있습니까? 부서 및 직원 테이블 모두에 액세스 할 수있는 DAO가 하나뿐입니다. 개별 테이블에서 레코드를 가져 와서 출력에 표시해야합니다. 동시 요청에서 실패합니다.

오류 스택 추적

org.hibernate.HibernateException: createQuery is not valid without active transaction
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
    at com.sun.proxy.$Proxy139.createQuery(Unknown Source)
    at com.srdh.dao.DataDaoImpl.getDepartment(DataDaoImpl.java:49)
    at com.srdh.service.DataServicesImpl.getDepartment(DataServicesImpl.java:26)
    at com.srdh.controller.MainController.getDepartment(MainController.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
org.hibernate.SessionException: Session is closed!
    at org.hibernate.internal.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:133)
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1433)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    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:356)
    at com.sun.proxy.$Proxy139.beginTransaction(Unknown Source)
    at com.srdh.dao.DataDaoImpl.Employee(DataDaoImpl.java:126)
    at com.srdh.service.DataServicesImpl.Employee(DataServicesImpl.java:71)
    at com.srdh.controller.MainController.Employee(MainController.java:73)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
org.hibernate.TransactionException: nested transactions not supported
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:154)
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1435)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Jesper

당신의 DAOImpl외모는 의심 스럽습니다.

봄 콩은 일반적으로 싱글 톤입니다. 실행중인 프로그램에는 Spring Bean의 인스턴스가 하나뿐입니다. 전체 코드를 게시하지 않았지만 클래스 DAOImpl에 세션 및 트랜잭션에 대한 멤버 변수가있는 것 같습니다 .

여러 스레드가 동일한 단일 DAOImpl개체를 동시에 사용하여 멤버 변수를 변경하면 서로 간섭합니다. 한 요청을 처리하는 스레드는 다른 요청을 처리하는 다른 스레드의 세션과 트랜잭션을 볼 수 있습니다.

싱글 톤 스프링 빈에 상태 (멤버 변수)를 넣지 마십시오. sessiontx해서는 안되며, 클래스의 멤버 변수가 될 필요가 없습니다 DAOImpl. 그 지역 변수 방법의 확인 getEmployeegetDepartment대신.

자신의 DAO 객체를 구현하는 대신 SpringData JPA 를 사용하는 것이 더 좋습니다 . 이렇게하면 세션 및 트랜잭션 가져 오기와 같은 낮은 수준의 세부 정보를 직접 처리 할 필요가 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JUnit-org.hibernate.SessionException : 세션이 닫혔습니다.

분류에서Dev

NHibernate 세션이 없거나 세션이 닫혔습니다.

분류에서Dev

CORS 게시 요청 실패

분류에서Dev

HTTP 요청 실행시 Gusle 실패

분류에서Dev

http 요청시 쿠키 전송 실패

분류에서Dev

동시 Coldfusion ORM 데이터베이스 요청 실패

분류에서Dev

양식 제출 요청을 게시하려는 시도 실패

분류에서Dev

Axios cancelToken, 취소 된 요청이 자동으로 실패 함

분류에서Dev

Hibernate 삽입이 작동하지 않음 (요청 처리 실패)

분류에서Dev

Paramiko가 작동하지만 Fabric이 실패 함 (암호 요청)

분류에서Dev

GitHub 페이지에서 HTTP "게시"요청 실패

분류에서Dev

실패한 API 가져 오기 요청 후 useEffect 다시 호출

분류에서Dev

ZeroMQ-CZMQ-Majordomo 패턴-FAST 전송시 요청 손실

분류에서Dev

http 프록시가있는 aiohttp https 요청 실패

분류에서Dev

Axios 게시 요청이 404로 실패 함

분류에서Dev

창 언로드시 Ajax 요청이 실패 함

분류에서Dev

AFNetworking 2-요청 실패시 응답 본문 없음

분류에서Dev

AWS S3에 대한 PUT HTTP 요청 프록시 실패

분류에서Dev

CORS로 인해 실패한 HTTP 게시 요청

분류에서Dev

요청이있는 HTTP 게시 실패 : BadStatusLine

분류에서Dev

장시간 요청 실행

분류에서Dev

HTTPoison 요청이 특정 시스템에서 실패하지만 다른 시스템에서 작동합니다.

분류에서Dev

포드 간 요청 실패

분류에서Dev

요청 처리 실패

분류에서Dev

Alamofire HTTP 요청 실패

분류에서Dev

xmlHTTP 요청 오류 : "실패"

분류에서Dev

POST 요청이 작동 괜찮 동안 OPTIONS HTTP 요청 (404)을 제외하고 실패

분류에서Dev

jQuery $ .getJSON http 요청이 실패하고 똑같은 요청을 수동으로 수행하는 동안

분류에서Dev

Jmeter : 실패한 요청 재 시도에 While 제어기 사용, ThreadGroup 루프 수가 작동하지

Related 관련 기사

  1. 1

    JUnit-org.hibernate.SessionException : 세션이 닫혔습니다.

  2. 2

    NHibernate 세션이 없거나 세션이 닫혔습니다.

  3. 3

    CORS 게시 요청 실패

  4. 4

    HTTP 요청 실행시 Gusle 실패

  5. 5

    http 요청시 쿠키 전송 실패

  6. 6

    동시 Coldfusion ORM 데이터베이스 요청 실패

  7. 7

    양식 제출 요청을 게시하려는 시도 실패

  8. 8

    Axios cancelToken, 취소 된 요청이 자동으로 실패 함

  9. 9

    Hibernate 삽입이 작동하지 않음 (요청 처리 실패)

  10. 10

    Paramiko가 작동하지만 Fabric이 실패 함 (암호 요청)

  11. 11

    GitHub 페이지에서 HTTP "게시"요청 실패

  12. 12

    실패한 API 가져 오기 요청 후 useEffect 다시 호출

  13. 13

    ZeroMQ-CZMQ-Majordomo 패턴-FAST 전송시 요청 손실

  14. 14

    http 프록시가있는 aiohttp https 요청 실패

  15. 15

    Axios 게시 요청이 404로 실패 함

  16. 16

    창 언로드시 Ajax 요청이 실패 함

  17. 17

    AFNetworking 2-요청 실패시 응답 본문 없음

  18. 18

    AWS S3에 대한 PUT HTTP 요청 프록시 실패

  19. 19

    CORS로 인해 실패한 HTTP 게시 요청

  20. 20

    요청이있는 HTTP 게시 실패 : BadStatusLine

  21. 21

    장시간 요청 실행

  22. 22

    HTTPoison 요청이 특정 시스템에서 실패하지만 다른 시스템에서 작동합니다.

  23. 23

    포드 간 요청 실패

  24. 24

    요청 처리 실패

  25. 25

    Alamofire HTTP 요청 실패

  26. 26

    xmlHTTP 요청 오류 : "실패"

  27. 27

    POST 요청이 작동 괜찮 동안 OPTIONS HTTP 요청 (404)을 제외하고 실패

  28. 28

    jQuery $ .getJSON http 요청이 실패하고 똑같은 요청을 수동으로 수행하는 동안

  29. 29

    Jmeter : 실패한 요청 재 시도에 While 제어기 사용, ThreadGroup 루프 수가 작동하지

뜨겁다태그

보관