Costruisco un'applicazione con un livello "core" standalone, che è anche usato per costruire una webapp (è un progetto multi-modulo Maven, con un modulo 'core' e un modulo 'webapp', che ha un dipendenza dal modulo 'core'). Usa un database MySQL. Io cerco di implementare un DataSource
che sarebbe bene in entrambi i contesti (solo 1 collegamento è sufficiente nel contesto standalone).Quale DataSource per l'applicazione utilizzata sia in stand-alone e contesto webapp (Java 7, Tomcat 7)?
Dopo aver letto un sacco di documenti su DataSource, devo dire che sono un po 'perso. Sono giunto alla conclusione che forse dovrei usare lo Tomcat JDBC Connection Pool. Le mie domande sono:
1) nel contesto standalone, come dovrei fornire la configurazione per utilizzare il DataSource, sapendo che questa configurazione verrà fornita da Tomcat nel contesto webapp (la configurazione autonoma non dovrebbe quindi sovrascrivere la configurazione di Tomcat)?
Devo fare qualcosa di simile in this other question in un metodo chiamato solo nel contesto standalone? Ma come posso vedere nel contesto webapp che Tomcat ha già fornito DataSource?
Oppure devo usare una definizione di bean? Ma come questo bean non verrebbe utilizzato nel contesto webapp?
2) E altre implementazioni di DataSource in pool?
Non dovrei usare solo il MySQL DataSource?
Ho letto che in Java EE 7, DataSources è più semplice da utilizzare (https://blogs.oracle.com/arungupta/entry/default_datasource_in_java_ee). Quindi, c'è qualche svolta in Java 7? Un nuovo fornitore di DataSource che dovrei assolutamente usare in Java 7?
Conclusione: Sì, mi sono perso, e non so che cosa sono i "gold standard" per l'utilizzo DataSource. Grazie per l'aiuto.
Grazie per la risposta, alcune domande: il mio livello 'core' è una libreria che può essere utilizzata in altre applicazioni. Se non voglio che queste applicazioni eseguano le attività descritte nel tuo secondo link, InitialContext dovrebbe essere impostato ** all'interno ** del livello principale, giusto? Quindi forse dovrei eseguire più semplicemente la ricerca nel livello principale, catturare l'eccezione generata se non in un contesto webapp, quindi impostare la mia connessione in quel caso? Sarebbe valido? – FBB
Se il 'core' contiene tale funzionalità, che potrebbe essere eseguita da altre applicazioni. È possibile generare un terzo componente (con il custom 'InitialContextFactory') che potrebbe essere chiamato dall'applicazione standalone. Penso che questa funzionalità dei requisiti possa essere unica per l'applicazione standalone, quindi potresti incorporarla in un'applicazione del genere. In un'altra mano, potresti implementare un factory di connessione. –
Sì, solo un semplice factory di connessione che utilizza un DriverManager quando il DataSource non può essere caricato utilizzando JNDI. Il driver può essere configurato tramite un file di proprietà. Sarebbe valido? Os è un modello di disegno terribile? : p – FBB