Wicket - 访问数据库时出现管道异常

时间:2017-10-13 12:30:29

标签: spring hibernate wicket

在我的wicket应用程序中,我有这个服务类:

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) {}
} 

此服务类被“注入”wicket面板:

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)

是否与wicket的(un)分离机制相关联?

1 个答案:

答案 0 :(得分:0)

MySQL连接通常会在一段时间后超时。如果您使用数据源/连接池并且不使用连接验证,则会导致异常。从您已粘贴的堆栈跟踪中我看到您使用apache dbcp作为数据源,因此我认为您应该在其上设置以下参数:

JOINs