Frage

Für Compliance-Gründen, meine Organisation sucht unsere Datenbank Verbindungseinstellungen von Eigenschaften / XML-Konfigurationsdateien und in einem zentralen Register aufzunehmen -. Idealerweise föderierten über mehrere physische Maschinen, einen Single Point of Failure zu vermeiden

Ich habe in der Möglichkeit gesucht JNDI der Verwendung dieses Ziel zu erreichen, haben aber nicht wirklich viel Erfahrung habe in es selbst verwenden. Hat jemand Erfahrung versucht, etwas Ähnliches zu tun? Oder irgendwelche besseren Ideen, wie dies erreicht werden könnte?

sollte ich hinzufügen, dass unsere Anwendungen Standalone sind und innerhalb eines beliebigen J2EE-Container nicht laufen, damit alle Container spezifische Verbindungsmanagement-Techniken möglicherweise nicht besonders nützlich.

War es hilfreich?

Lösung

Es könnte einfacher sein, mit der XML-Stick / Eigenschaften Ansatz Datei, sondern eine Art von zentralisierten Konfigurationsmanagementsystem verwenden, um die Inhalte dieser Dateien zu steuern.

Vermutlich, wenn Sie wie Datenquelle Konfiguration zentralisiert Dinge beachten haben sollten, werden Sie schon etwas an der richtigen Stelle (CFEngine, Puppe, Koch, rdist, ...) Betriebssystem-Konfigurationsdateien zu verwalten - also warum nicht einfach verwenden das?

Andere Tipps

Dies könnte ein guter Anfang sein:

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));

Nun, wie Sie sehen können, ich bin mit einer zusammengefassten Verbindung Fabrik, aber Sie können das ersetzen Ihre Bedürfnisse anzupassen. Auch die ursprüngliche Kontext Fabrik ein FSContext ist, was bedeutet, der JNDI-Name in einem regulären Dateisystem nachgeschlagen wird, eine URL-Kontext-Fabrik muss verfügbar sein, aber ich habe es nie benutzt. Die meisten Klassen sind in dem javax.naming Paket.

Hope, das hilft.

Welche Regelung versuchen Sie mit kompatibel zu sein?

Eine Sache, die Sie tun können, ist auf einer Datenquelle abhängen, die über JNDI ausgesetzt ist. Dies bedeutet jedoch, dass die Verbindungseinstellungen an der Stelle der Konfiguration der Datenquelle befinden.

Ich bezweifle, dass Sie mit den Datenbankverbindungseinstellungen zu ‚horizontal gehen‘ müssen. Gibt es einen bestimmten Grund, dass Sie glauben, dass an einem Ort die Einstellungen mit Risiko für Ihre Anwendung vorstellen könnte (n)?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top