Business delegate is a Java EE design pattern. [1] 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).[1][2] Business delegates acts as an adaptor to invoke business objects from the presentation tier.[3]

Structure

edit

Requests to access underlying business services are sent from clients, and lookup services are used by business delegates to locate the business service components.[1]

Components

edit

Basic components are Business delegate, Lookup service and business service.

Business delegate

edit

Control and protection are provided through business delegate which can have two types of structures, without ID and with ID, where ID is a string version of the reference to a remote object such as EJBHome or EJBObject.[1]

Lookup service

edit

Business service is located by lookup service which is used by the business delegate. The implementation details of business service lookup is encapsulated by lookup service.[1]

Business service

edit

This a business-tier component, such as an enterprise bean or a JMS component, which provides the required service to the client.[1]

Consequences

edit

Some consequences are as follows:

  • More flexibility and maintainability as intermediate business delegate layer decouples the business layer from the presentation layer.
  • Business delegate exposes a uniform API to the presentation tier to access business logic.[1][3]

Concerns

edit

Following concerns can be considered:

  • Maintenance due to the extra layer that increases the number of classes in the application.
  • Business delegate should take care of the changes of the remote business object interfaces, and these types of changes are rare.[3]

Sample code

edit

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
    ...
}

[1]

See also

edit

References

edit
  1. ^ a b c d e f g h "Core J2EE Patterns – Business Delegate". Oracle. Oracle. Retrieved 22 June 2016.
  2. ^ Screening Technical Design Document – Version 2.0. Indiana, USA: Indiana state. p. 7.
  3. ^ a b c Kayal, D. (2008). Pro Java EE Spring Patterns. New York: Apress. pp. 161–166.

📚 Artikel Terkait di Wikipedia

Poltergeist (computer programming)

state-bearing objects of a pattern such as model–view–controller, or tier-separating patterns such as business delegate pattern. To remove a poltergeist

Specification pattern

the specification pattern is a particular software design pattern, whereby business rules can be recombined by chaining the business rules together using

Mediator pattern

the mediator pattern for a chat room would only be practical when used with remoting. Using raw sockets would not allow for the delegate callbacks (people

Composition over inheritance

unique_ptr<UpdateDelegate> updateDelegate; unique_ptr<CollisionDelegate> collisionDelegate; public: GameObject(VisibilityDelegate* v, UpdateDelegate* u, CollisionDelegate*

Software design pattern

A software design pattern describes a reusable solution to a commonly needed behavior in software. A design pattern is not a rigid structure to be copied

Maryland House of Delegates

to achieve equal representation. The current pattern for distribution of seats in the House of Delegates began with the legislative apportionment plan

Inversion of control

Observer pattern Publish–subscribe pattern Service locator pattern Signal (computing) Software framework Strategy pattern User exit Visitor pattern XSLT Sweet

GRASP (object-oriented design)

General Responsibility Assignment Software Patterns (or Principles), abbreviated GRASP, is a set of "nine fundamental principles in object design and responsibility