2017-10-13 5 views
0

에 액세스 할 때 깨진 파이프 예외를 얻기 나는이 서비스 클래스가 있습니다개찰구 - 내 개찰구 응용 프로그램에서 DB

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Component; 
import org.springframework.transaction.annotation.Transactional; 

@Component 
@Transactional 
public class DatabaseService { 

    @Autowired 
    SessionFactory sessionFactory; 

    public void save(Message m) {} 
} 

클래스는 개찰구 패널에 "주입"되는이 서비스는 :

public class MyPanel extends Panel { 

    @SpringBean() 
    private DatabaseService service; 

} 

그것은 작동을 벌금.

java.net.SocketException: Datenübergabe unterbrochen (broken pipe) 
     at java.net.SocketOutputStream.socketWrite0(Native Method) 
     at java.net.SocketOutputStream.socketWrite(Unknown Source) 
     at java.net.SocketOutputStream.write(Unknown Source) 
     [...] 
     at java.io.BufferedOutputStream.flushBuffer(Unknown Source) 
     at java.io.BufferedOutputStream.flush(Unknown Source) 
     at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3634) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2460) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547) 
     at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4874) 
     at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:371) 
     at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:328) 
     [...] 
(JdbcResourceLocalTransactionCoordinatorImpl.java:214) 
     at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:52) 
     at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1525) 
     at org.springframework.orm.hibernate5.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:500) 
     [...] 
     at de.project.database.DatabaseService$$EnhancerBySpringCGLIB$$8fa0ab80.getMessages(<generated>) 
     at WICKET_de.project.database.DatabaseService$$FastClassByCGLIB$$68e55e7c.invoke(<generated>) 
     at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
     at org.apache.wicket.proxy.LazyInitProxyFactory$AbstractCGLibInterceptor.intercept(LazyInitProxyFactory.java:350) 
     at WICKET_de.project.database.DatabaseService$$EnhancerByCGLIB$$a9cbdf2b.getMessages(<generated>) 
     at de.project.pms.MyPanel.<init>(MyPanel.java:26) 
     at de.project.home.projectHome.<init>(projectHome.java:17) 

는 (UN)과 연결되어 개찰구의 mechanismn를 분리 : 나는 (서버가 계속 실행) 나중에 응용 프로그램 시간을 열면, 나는 오류를 다음 수신?

+0

가능한 시나리오 : DB가 더 이상 쿼리를 실행되어, 개찰구 구성 요소 더 이상 존재하지 않습니다 (페이지 재분배)? JNDI 제한 시간은 얼마나 오래 정의되어 있습니까? –

+0

야생 추측이지만 : 쿼리가 MySQL을 크래시하지 않습니까? –

+0

F5 키를 누르면 측면이 올바르게 다시로드됩니다. 나는 Wicket Security/Authentification을 사용하는 것을 잊어 버렸다. 어쩌면 세션이 더 이상 SQL 충돌을 일으키는 유효하지 않습니다 ... –

답변

0

MySQL 연결은 일반적으로 일정 시간이 지나면 시간 초과됩니다. 이로 인해 데이터 소스/연결 풀을 사용하고 연결 유효성 검사를 사용하지 않는 경우 예외가 발생합니다. 스택 추적에서 당신은 당신이 데이터 소스로 아파치 DBCP를 사용하는 것을 볼 붙여 넣기, 그래서 당신이 그것을에서 다음 매개 변수를 설정해야한다고 생각 :

validationQuery, testOnCreate, testOnBorrow, testOnReturn, testWhileIdle