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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top