wie ein commit für eine Transaktion in EJB?
Habe ich das folgende Szenario,
public void someEjbMethod1()
{
for (int i=0; i=10; i++)
{
em.merge(arr[i]);
em.flush();
}
}
Muss ich Zusammenführen jedes Objekt (arr[i]
) getrennt. wie der obige code verpflichten sich, alle die arr[i]
Instanzen am Ende von der Funktion.
Ich bin am überlegen, Folgendes zu tun:
public void someEjbMethod1()
{
for (int i=0; i=10; i++)
{
saveObj(arr[i]);
}
}
//should I use a transaction attribute here??
public void saveObj(SomeObject obj)
{
em.merge(arr[i]);
em.flush();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten container-verwalteten Transaktionen, können Sie die Verwendung der @TransactionAttribute mit dem Wert TransactionAttributeType.REQUIRES_NEW zu versehen
saveObj
Methode:Dadurch wird sichergestellt, dass eine neue Transaktion gestartet werden, für jeden Aufruf des
saveObj
Methode. Die vorhandene Transaktion im Zusammenhang mit dersomeEjbMethod
wird angehalten, vor jedem Aufruf dessaveObj
Methode. Jede Transaktion begann für diesaveObj
Methode begangen werden, auf, zurück, und daher jede Entität wird in der Datenbank aktualisiert werden, in einem eigenen Transaktion.saveObj
jedoch, in der app-server anmelden, der update-sql-Abfrage habe gedrucktejb-jar.xml
oderorion-ejb-jar.xml
- Datei, deren Einträge würde override-annotation? In der Regel werden die container verwendet den deklarierten Attribute in den Anmerkungen, es sei denn, es ist ein deployment-Deskriptor beschreibt die Werte. Im Falle eines Konflikts, die Werte, die im deployment-Deskriptor Vorrang.Auf Wunsch können Sie ein UserTransaction, haben Sie einen Blick hier für einige inspiration.