In meiner Wicket Anwendung zugreifen habe ich diese Serviceklasse:Wicket - Rohrbruch Ausnahme erhalten, wenn 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) {}
}
Diese Dienstklasse in einen Wicket-Panel "injiziert" wird:
public class MyPanel extends Panel {
@SpringBean()
private DatabaseService service;
}
Es funktioniert fein. Aber wenn ich die Anwendung Stunden später öffnen (Server noch läuft), erhalte ich folgende Fehlermeldung:
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)
Ist es im Zusammenhang mit der (un) Mechaniken von Wicket lösen?
Ist mögliches Szenario: DB mehr Abfrage ausgeführt wird, Wicket Komponente existiert nicht mehr (Seite reloodiert)? Wie lange ist das JNDI-Timeout definiert? –
Eine wilde Vermutung, aber: stürzt Ihre Abfrage Mysql nicht ab? –
Wenn ich F5 drücke, wird die Seite korrekt neu geladen. Ich habe vergessen zu erwähnen, dass ich Wicket Security/Authentification verwende. Vielleicht ist die Sitzung nicht mehr gültig, was den SQL-Absturz verursacht ... –