2010-08-17 38 views
13

Planeo implementar la edición de código abierto GlassFish v3 en un entorno de producción. Viene con JavaDB (Apache Derby) que es justo lo que necesito. El único problema es que JavaDB no se inicia de forma predeterminada cuando se inicia GlassFish. Tendría que ir a la línea de mandatos y entre:Iniciar JavaDB (Derby) automáticamente en GlassFish

asadmin start-database 

¿Hay una manera de hacer que la base de datos se inicia automáticamente cada vez que el servidor (GlassFish) se inicia? Odiaba hacerlo manualmente cada vez que desarrollé mi aplicación y ciertamente no quiero hacerlo en producción.

Gracias de antemano

Respuesta

6

Una vez que entran en la producción, se puede iniciar el db de una vez y dejarlo correr, independientemente del estado del servidor de aplicaciones.

Puede crear un script de shell para 'agrupar' start-domain y start-database en un único comando uber-start.

+0

Esto es lo que estaba planeando hacer ya que no hay nada más posible. Gracias por la respuesta. –

+0

¿Podría proporcionar un script de ejemplo? – NonlinearFruit

9

Esto es un poco anticuado, pero hay una casilla en la sección GlassFish en las preferencias de Eclipse titulada "Inicie el proceso de la base de datos JavaDB al iniciar GlassFish Server". Estoy ejecutando Eclipse Indigo SR1.

+0

Sí, sé que la pequeña casilla de verificación está bien, pero asegúrese de que en el mismo cuadro de diálogo que apunta a la ubicación correcta de JavaDB, tuve ese error y Eclipse no pudo iniciar Derby, tomó un tiempo para detectar! –

+0

Gracias, Carl. Netbeans tiene la misma opción, y está habilitado por defecto. – DavidS

3

Esto es lo que hago, lo despliego al servidor empaquetado como EJB JAR. Esto permitirá que el servidor Derby se inicie como su propia aplicación empresarial.

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

Yo aconsejaría a tomar ventaja del hecho de que Derby puede realizar tanto como servidor incorporado (es decir, que se ejecuta en la JVM del servidor de aplicaciones) y servidor de red (es decir, atender las solicitudes del cliente dirigida al puerto por defecto 1527 del host local). Por lo tanto, se beneficia de las mayores prestaciones del modo integrado, y aún así permite el acceso desde, p. Ej. "ij" para administrar datos mientras el servidor se está ejecutando, y de otras instancias del servidor a través de TCP/IP con la configuración de seguridad adecuada. En esa configuración, Derby se inicia y se detiene junto con el servidor de aplicaciones. No hay necesidad de comandos adicionales o un código de inicio de servidor explícito para lanzar Derby.

La configuración se describe a continuación para Glassfish 4 y derby/javaDB 10.10, pero funcionará de manera similar en otros servidores y versiones. De hecho, debe ajustar todas las rutas a continuación para que coincidan con su propia instalación.

.1. Haga que las clases derby estén disponibles para el cargador de clases "común" del servidor agregando derby.jar, derbyclient.jar, derbynet.jar, derbytools.jar. Copie el jar, por ejemplo, en JVM lib/ext de su instancia de servidor, p. en C:\java\J2EESDK7U1\glassfish\domains\domain1\lib\ext

.2. Con la GUI de administración de glassfish, agregue las dos propiedades siguientes a Configuraciones> configuración de servidor> JVM> pestaña Opciones de JVM: -Dderby.drda.startNetworkServer=true y -Dderby.system.home=C:/java/J2EESDK7U1/glassfish/databases. El primero le dice a Derby que empiece a escuchar en modo de red cuando se carga el motor incorporado, el segundo proporciona la ruta esencial a sus bases de datos derby y el archivo opcional derby.properties (por ejemplo, con su configuración de seguridad en PROD)

.3. organizar para que el servidor cargue la clase org.apache.derby.jdbc.EmbeddedDriver al inicio.Una forma de lograr esto es, por ejemplo, para anotar un EJB con @Startup, y luego definir un método anotado @PostConstruct en el EJB, por igual:

@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 
    } 
} 

para otros 6 consejos de inicio, ver http://blog.eisele.net/2010/12/seven-ways-to-get-things-started-java.html

Cuestiones relacionadas