Example 8.15 Implementing Session Facade - Session Bean
package corepatterns.apps.psa.ejb;
import java.util.*;
import java.rmi.RemoteException;
import javax.ejb.*;
import javax.naming.*;
import corepatterns.apps.psa.core.*;
import corepatterns.util.ServiceLocator;
import corepatterns.util.ServiceLocatorException;
// Note: all try/catch details not shown for brevity.
public class ProjectResourceManagerSession
implements SessionBean {
private SessionContext context;
// Remote references for the
// entity Beans encapsulated by this facade
private Resource resourceEntity = null;
private Project projectEntity = null;
...
// default create
public void ejbCreate()
throws CreateException {
}
// create method to create this facade and to
// establish connections to the required entity
// beans
// using primary key values
public void ejbCreate(
String resourceId, String projectId, ...)
throws CreateException, ResourceException {
try {
// locate and connect to entity beans
connectToEntities(resourceId, projectId, ...);
} catch(...) {
// Handle exceptions
}
}
// method to connect the session facade to its
// entity beans using the primary key values
private void connectToEntities (
String resourceId, String projectId)
throws ResourceException {
resourceEntity = getResourceEntity(resourceId);
projectEntity = getProjectEntity(projectId);
...
}
// method to reconnect the session facade to a
// different set of entity beans using primary key
// values
public resetEntities(String resourceId,
String projectId, ...)
throws PSAException {
connectToEntities(resourceId, projectId, ...);
}
// private method to get Home for Resource
private ResourceHome getResourceHome()
throws ServiceLocatorException {
return ServiceLocator. getInstance().getHome(
"ResourceEntity", ResourceHome.class);
}
// private method to get Home for Project
private ProjectHome getProjectHome()
throws ServiceLocatorException {
return ServiceLocator. getInstance().getHome(
"ProjectEntity", ProjectHome.class);
}
// private method to get Resource entity
private Resource getResourceEntity(
String resourceId) throws ResourceException {
try {
ResourceHome home = getResourceHome();
return (Resource)
home.findByPrimaryKey(resourceId);
} catch(...) {
// Handle exceptions
}
}
// private method to get Project entity
private Project getProjectEntity(String projectId)
throws ProjectException {
// similar to getResourceEntity
...
}
// Method to encapsulate workflow related
// to assigning a resource to a project.
// It deals with Project and Resource Entity beans
public void assignResourceToProject(int numHours)
throws PSAException {
try {
if ((projectEntity == null) ||
(resourceEntity == null)) {
// SessionFacade not connected to entities
throw new PSAException(...);
}
// Get Resource data
ResourceTO resourceTO =
resourceEntity.getResourceData();
// Get Project data
ProjectTO projectTO =
projectEntity.getProjectData();
// first add Resource to Project
projectEntity.addResource(resourceTO);
// Create a new Commitment for the Project
CommitmentTO commitment = new
CommitmentTO( ...);
// add the commitment to the Resource
projectEntity.addCommitment(commitment);
} catch(...) {
// Handle exceptions
}
}
// Similarly implement other business methods to
// facilitate various use cases/interactions
public void unassignResourceFromProject()
throws PSAException {
...
}
// Methods working with ResourceEntity
public ResourceTO getResourceData()
throws ResourceException {
...
}
// Update Resource Entity Bean
public void setResourceData(ResourceTO resource)
throws ResourceException {
...
}
// Create new Resource Entity bean
public ResourceTO createNewResource(ResourceTO
resource) throws ResourceException {
...
}
// Methods for managing resource's blockout time
public void addBlockoutTime(Collection blockoutTime)
throws RemoteException,BlockoutTimeException {
...
}
public void updateBlockoutTime(
Collection blockoutTime)
throws RemoteException, BlockoutTimeException {
...
}
public Collection getResourceCommitments()
throws RemoteException, ResourceException {
...
}
// Methods working with ProjectEntity
public ProjectTO getProjectData()
throws ProjectException {
...
}
// Update Project Entity Bean
public void setProjectData(ProjectTO project)
throws ProjectException {
...
}
// Create new Project Entity bean
public ProjectTO createNewProject(ProjectTO project)
throws ProjectException {
...
}
...
// Other session facade method examples
// This proxies a call to a Transfer Object Assembler
// to obtain a composite Transfer Object.
// See Transfer Object Assembler pattern
public ProjectCTO getProjectDetailsData()
throws PSAException {
try {
ProjectTOAHome projectTOAHome = (ProjectTOAHome)
ServiceLocator.getInstance().getHome(
"ProjectTOA", ProjectTOAHome.class);
// Transfer Object Assembler session bean
ProjectTOA projectTOA =
projectTOAHome.create(...);
return projectTOA.getData(...);
} catch (...) {
// Handle / throw exceptions
}
}
// These method proxies a call to a ValueListHandler
// to get a list of projects. See Value List Handler
// pattern.
public Collection getProjectsList(Date start,
Date end) throws PSAException {
try {
ProjectListHandlerHome projectVLHHome =
(ProjectVLHHome)
ServiceLocator.getInstance().getHome(
"ProjectListHandler",
ProjectVLHHome.class);
// Value List Handler session bean
ProjectListHandler projectListHandler =
projectVLHHome.create();
return projectListHandler.getProjects(
start, end);
} catch (...) {
// Handle / throw exceptions
}
}
...
public void ejbActivate() {
...
}
public void ejbPassivate() {
context = null;
}
public void setSessionContext(SessionContext ctx) {
this.context = ctx;
}
public void ejbRemove() {
...
}
}
The remote interface for the Session Facade is listed in Example 8.16.
Example 8.16 Implementing Session Facade - Remote Interface
package corepatterns.apps.psa.ejb;
import java.rmi.RemoteException;
import javax.ejb.*;
import corepatterns.apps.psa.core.*;
// Note: all try/catch details not shown for brevity.
public interface ProjectResourceManager
extends EJBObject {
public resetEntities(String resourceId,
String projectId, ...)
throws RemoteException, ResourceException ;
public void assignResourceToProject(int numHours)
throws RemoteException, ResourceException ;
public void unassignResourceFromProject()
throws RemoteException, ResourceException ;
...
public ResourceTO getResourceData()
throws RemoteException, ResourceException ;
public void setResourceData(ResourceTO resource)
throws RemoteException, ResourceException ;
public ResourceTO createNewResource(ResourceTO resource)
throws ResourceException ;
public void addBlockoutTime(Collection blockoutTime)
throws RemoteException,BlockoutTimeException ;
public void updateBlockoutTime(Collection blockoutTime)
throws RemoteException,BlockoutTimeException ;
public Collection getResourceCommitments()
throws RemoteException, ResourceException;
public ProjectTO getProjectData()
throws RemoteException, ProjectException ;
public void setProjectData(ProjectTO project)
throws RemoteException, ProjectException ;
public ProjectTO createNewProject(ProjectTO project)
throws RemoteException, ProjectException ;
...
public ProjectCTO getProjectDetailsData()
throws RemoteException, PSAException ;
public Collection getProjectsList(Date start,
Date end) throws RemoteException, PSAException ;
...
}
The Home interface for the Session Facade is shown in Example 8.17.
Example 8.17 Implementing Session Facade - Home Interface
package corepatterns.apps.psa.ejb;
import javax.ejb.EJBHome;
import java.rmi.RemoteException;
import corepatterns.apps.psa.core.ResourceException;
import javax.ejb.*;
public interface ProjectResourceManagerHome
extends EJBHome {
public ProjectResourceManager create()
throws RemoteException,CreateException;
public ProjectResourceManager create(String
resourceId, String projectId, ...)
throws RemoteException,CreateException;
}
No comments:
Post a Comment