...
Code Block | ||||
---|---|---|---|---|
| ||||
public static void execute()
{
ClientService cs = SpringContext.getBean( ClientService.class );
cs.addPositionAndOu();
}
|
Manualne zarządzanie transakcjami
Możliwe jest manualne zarządzanie transakcjami bez potrzeby tworzenia nowych klas. Istnieje możliwość manualnego zarządzania transakcjami w przypadkach gdy potrzebujemy większej kontroli lub potrzebujemy ich w obszarze kodu, w którym nie mamy możliwości skorzystania z adnotacji opisanych powyżej.
W tym celu możemy wykorzystać klasę TransactionManagerFactory
Code Block | ||||
---|---|---|---|---|
| ||||
TransactionTemplate tt = new TransactionTemplate( TransactionManagerFactory.getHibernateTransactionManager() ); tt.execute( new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult( TransactionStatus status ) { QueryExecutor qe = ComponentFactory.getQueryExecutor(); SQLQuery sql = qe.createSQLQuery( ... ); ... sql.executeUpdate(); } } ); |
...
Code Block | ||||
---|---|---|---|---|
| ||||
SharkTransactionManager= TransactionManagerFactory.getSharkTransactionManager(); TransactionStatus txStatus = null; try { txStatus = mgr.getTransaction( new DefaultTransactionDefinition() ); SharkTransaction sharkTransaction = mgr.getSharkTransaction(); ...//wykonywanie operacji na transakcji mgr.commit( txStatus ); } catch ( Exception ex ) { mgr.rollback( txStatus ); } |
SharkTransactionTemplate
Klasa com.suncode.pwfl.transaction.support.SharkTransactionTemplate
ułatwia zarządzanie transakcją Shark'ową w czytelny i bezpieczny sposób.
Tip |
---|
Wszędzie tam, gdzie potrzebujemy transakcję Shark'ową powinniśmy wykorzystywać klasę SharkTransactionTemplate ze względu na łatwiejsze jej użycie. Obsługa kodu transakcyjnego może być skomplikowana i wymaga uważnego traktowania. |
Jeżeli kod wykorzystujący transakcję zwraca wynik, wywołanie będzie wyglądać następująco:
Code Block |
---|
SharkTransactionTemplate tx = new SharkTransactionTemplate();
int result = tx.execute( new SharkTransactionCallback<Integer>()
{
@Override
public Integer doInSharkTransaction( SharkTransaction transaction, TransactionStatus status )
throws Exception
{
// wykorzystanie transakcji
return 1;
}
} ); |
W przypadku, gdy wywołujemy procedurę która nie zwraca żadnego wyniku, możemy skorzystać z innego callback'u SharkTransactionCallbackWithoutResult
:
Code Block |
---|
SharkTransactionTemplate tx = new SharkTransactionTemplate();
tx.execute( new SharkTransactionCallbackWithoutResult()
{
@Override
public void doInSharkTransactionWithoutResult( SharkTransaction transaction, TransactionStatus status )
throws Exception
{
// wykorzystanie transakcji
}
}; |
Info |
---|
Domyślna konfiguracja |
Przydatne zasoby:
...