13

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

asadmin start-database

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

提前致谢

4

4 回答 4

9

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

于 2012-02-21T18:20:05.927 回答
6

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

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

于 2010-08-18T15:23:46.547 回答
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));
}

}
于 2012-04-30T02:56:32.483 回答
3

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

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

.1。通过添加 derby.jar、derbyclient.jar、derbynet.jar、derbytools.jar 使 derby 类可用于服务器“通用”类加载器。例如,将 jar 复制到服务器实例的 JVM lib/ext 中,例如复制到C:\java\J2EESDK7U1\glassfish\domains\domain1\lib\ext

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

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

@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

于 2015-08-05T15:07:21.180 回答