package org.drools.grid.service.directory.impl;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.drools.grid.Grid;
import org.drools.grid.GridServiceDescription;
import org.drools.grid.MessageReceiverHandlerFactoryService;
import org.drools.grid.io.MessageReceiverHandler;
import org.drools.grid.service.directory.Address;
import org.drools.grid.service.directory.WhitePages;
public class JpaWhitePages
implements
WhitePages,
MessageReceiverHandlerFactoryService {
private EntityManagerFactory emf;
public JpaWhitePages(EntityManagerFactory emf) {
this.emf = emf;
}
public GridServiceDescription create(String serviceDescriptionId) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
GridServiceDescription gsd = new GridServiceDescriptionImpl( serviceDescriptionId );
em.persist( gsd );
em.getTransaction().commit();
em.close();
return new GridServiceDescriptionJpa( gsd,
emf );
}
public GridServiceDescription lookup(String serviceDescriptionId) {
GridServiceDescription gsd = this.emf.createEntityManager().find( GridServiceDescriptionImpl.class,
serviceDescriptionId );
return (gsd == null) ? null : new GridServiceDescriptionJpa( gsd,
emf );
}
public void remove(String serviceDescriptionId) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
GridServiceDescription<WhitePages> gsd = em.find( GridServiceDescriptionImpl.class,
serviceDescriptionId );
for ( Address address : gsd.getAddresses().values() ) { // because JPA won't cascade delete to orphans
em.remove( address );
}
em.remove( gsd );
em.getTransaction().commit();
em.close();
}
public MessageReceiverHandler getMessageReceiverHandler() {
return new WhitePagesServer( this );
}
public List<GridServiceDescription> lookupServices(Class clazz) {
throw new UnsupportedOperationException( "Not supported yet." );
}
public void registerSocketService(Grid grid, String id, String ip, int port) {
WhitePagesImpl.doRegisterSocketService(grid, id, ip, port);
}
}