business delegate pattern
Business delegate is a Java EE design pattern.
{{Cite web|url = http://www.oracle.com/technetwork/java/businessdelegate-137562.html|title = Core J2EE Patterns – Business Delegate|access-date = 22 June 2016|website = Oracle|publisher = Oracle}} This pattern is directed towards reducing the coupling in between business services and the connected presentation tier, and to hide the implementation details of services (including lookup and accessibility of EJB architecture).{{Cite book|title = Screening Technical Design Document – Version 2.0|publisher = Indiana state|location = Indiana, USA|pages = 7}} Business delegates acts as an adaptor to invoke business objects from the presentation tier.{{Cite book|title = Pro Java EE Spring Patterns|url = https://archive.org/details/projavaeespringp00kaya|url-access = limited|last = Kayal|first = D.|publisher = Apress|year = 2008|location = New York|pages = [https://archive.org/details/projavaeespringp00kaya/page/n182 161]–166}}
Structure
=Components=
Basic components are Business delegate, Lookup service and business service.
==Business delegate==
==Lookup service==
==Business service==
Consequences
Concerns
Sample code
A sample code for a Professional Services Application (PSA), where a Web-tier client needs to access a session bean that implements the session facade pattern, is provided below.
Resource Delegate:
public class ResourceDelegate {
// Remote reference for Session Facade
private ResourceSession session;
// Class for Session Facade's Home object
private static final Class homeClazz =
corepatterns.apps.psa.ejb.ResourceSessionHome.class;
// Default Constructor. Looks up home and connects
// to session by creating a new one
public ResourceDelegate() throws ResourceException {
try {
ResourceSessionHome home = (ResourceSessionHome)
ServiceLocator.getInstance().getHome(
"Resource", homeClazz);
session = home.create();
} catch(ServiceLocatorException ex) {
// Translate Service Locator exception into
// application exception
throw new ResourceException(...);
} catch(CreateException ex) {
// Translate the Session create exception into
// application exception
throw new ResourceException(...);
} catch(RemoteException ex) {
// Translate the Remote exception into
// application exception
throw new ResourceException(...);
}
}
public BusinessDelegate(String id)
throws ResourceException {
super();
reconnect(id);
}
public String getID() {
try {
return ServiceLocator.getId(session);
} catch (Exception e) {
// Throw an application exception
}
}
public void reconnect(String id)
throws ResourceException {
try {
session = (ResourceSession)ServiceLocator.getService(id);
} catch (RemoteException ex) {
// Translate the Remote exception into
// application exception
throw new ResourceException(...);
}
}
public ResourceTO setCurrentResource(
String resourceId)
throws ResourceException {
try {
return session.setCurrentResource(resourceId);
} catch (RemoteException ex) {
// Translate the service exception into
// application exception
throw new ResourceException(...);
}
}
public ResourceTO getResourceDetails()
throws ResourceException {
try {
return session.getResourceDetails();
} catch(RemoteException ex) {
// Translate the service exception into
// application exception
throw new ResourceException(...);
}
}
public void setResourceDetails(ResourceTO vo)
throws ResourceException {
try {
session.setResourceDetails(vo);
} catch(RemoteException ex) {
throw new ResourceException(...);
}
}
public void addNewResource(ResourceTO vo)
throws ResourceException {
try {
session.addResource(vo);
} catch(RemoteException ex) {
throw new ResourceException(...);
}
}
// all other proxy method to session bean
...
}