Utilizzo di due diversi tipi di database per un'applicazione [duplicato]

1

Software : Java J2EE Applicazione ospitata su Tomcat Server.

UPDATE

The current software is JAVA Web application containing just JSP and Servlets no frameworks or anything. Simple JSP and Servlets communicating with Oracle DB

I have no issues in re-writing the application, but since the two copies of it will be maintained I want the code to be same and so when applying a change I need to apply them same on both places. Instead of writing two sets of different code I want to keep the code same while and intermediate layer to handle the DB communication

Il software con lo stesso codice è ospitato e viene eseguito in due diverse posizioni diverse miglia (due istanze separate). Inizialmente il database di back-end dell'applicazione era lo stesso (cioè Oracle ). Ora una delle sedi ha interrotto il supporto su oracle e sta passando all'open source Postgres .

Quindi ora lo scenario (essere) è simile a questo

Software: Java J2EE Applicazione ospitata su Tomcat Server.

Database 1: Oracle

Database 2: Postgres

In qualsiasi momento l'applicazione utilizzerà un solo database poiché eseguono istanze diverse.

È possibile aggiungere un intermediario in grado di interpretare la richiesta dall'applicazione e la query a seconda del database che deve essere utilizzato per recuperare i dati. se sì quale è l'opzione migliore per questo.

Tutto questo in modo che ogni volta che si verifica un cambiamento nell'applicazione, il cambiamento avvenga in modo univoco su ciascuna copia e si può evitare un sovraccarico nel mantenere due copie diverse.

    
posta S.M.09 12.03.2015 - 07:24
fonte

2 risposte

5

Questo è essenzialmente ciò che un Framework di Mappatura Oggetto / Relazionale (come Hibernate ) può fare per te. Fornisce un livello in cima al database che riassume i dettagli dell'interrogazione del database fornendo un livello indipendente dal database e un linguaggio di query. Hibernate fornisce (tra gli altri modi di interrogare il database) HQL per questo :

from Cat as cat
left join cat.kittens as kitten
    with kitten.bodyWeight > 10.0

Anche se questo assomiglia molto al normale SQL, è in realtà un linguaggio intermedio che verrà tradotto nel dialetto di SQL utilizzato dal sistema di database sottostante.

    
risposta data 12.03.2015 - 09:27
fonte
0

Questa sembra una buona opportunità per utilizzare il modello di design Strategia . Avrai una strategia di accesso ai dati che controllerà l'ambiente ed eseguirà il codice corretto a seconda di quale sia il back-end. "Controllare l'ambiente" potrebbe essere qualcosa di semplice come usare una variabile d'ambiente o qualcosa di più di alto livello come iniettare i gestori di query appropriati durante l'init dell'applicazione (fatto facilmente usando Spring o un altro framework DI).

    
risposta data 12.03.2015 - 13:52
fonte

Leggi altre domande sui tag