Domanda

Per motivi di conformità, la mia organizzazione sta cercando di prendere le nostre impostazioni di connessione del database di proprietà dei file di configurazione XML / e in un registro centrale -. Idealmente federata su più macchine fisiche, per evitare un singolo punto di errore

Sono stato a guardare la possibilità di utilizzare JNDI per raggiungere questo obiettivo, ma non ho davvero avuto molta esperienza nell'utilizzo di me stesso. Qualcuno ha avuto esperienza di tentare di fare qualcosa di simile? O qualsiasi migliori idee di come questo potrebbe essere raggiunto?

Vorrei aggiungere che le nostre applicazioni sono standalone e non vengono eseguiti all'interno di qualsiasi contenitore J2EE, quindi, tutte le tecniche di gestione delle connessioni contenitore specifico potrebbero non essere particolarmente utile.

È stato utile?

Soluzione

Potrebbe essere più semplice per rimanere con il XML / file delle proprietà approccio, ma utilizzare una sorta di sistema di gestione configurazione centralizzata per controllare il contenuto di quei file.

Presumibilmente se si hanno a considerare le cose come centralizzare la configurazione origine dati, avrete già qualcosa in posto (cfengine, burattino, chef, rdist, ...) per gestire i file di configurazione del sistema operativo - quindi perché non basta usare che?

Altri suggerimenti

Questo potrebbe essere un buon punto di partenza:

HashMap<String,String> dsNames = new HashMap<String,String>();
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    System.setProperty(Context.PROVIDER_URL, "file:/home/user/tmp");
    InitialContext ic = new InitialContext();
    dsNames.put("yourDataSourceName", "jdbc/your_jndi_name");
    // Construct BasicDataSource reference
    Reference ref = new Reference("javax.sql.DataSource",
            "org.apache.commons.dbcp.BasicDataSourceFactory", null);
    ref.add(new StringRefAddr("driverClassName", "theDriver"));
    ref.add(new StringRefAddr("url","theDBURL"));
    ref.add(new StringRefAddr("username", "obvious"));
    ref.add(new StringRefAddr("password", "obvious"));
    ref.add(new StringRefAddr("maxActive", "10"));
    ref.add(new StringRefAddr("maxIdle", "3"));
    ref.add(new StringRefAddr("initialSize", "3"));
    ref.add(new StringRefAddr("maxWait", "5"));
    ic.rebind("jdbc/your_jndi_name", ref);

    //And to get a reference to your data source anywhere else in your program:
    InitialContext ic2 = new InitialContext();
    DataSource myDS = (DataSource) ic2.lookup(dsNames.get(dsName));

Ora, come potete vedere, sto usando una fabbrica di connessione in pool, ma si può sostituire quello base alle proprie esigenze. Inoltre, la fabbrica contesto iniziale è un FSContext che significa che il nome JNDI sarà guardato in un file system regolare, una fabbrica URL contesto deve essere a disposizione, ma non ho mai usato. La maggior parte delle classi utilizzate sono nel pacchetto javax.naming.

Spero che questo aiuti.

Cosa regolamentazione stai tentando di essere compatibile con?

Una cosa che si può fare è quello di dipendere da un DataSource che è esposto tramite JNDI. Ciò significa, tuttavia, che le impostazioni di connessione si trovano sul sito della vostra configurazione del datasource.

dubito che avete bisogno di 'andare orizzontale' con voi impostazioni di connessione al database. C'è un motivo specifico che si ritiene che avere le impostazioni in un unico luogo potrebbe introdurre rischi per la propria applicazione (s)?

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