官术网_书友最值得收藏!

Implementing the PersistenceManager class

We need to manage all processes of persistence and query data. For this, we need to create a class. 

The PersistenceManager class is responsible for managing all persistence processes and query processes:

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;


public class PersistenceManager {

private Set<StageManager> stateManagers;

@Inject @Transactional Transaction transaction;

@PostConstruct
public void init(){
stateManagers = new LinkedHashSet<StageManager>();

}

public Optional<Entity> persist ( Entity entity ) {

if ( entity instanceof Employee ){
stateManagers.add( new EmployeeStageManager( (Employee)
entity ) );
}

return Optional.ofNullable(entity);
}


public void begin() throws Exception {

if( !transaction.isOpened() ){
transaction.begin();
}
else{

throw new Exception( "Transaction already is opened" );

}
}

public Optional<Entity> load(Object id){

Entity entity = stateManagers.stream()
.filter( e-> e.getEntity().getId().equals( id ) )
.map( s->s.getEntity() )
.findFirst()
.orElseGet( ()-> new EmployeeStoreManager().load( id ) );

if( Optional.ofNullable(entity).isPresent()
&& stateManagers.stream().map( s->s.getEntity()
).collect( Collectors.toList() ).contains( entity ) )
stateManagers.add( new EmployeeStageManager( (Employee)
entity) );

return Optional.ofNullable(entity);

}


public void commit() throws Exception {

if( transaction.isOpened() ){
stateManagers.stream().forEach( s-> s.flush() );
transaction.commit();
}
else{

throw new Exception( "Transaction is not opened" );

}
}


public void rollback() throws Exception {

if( transaction.isOpened() ) {
stateManagers = new LinkedHashSet<StageManager>();
transaction.rollback();
}

else {

throw new Exception( "Transaction is not opened" );

}
}
}

In the preceding code, we have the PersistenceManager class. This class has the stateManagers attribute, which is a set of StateManager used to control the read and write of each object model. It also has the Transaction attribute, which is used to control the transaction lifecycle. This class also has the persist method, which is used to write the data represented by the object model; the begin method, used to begin the transaction; the load method, used to read an object model's data; the commit method, used to commit the transaction; and finally, the rollback method, which is used to roll back the transaction.

主站蜘蛛池模板: 绥阳县| 凌海市| 盐亭县| 枞阳县| 工布江达县| 青阳县| 托克托县| 科尔| 称多县| 黑水县| 上犹县| 贵阳市| 铅山县| 安阳市| 宁城县| 砚山县| 磐安县| 深水埗区| 永兴县| 乌审旗| 奉新县| 合水县| 漳浦县| 璧山县| 翁牛特旗| 云霄县| 苏尼特右旗| 隆回县| 崇信县| 方山县| 左权县| 灌云县| 屯昌县| 武山县| 沽源县| 长治市| 聂拉木县| 青海省| 邢台市| 车致| 惠州市|