Ist die Wiederverwendung der ut-Instanz im folgenden Code korrekt?Kann ich eine UserTransaction-Instanz nach commit() wiederverwenden?
UserTransaction ut = (UserTransaction)ctx.lookup("java:comp/UserTransaction");
ut.begin();
doSomeWork();
ut.commit();//Or rollback (I think it doesn't matter)
ut.begin(); //Or rollback (I think it doesn't matter)
doOtherWork();
ut.commit();
Wenn die JNDI Ressource wird so definiert:
Reference atomikosUserTransactionFactoryDS = new Reference("com.atomikos.icatch.jta.UserTransactionImp",
"com.atomikos.icatch.jta.UserTransactionFactory", null);
atomikosUserTransactionFactoryDS.add(new RefAddr("name") {
public Object getContent() {
return "UserTransaction";
}});
atomikosUserTransactionFactoryDS.add(new RefAddr("type") {
public Object getContent() {
return "com.atomikos.icatch.jta.UserTransactionImp";
}});
initContext.rebind("java:comp/UserTransaction", atomikosUserTransactionFactoryDS);
Was ich bin mir nicht sicher, ob ich eine andere Lookup hinzufügen muß, und so eine neue Usertransaction aus der Fabrik holen, bevor eine neue UserTransaction beginnen?
Ich glaube nicht, dass es relevant ist, aber wie die Ressource Definition angibt, verwende ich Atomikos als meine Transaction Manager (und so ist es Fabrik als die Fabrik).
Danke,
Ittai
Eine Aktion sollte nur eine Sache tun. Warum machst du mehrere Dinge, wie zum Beispiel mehrere Transaktionen innerhalb eines Anrufs anzurufen? –
Das tatsächliche Szenario ist ein bisschen anders: Es ist mehr eine Weile (wahr) Schleife, wo innerhalb des Threads auf eine Datei wartet und wenn es einen findet es ut.begin, ut.commit verwendet. Am Ende jeder solchen Iteration schläft der Thread und so übertrage ich die Transaktion vor dem Schlaf und wenn sie erwacht, wenn es eine Datei gibt, dann gibt es eine neue logische Transaktion. Natürlich könnten Sie den Code einfach umformatieren, sobald eine Datei gefunden wurde, zu einer anderen Methode, die die ut ergreift und die Logik übernimmt und festlegt, aber das aktuelle Design ist nicht meins und ich wollte nur verifizieren, dass das nicht inkorrekt ist. Danke für deinen Kommentar. – Ittai