2010-08-17 5 views
13

Ich plane, GlassFish v3 Open Source Edition in einer Produktionsumgebung zu implementieren. Es kommt mit JavaDB (Apache Derby), was genau das ist, was ich brauche. Das einzige Problem ist, dass JavaDB nicht standardmäßig gestartet wird, wenn GlassFish gestartet wird. Ich würde wieder in der Kommandozeile gehen und geben Sie ein:Automatisch JavaDB (Derby) auf GlassFish starten

asadmin start-database 

Gibt es eine Möglichkeit, die Datenbank zu machen, automatisch gestartet, wenn der Server (Glassfish) beginnt? Ich hasste es, dies jedes Mal manuell zu tun, während ich meine Anwendung entwickelte, und das möchte ich in der Produktion natürlich nicht machen.

Vielen Dank im Voraus

Antwort

6

Sobald Sie in Produktion gehen, können Sie die db einmal starten und lassen Sie es nur läuft, unabhängig vom Status des Anwendungsservers.

Sie könnten ein Shell-Skript erstellen, um Start-Domain und Start-Datenbank zu einem einzigen Uber-Start-Befehl zu bündeln.

+0

Dies ist, was ich plante zu tun, da sonst nichts mehr möglich ist. Danke für die Antwort. –

+0

Können Sie ein Beispielskript bereitstellen? – NonlinearFruit

9

Dies ist etwas veraltet, aber es gibt ein Kontrollkästchen im GlassFish-Bereich in den Voreinstellungen von Eclipse mit dem Titel "Starten Sie den JavaDB-Datenbankprozess beim Starten von GlassFish Server". Ich betreibe Eclipse Indigo SR1.

+0

Ja, ich kenne das kleine Kontrollkästchen in Ordnung, aber stellen Sie sicher, dass in der gleichen Dialogbox, die es auf den richtigen JavaDB-Speicherort zeigt, ich hatte falsch und Eclipse konnte Derby nicht starten, dauerte eine Weile, um zu erkennen! –

+0

Danke, Carl. Netbeans hat die gleiche Option und ist standardmäßig aktiviert. – DavidS

3

Dies ist, was ich tue, stelle ich dies auf dem Server als EJB JAR verpackt. Dadurch kann der Derby-Server als eigene Unternehmensanwendung gestartet werden.

import java.io.PrintWriter; 

import javax.annotation.PostConstruct; 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 

import org.apache.derby.impl.drda.NetworkServerControlImpl; 

@Singleton 
@Startup 
public class LocalDatabase { 

private NetworkServerControlImpl networkServerControlImpl = null; 

@PostConstruct 
private void init() throws Exception { 
    networkServerControlImpl = new NetworkServerControlImpl(); 
    networkServerControlImpl.start(new PrintWriter(System.out)); 
} 

} 
2

Ich würde Sie raten Vorteil aus der Tatsache zu ziehen, dass Derby sowohl als Embedded Server (dh läuft in dem App-Server JVM) und Netzwerk-Server (dh Service Client-Anfrage Port 1527 auf dem Standard adressierte ausführen kann vom lokalen Host). Daher profitieren Sie von den gesteigerten Leistungen des Embedded-Modus und können dennoch Zugriff von z. "ij", um Daten zu verwalten, während der Server läuft, und von anderen Serverinstanzen über TCP/IP mit geeigneten Sicherheitseinstellungen. In dieser Konfiguration startet und stoppt Derby mit dem Anwendungsserver. Keine zusätzlichen Befehle oder expliziten Serverstartcode zum Starten von Derby.

Die Konfiguration wird unten für Glassfish 4 und derby/javaDB 10.10 beschrieben, funktioniert aber in anderen Servern und Versionen ähnlich. Sie müssen in der Tat alle unten angegebenen Pfade anpassen, damit sie mit Ihrer eigenen Installation übereinstimmen.

.1. Machen Sie Derby-Klassen für den allgemeinen Klassenlader des Servers verfügbar, indem Sie derby.jar, derbyclient.jar, derbynet.jar, derbytools.jar hinzufügen. Kopieren Sie die JAR-Datei beispielsweise in die JVM lib/ext Ihrer Serverinstanz, z. in C:\java\J2EESDK7U1\glassfish\domains\domain1\lib\ext

.2. Fügen Sie mithilfe der grafischen Benutzerschnittstelle von glassfish die folgenden zwei Eigenschaften zu Konfigurationen> server-config> JVM-Einstellungen> Registerkarte JVM-Optionen hinzu: -Dderby.drda.startNetworkServer=true und -Dderby.system.home=C:/java/J2EESDK7U1/glassfish/databases. Der erste Befehl weist Derby an, im Netzwerkmodus zu lauschen, wenn die eingebettete Engine geladen wird, der zweite liefert den essentiellen Pfad zu Ihren Derby-Datenbanken und der optionalen Datei derby.properties (z. B. mit Ihren Sicherheitseinstellungen in PROD)

.3. Veranlassen Sie, dass der Server beim Start die Klasse org.apache.derby.jdbc.EmbeddedDriver lädt.Ein Weg, dies zu erreichen, ist zum Beispiel ein EJB mit @Startup, mit Anmerkungen versehen und dann definiert eine @PostConstruct kommentierten Methode in der EJB, gleichermaßen:

@PostConstruct 
private void startup() { 
    try { Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     logger.info("Started DERBY in embedded+network mode"); 
    } catch (ClassNotFoundException e) { 
     ... your error handling 
    } 
} 

für 6 weitere Start Tipps finden http://blog.eisele.net/2010/12/seven-ways-to-get-things-started-java.html