Menu

Seite425

Anonymous

4.2.5 Referenzimplementierung der Geschäftslogiksschicht

Gegenüber Iteration 1 wurde das Exception Handling verbessert. 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 Trennung zwischen Geschäftslogik und Persistenz wurde verbessert, indem der DataAccessService nicht mehr direkt über DependencyInjection verfügbar gemacht wird, sondern die SessionBean DataAccessServiceFactory zwischengeschaltet wird und über diese dann der für diesen Service der Geschäftslogik der richtige Dienst aus der Persistenzschicht geholt wird.

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.3.5 Referenzimplementierung der Geschäftslogikschicht in der Iteration 3
weiter zu 4.2.6 Referenzimplementierung der Persistenzschicht
zurück zu 4.1.5 Referenzimplementierung der Geschäftslogikschicht in der Iteration 1
zurück zu 4.2.4 Referenzimplementierung der Präsentationsschicht
zurück zu 4.2 Iteration 2
zurück zu 4 Implementierung
zurück zu [FrontPage]


Related

Documentation: FrontPage
Documentation: Seite400
Documentation: Seite415
Documentation: Seite420
Documentation: Seite424
Documentation: Seite426