Ich stelle diese Frage speziell für Stateless Session Bean. Ich wusste, dass ich die DataSource
mit der @Resource
Annotation leicht einspritzen kann. Aber ich weiß nicht, was ist der richtige Weg, um die Connection
zu bekommen. Ist es in jeder Methode der Bean oder in der Methode mit annotiert? Und auch für die Schließung der Connection
. Muss ich es innerhalb des finally-Blocks in jedem Methodenaufruf oder in der mit @PreDestroy
annotierten Methode schließen?Richtige Art, JDBC-Verbindung in EJB 3 (SLSB) zu behandeln
Ist es sicher, eine Instanzvariable für die Connection
, zum Beispiel zu erstellen:
@Stateless
public class MyBean {
@Resource private DataSource ds;
private Connection conn;
@PostConstruct
public void onCreate() {
conn = ds.getConnection(); // within try catch block
}
@PreDestroy
public void onDestroy() {
conn.close() // within try catch block
}
}
Oder sollte ich sie in jeder Methode wie folgt lokal erstellen:
@Stateless
public class MyBean {
@Resource private DataSource ds;
public void method1() {
Connection conn = null;
// get and close connection...
}
public void method2() {
Connection conn = null;
// get and close connection...
}
}
Einige Leute im Internet mach es so, und einige andere tun das auch. Was ist die richtige Methode, die in einer Anwendung mit hohem Anforderungsverkehr implementiert werden soll? Wenn die Bean-Instanz wieder in den EJB-Pool zurückgegeben wird, bleibt die Connection
geöffnet oder wird sie an den Datenbankpool zurückgegeben?
Hinweis: Die Anwendung verwendet die native JDBC-API. Es gibt keine JPA, JDO, etc .. Der Anwendungsserver ist Wildfly.