Beispiel: Verbindungen mit Parallelität verwenden
Eine ausführbares oder aufrufbares Objekt kann die Verbindungen verwenden, die die erstellende Komponente über die java:comp-Ressourcenreferenzen erhalten hat.
Weitere Informationen zu Ressourcenreferenzen finden Sie im Artikel "Referenzen". Es folgt ein Beispiel für eine Task, die Verbindungen ordnungsgemäß verwendet:
class GoodTask implements Callable<Object>
{
DataSource ds;
public Task() throws NamingException
{
// Verbindungsfactory oder Datenquelle als
// Klasseninstanzdaten zwischenspeichern.
InitialContext ic = new InitialContext();
// Es wird angenommen, dass für die erstellte Java EE-Komponente die folgende
// Ressourcenreferenz im Implementierungsdeskriptor definiert ist.
ds = (DataSource)ic.lookup("java:comp/env/jdbc/myDataSource");
}
// Wenn die Asynchronous-Bean-Methode aufgerufen wird, rufen Sie eine Verbindung ab,
// verwenden Sie diese, und schließen Sie sie dann.
public Object call() throws SQLException
{
try (Connection c = ds.getConnection()) {
// Verbindung jetzt verwenden.
return someResult;
}
}
}
Es folgt ein Beispiel für eine Task, die Verbindungen nicht ordnungsgemäß verwendet:
class BadTask implements Callable<Object>
{
DataSource ds;
// Diese Angabe darf nicht gemacht werden. Verbindungen
// können nicht über Methodenaufrufe zwischengespeichert werden.
Connection c;
public BadTask() throws NamingException, SQLException
{
// Verbindungsfactory oder Datenquelle als
// Klasseninstanzdaten zwischenspeichern.
InitialContext ic = new InitialContext();
ds = (DataSource)ic.lookup("java:comp/env/jdbc/myDataSource");
// Hier wurden die Regeln nicht beachtet...
c = ds.getConnection();
}
// Wenn die Methode aufgerufen wird, verwenden Sie unzulässigerweise die
// zwischengespeicherte Verbindung, und Sie werden zur Laufzeit voraussichtlich
// eine Reihe von Ausnahmen zu J2C sehen.
public Object call()
{
// Verbindung jetzt verwenden.
return someResult;
}
}