...
Info |
---|
|
Zaleca się stosowanie adnotacji do zarządzania transakcjami w klasach oznaczonych adnotacją @Sevice |
Przykłady użycia
Code Block |
---|
language | java |
---|
title | Wykonanie kilku operacj w jednej transakcji |
---|
|
@Service
public class CustomServiceImpl
implements CustomService
{
@Autowired
private StructureService structureService;
@Transactional
public void addPositionAndOu()
{
Position p = new Position( "name", "symbol" );
OrganizationalUnit ou = new OrganizationalUnit();
ou.setName( "name" );
ou.setSymbol( "symbol" );
structureService.createPosition( p );
structureService.createOrganizationalUnit( ou );
}
public void addPositionAndOuNonTransactional()
{
Position p = new Position( "name", "symbol" );
OrganizationalUnit ou = new OrganizationalUnit();
ou.setName( "name" );
ou.setSymbol( "symbol" );
structureService.createPosition( p );
structureService.createOrganizationalUnit( ou );
}
}
|
...
Code Block |
---|
language | java |
---|
title | Pobranie własnego serwisu w zadaniu automatycznym |
---|
|
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. W tym celu możemy wykorzystać klasę TransactionManagerFactory
Code Block |
---|
language | java |
---|
title | Zarządzanie transakcjami poprzez TransactionTemplate |
---|
|
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 |
---|
language | java |
---|
title | Zarządzanie transakcjami poprzez TransactionTemplate |
---|
|
final SharkTransactionManager mgr= TransactionManagerFactory.getSharkTransactionManager();
TransactionTemplate tt = new TransactionTemplate( mgr );
tt.execute( new TransactionCallbackWithoutResult()
{
@Override
protected void doInTransactionWithoutResult( TransactionStatus status )
{
SharkTransaction sharkTransaction = mgr.getSharkTransaction();
...
}
} ); |
Code Block |
---|
language | java |
---|
title | Manualne zarządzanie transakcjami |
---|
|
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 );
} |
Przydatne zasoby:
...