Separação de apresentação e de negócios Tiers com Primavera
-
02-07-2019 - |
Pergunta
No meu projeto recém-concluído, eu estava trabalhando ficar transações distribuídas de trabalho.
Nós implementamos isso usando Arjuna Transaction Manager da JBoss, e limites declarativas de transação do Spring.
A nossa sequência pedido parecia:
browser -> secured servlet -> 'wafer-thin' SLSB -> spring TX-aware proxy -> request-handler POJO
O que isto quer dizer é que nós tivemos uma guerra para servir o nosso servlet garantido e um EAR para servir a nossa SLSB.
Nossa SLSB teve uma estática initialiser bloco para inicializar o nosso contexto de aplicativo Spring.
Eu não gosto da mistura de tecnologias, mas eu gosto da separação de apresentação e de negócios camadas, o que poderia residir em diferentes locais físicos.
Eu estaria interessado em saber o que os outros propõem a camadas separadas quando usando Spring?
Solução
A exigência de um servidor EJB3 aplicativo apenas para um SLSB que é uma fachada não parece que vale a pena o esforço para me. Não há nenhuma razão que você não podia simplesmente remover essa e ter o seu trabalho servlet diretamente com a Primavera. Você pode adicionar o ContextLoaderListener para a guerra para carregar seus WebApplicationContextUtils applicationContext e depois para chegar a ele. Alternativamente, você pode usar SpringMVC, Struts ou outras tecnologias web, se você precisa fazer mais do que o Servlet em sua própria permitirá.
Outras dicas
Uma abordagem bastante típico é definir uma camada da web, um nível de serviço e uma camada DAO, e anexar semântica transacional para a camada de serviço. A camada de serviço pode ser um monte de POJOs com anotações @Transactional, por exemplo. A camada da web pode ser controladores Spring Web MVC. Nesta abordagem, a camada web é essencialmente adaptar o nível de serviço para HTTP. Boa separação e sem necessidade de SLSBs aqui.
Uma área de debate, porém, é em relação aos objetos de domínio, como empregado ou PurchaseOrder ou qualquer outra coisa. Estas camadas de aplicações extensão e uma coisa que parece estar acontecendo com anotações é que os objetos de domínio obter anotações que estão vinculados a níveis específicos. Então você pode ter anotações ORM aqui, mas, em seguida, usar o mesmo objeto de domínio como um feijão forma-backing como uma maneira de evitar classes de objetos de domínio / forma paralela. Algumas pessoas se opõem a isso como violar a separação de arquitetura de preocupações.