Menu

Seite415

Anonymous

4.1.5 Referenzimplementierung der Geschäftslogiksschicht

Die Aufgabe des SessionBeans soll darauf beschränkt werden, dem Client einfache CRUD-Methoden bereit zu stellen. Auf komplexere Geschäftslogik wird verzichtet.

Da die Geschäftslogik vom eingesetzten Persistenzmechanismus getrennt werden soll, wird im SessionBean über die DataAccessServiceFactory für diesen Service der Geschäftslogik der richtige Dienst aus der Persistenzschicht geholt.

Die DataAccessObjectFactory ist dabei eine konkrete Persistenzierungsimplementierung, in unserem Fall das AddressDataAccessObject auf die Schnittstelle DataAccessObjectInterface, die allein die Signatur der CRUD-Methoden definiert geladen. Die Methoden des SessionBeans delegieren demzufolge die Aufrufe der eigenen CRUD-Methoden an die CRUD-Methoden des DataAccessObjectInterfaces weiter.

Die von der Persistenzschicht empfangenen DataAccessServiceExceptions werden zunächst geloggt, damit sie in der Log-Datei des Anwendungsservers erscheinen (server.log bei JBoss) und dann in einer ServiceException umwickelt an den Client weitergegeben.

Die Methode setUpAndLog wird immer vor Aufruf einer Methode des Service gerufen. Sie stellt sicher, dass der Persistenzdienst in der gerufenen Methode verfügbar ist. Zudem loggt er den Aufruf der Methode.

@Remote( { de.uni_leipzig.dreirad.common.remote_interfaces.AddressService.class })
@Stateless
public class AddressSessionBean implements AddressService {

   @EJB
   private DataAccessServiceFactory dataAccessServiceFactory;
   private AddressDataAccessService addressDataAccessObject;
   private static Logger LOGGER = Logger.getLogger(AddressSessionBean.class);

   public Address create(Address address) throws ServiceException {
      try {
         return addressDataAccessObject.create(address);
      } catch (DataAccessServiceException dataAccessServiceException) {
         LOGGER.error(dataAccessServiceException);
         throw new ServiceException(dataAccessServiceException);
      }
   }

   public Set<Address> getByCriteria(Restriction criteria) throws ServiceException {
      try {
         return addressDataAccessObject.getByCriteria(criteria);
      } catch (DataAccessServiceException dataAccessServiceException) {
         LOGGER.error(dataAccessServiceException);
         throw new ServiceException(dataAccessServiceException);
      }
   }

   public void remove(Address address) throws ServiceException {
      try {
         addressDataAccessObject.remove(address);
      } catch (DataAccessServiceException dataAccessServiceException) {
         LOGGER.error(dataAccessServiceException);
         throw new ServiceException(dataAccessServiceException);
      }
   }

   public Address update(Address address) throws ServiceException {
      try {
         return addressDataAccessObject.update(address);
      } catch (DataAccessServiceException dataAccessServiceException) {
         LOGGER.error(dataAccessServiceException);
         throw new ServiceException(dataAccessServiceException);
      }
   }

   @AroundInvoke
   public Object setUpAndLog(InvocationContext invocationContext)
      throws Exception {
      addressDataAccessObject = dataAccessServiceFactory
              .getAddressDataAccessService();
      Method invokedMethod = invocationContext.getMethod();
      LOGGER.info("method " + invokedMethod.getName() + " invoked.");
      return invocationContext.proceed();
   }
}

weiter zu 4.1.6 Referenzimplementierung der Persistenzschicht
zurück zu 4.1.4 Referenzimplementierung der Präsentationsschicht
zurück zu 4.1 Implementierung der Referenzanwendung
zurück zu 4 Implementierung
zurück zu [FrontPage]


Related

Documentation: FrontPage
Documentation: Seite000
Documentation: Seite400
Documentation: Seite410
Documentation: Seite414
Documentation: Seite416
Documentation: Seite425