Domanda

Nel mio progetto appena completato, stavo lavorando per far funzionare le transazioni distribuite.

Lo abbiamo implementato utilizzando Arjuna Transaction Manager di JBoss e i limiti delle transazioni dichiarative di Spring.

La nostra sequenza di richieste sembrava:

browser -> secured servlet -> 'wafer-thin' SLSB -> spring TX-aware proxy -> request-handler POJO

Ciò significava che avevamo una GUERRA per servire il nostro servlet sicuro e un EAR per servire il nostro SLSB.

Il nostro SLSB aveva un blocco di inizializzatore statico per avviare il nostro contesto di applicazione Spring.

Non mi piace il mix di tecnologie, ma mi piace la separazione dei livelli di presentazione e di business, che potrebbe risiedere in luoghi fisici diversi.

Sarei interessato a sapere cosa gli altri propongono di separare i livelli quando usano Spring?

È stato utile?

Soluzione

Richiedere un server di app EJB3 solo per uno SLSB che è una facciata non sembra valga la pena per me. Non c'è motivo per cui non puoi semplicemente rimuoverlo e far funzionare il servlet direttamente con Spring. È possibile aggiungere ContextLoaderListener a WAR per caricare ApplicationContext e quindi WebApplicationContextUtils per accedervi. In alternativa, è possibile utilizzare SpringMVC, Struts o altre tecnologie Web se è necessario fare più di quello che il Servlet da solo consentirà.

Altri suggerimenti

Un approccio piuttosto tipico è quello di definire un livello Web, un livello di servizio e un livello DAO e collegare la semantica transazionale al livello di servizio. Il livello di servizio potrebbe essere un gruppo di POJO con annotazioni @Transactional, ad esempio. Il livello Web potrebbe essere controller Spring Web MVC. In questo approccio, il livello Web sta essenzialmente adattando il livello di servizio a HTTP. Buona separazione e nessuna necessità di SLSB qui.

Un'area di dibattito è tuttavia relativa agli oggetti del dominio, come Employee o PurchaseOrder o altro. Questi livelli dell'applicazione si estendono e una cosa che sembra accadere con le annotazioni è che gli oggetti del dominio ottengono annotazioni legate a livelli specifici. Quindi potresti avere qui le annotazioni ORM ma poi utilizzare lo stesso oggetto dominio come bean di supporto modulo per evitare classi parallele dominio / modulo oggetto. Alcune persone si oppongono a ciò come una violazione della separazione architettonica delle preoccupazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top