Patterns – Extended MVC for SOA

You can either turn each layer into separate projects or you can organize them simply in packages for smaller apps.

This is what your workspace might look like…

workspace project layout

workspace project layout

And here is some output demonstrating regular requests and request that result in Exceptions from your service layer or 3rd party api’s.

Call without exceptions

http://localhost:8080/mvc-example/layerDemoHandler

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: org.springframework.web.HttpRequestHandler.handleRequest with args [org.apache.catalina.connector.RequestFacade@50d35eb7, org.apache.catalina.connector.ResponseFacade@64ef69d5]

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.view.manager.PersonViewManager.getPerson with args [com.raulraja.dto.PersonDTO@17d1747c]

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.service.PersonBusinessService.getActivePerson with args [com.raulraja.dto.PersonDTO@17d1747c]

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.model.manager.PersonManager.find with args [1]

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.persistence.PersistenceAdapter.findById with args [class com.raulraja.model.domain.impl.Person, 1]

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: com.raulraja.model.domain.impl.Person@1

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: com.raulraja.persistence.PersistenceAdapter.findById

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: com.raulraja.model.domain.impl.Person@1

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: com.raulraja.model.manager.PersonManager.find

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: com.raulraja.model.domain.impl.Person@1

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: com.raulraja.service.PersonBusinessService.getActivePerson

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: com.raulraja.view.object.PersonVO@580d63fe

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: com.raulraja.view.manager.PersonViewManager.getPerson

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: null

06/15 10:26:34 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: org.springframework.web.HttpRequestHandler.handleRequest

Call with 3rd party runtime exceptions

06/15 10:41:51 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: org.springframework.web.HttpRequestHandler.handleRequest with args [org.apache.catalina.connector.RequestFacade@162fcc88, org.apache.catalina.connector.ResponseFacade@1c1d0019]

06/15 10:41:51 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.view.manager.PersonViewManager.getPerson with args [com.raulraja.dto.PersonDTO@398f3f27]

06/15 10:41:51 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.service.PersonBusinessService.getActivePerson with args [com.raulraja.dto.PersonDTO@398f3f27]

06/15 10:41:51 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.model.manager.PersonManager.find with args [-9999]

06/15 10:41:51 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.persistence.PersistenceAdapter.findById with args [class com.raulraja.model.domain.impl.Person, -9999]

06/15 10:41:52 ERROR com.raulraja.view.aop.ExceptionInterceptor – No row with the given identifier exists: [com.raulraja.model.domain.impl.Person#-9999]

06/15 10:41:52 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: null

06/15 10:41:52 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: org.springframework.web.HttpRequestHandler.handleRequest

Call with extensions indicating business exceptions

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: org.springframework.web.HttpRequestHandler.handleRequest with args [org.apache.catalina.connector.RequestFacade@162fcc88, org.apache.catalina.connector.ResponseFacade@1c1d0019]

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.view.manager.PersonViewManager.getPerson with args [com.raulraja.dto.PersonDTO@327b3e31]

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.service.PersonBusinessService.getActivePerson with args [com.raulraja.dto.PersonDTO@327b3e31]

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.model.manager.PersonManager.find with args [2]

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – ENTERING: com.raulraja.persistence.PersistenceAdapter.findById with args [class com.raulraja.model.domain.impl.Person, 2]

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: com.raulraja.model.domain.impl.Person@2

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: com.raulraja.persistence.PersistenceAdapter.findById

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: com.raulraja.model.domain.impl.Person@2

06/15 10:47:09 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: com.raulraja.model.manager.PersonManager.find

06/15 10:47:09 ERROR com.raulraja.view.aop.ExceptionInterceptor – com.raulraja.model.domain.impl.Person@2 is not active

06/15 10:47:13 DEBUG com.raulraja.util.aop.LayerLogInterceptor – Returning: null

06/15 10:47:13 DEBUG com.raulraja.util.aop.LayerLogInterceptor – EXITING: org.springframework.web.HttpRequestHandler.handleRequest

Pages: 1 2

Discuss
2 Comments
  1. dracof says:

    Que onda, quisiera ver el ejemplo de este patron, como lo descargo?

  2. Raul Raja says:

    Puedes descargarlo con:
    svn export http://raulrajatutorials.googlecode.com/svn/trunk/
    Ahi estan todos los tutoriales en svn.
    Tambien puedes ir directamente a la direccion con tu navegador

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">