在GlassFish上自动启动JavaDB(Derby)

时间:2010-08-17 21:16:30

标签: glassfish derby glassfish-3 javadb

我计划将GlassFish v3开源版本部署到生产环境中。它带有JavaDB(Apache Derby),这正是我需要的。唯一的问题是GlassFish启动时默认情况下不启动JavaDB。我必须转到命令行并输入:

asadmin start-database

有没有办法让数据库在服务器(GlassFish)启动时自动启动?我讨厌每次在开发应用程序时手动执行此操作,我当然不希望在生产中这样做。

提前致谢

4 个答案:

答案 0 :(得分:9)

这有点过时但是Eclipse的偏好中的GlassFish部分中有一个复选框,标题为“启动GlassFish Server时启动JavaDB数据库进程”。我正在运行Eclipse Indigo SR1。

答案 1 :(得分:6)

一旦投入生产,您可以启动数据库一次并让它保持运行,无论应用服务器的状态如何。

您可以创建一个shell脚本,将“start-domain”和“start-database”捆绑为单个uber-start命令。

答案 2 :(得分:3)

这就是我所做的,我将它部署到打包为EJB JAR的服务器上。这将使Derby服务器能够作为自己的企业应用程序启动。

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

}

答案 3 :(得分:3)

我建议利用Derby可以同时执行嵌入式服务器(即在应用服务器JVM中运行)和网络服务器(即服务客户端)这一事实从本地主机发送到默认端口1527的请求。因此,您可以从嵌入模式的性能提升中受益,但仍允许从例如" IJ"在服务器运行时管理数据,以及通过TCP / IP从其他服务器实例管理适当的安全设置。 在该配置中,Derby与应用程序服务器一起启动和停止。无需额外命令或显式服务器启动代码即可启动derby。

下面针对Glassfish 4和derby / javaDB 10.10描述了配置,但在其他服务器和版本中的配置也类似。您确实要调整下面的所有路径以匹配您自己的安装。

0.1。将德比课程提供给服务器' common'通过添加derby.jar,derbyclient.jar,derbynet.jar,derbytools.jar来加载类加载器。例如,将jar复制到服务器实例的JVM lib / ext中,例如进入C:\java\J2EESDK7U1\glassfish\domains\domain1\lib\ext

0.2。使用glassfish管理GUI,将以下两个属性添加到配置> server-config> JVM设置> JVM选项选项卡: -Dderby.drda.startNetworkServer=true-Dderby.system.home=C:/java/J2EESDK7U1/glassfish/databases。第一个告诉Derby在加载嵌入式引擎时开始在网络模式下监听,第二个提供到derby数据库和可选derby.properties文件的基本路径(例如,使用PROD中的安全设置)

0.3。安排服务器在启动时加载类org.apache.derby.jdbc.EmbeddedDriver。实现此目的的一种方法是例如使用@Startup注释EJB,然后在EJB中定义一个@PostConstruct带注释的方法,类似:

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

有关其他6项启动提示,请参阅http://blog.eisele.net/2010/12/seven-ways-to-get-things-started-java.html