// importy
...

public class ResourceDelegate {

  // Zdalna referencja do Session Facade
  private ResourceSession session;

  // Klasa dla obiektu Home z Session Facade
  private static final Class homeClazz =
    corepatterns.apps.psa.ejb.ResourceSessionHome.class;

  // Domylny konstruktor. Wyszukuje element gowny i czy
  // si z sesj, tworzc go.
  public ResourceDelegate() throws ResourceException {
    try {
      ResourceSessionHome home =
        (ResourceSessionHome) ServiceLocator.getInstance().
          getRemoteHome("Resource", homeClazz);
      session = home.create();
    } catch (ServiceLocatorException ex) {
      // Zamiana wyjtku  Service Locator na
      // wyjtek aplikacji.
      throw new ResourceException(...);
    } catch (CreateException ex) {
      // Zamiana wyjtku utworzenia komponentu sesyjnego na
      // wyjtek aplikacji.
      throw new ResourceException(...);
    } catch (RemoteException ex) {
      // Zamiana wyjtku zdalnego na wyjtek aplikacji.
      throw new ResourceException(...);
    }
  }

  // Konkstruktor przyjmujcy identyfikator (uchwytu) i
  // ponownie czcy si z poprzednim komponentem sesyjnym zamiast
  // tworzenia nowego.
  public ResourceDelegate(String id)
  throws ResourceException {
    // ponowne polczenie z sesj o podanym id
    reconnect(id);
  }

  // Zwraca klientowi identyfikator tekstowy, ktry moe
  // zosta uyty do ponownego poczenia z komponentem sesyjnym
  public String getID() {
    try {
      return ServiceLocator.getId(session);
    } catch (Exception e) {
      // zgoszenie wyjtku aplikacji
    }
  }

  // metoda ponownego czenia na podstawie identyfikatora
  public void reconnect(String id) throws ResourceException {
    try {
      session =
        (ResourceSession) ServiceLocator.getService(id);
    } catch (RemoteException ex) {
      // Zamiana wyjtku zdalnego na wyjtek aplikacji.
      throw new ResourceException(...);
    }
  }

  // Poniej znajduj si metody biznesowe przekazywane do
  // Session Facade. Gdy nastpi wyjtek usugi,
  // ta metoda konwertuje go do wyjtku aplikacji
  // na przykad ResourceException, SkillSetException itp.
  public ResourceTO setCurrentResource(String resourceId)
  throws ResourceException {
    try {
      return session.setCurrentResource(resourceId);
    } catch (RemoteException ex) {
      // Przeksztacenie wyjtku usugi na wyjtek aplikacji.
      throw new ResourceException(...);
    }
  }

  public ResourceTO getResourceDetails()
  throws ResourceException {

    try {
      return session.getResourceDetails();
    } catch (RemoteException ex) {
      // Przeksztacenie wyjtku usugi na wyjtek aplikacji.
      throw new ResourceException(...);
    }
  }

  public void setResourceDetails(ResourceTO to)
  throws ResourceException {
    try {
      session.setResourceDetails(to);
    } catch (RemoteException ex) {
      throw new ResourceException(...);
    }
  }

  public void addNewResource(ResourceTO to)
  throws ResourceException {
    try {
      session.addResource(to);
    } catch (RemoteException ex) {
      throw new ResourceException(...);
    }
  }

  // wszystkie pozostae metody poredniczce w kontaktach
  // z komponentem sesyjnym
  ...
}