- Java EE 8 Design Patterns and Best Practices
- Rhuan Rocha Jo?o Purifica??o
- 331字
- 2021-07-23 16:55:00
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.
- Social Media Mining with R
- Hands-On DevOps with Vagrant
- VMware Horizon View 6 Desktop Virtualization Cookbook
- 精通Linux內核開發
- Windows Vista融會貫通
- 深入理解eBPF與可觀測性
- Linux系統安全基礎:二進制代碼安全性分析基礎與實踐
- AWS Development Essentials
- 計算機系統:基于x86+Linux平臺
- NetDevOps入門與實踐
- OpenSolaris設備驅動原理與開發
- Windows 7實戰從入門到精通
- Troubleshooting Docker
- 嵌入式微系統
- VMware vSphere 5.1 Cookbook