我计划将开源版的 GlassFish v3 部署到生产环境中。它自带了我需要的 JavaDB(Apache Derby)。唯一的问题是,GlassFish 启动时不会默认启动 JavaDB。我需要在命令行中输入以下内容:
asadmin start-database
有没有办法使数据库在服务器(GlassFish)启动时自动启动? 我讨厌每次开发应用程序时都要手动执行这个操作,我当然不想在生产中这样做。
提前致谢
我计划将开源版的 GlassFish v3 部署到生产环境中。它自带了我需要的 JavaDB(Apache Derby)。唯一的问题是,GlassFish 启动时不会默认启动 JavaDB。我需要在命令行中输入以下内容:
asadmin start-database
有没有办法使数据库在服务器(GlassFish)启动时自动启动? 我讨厌每次开发应用程序时都要手动执行这个操作,我当然不想在生产中这样做。
提前致谢
这篇文章有点过时,但在Eclipse的首选项中的GlassFish部分有一个复选框,标题为“启动GlassFish服务器时启动JavaDB数据库进程”。我正在运行Eclipse Indigo SR1。
一旦您进入生产,您只需启动一次数据库并让其运行,无论应用服务器的状态如何。
您可以创建一个Shell脚本将“start-domain”和“start-database”捆绑成单个超级启动命令。
我的工作是将这个打包为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));
}
}
C:\java\J2EESDK7U1\glassfish\domains\domain1\lib\ext
。-Dderby.drda.startNetworkServer=true
和-Dderby.system.home=C:/java/J2EESDK7U1/glassfish/databases
。第一个告诉Derby在加载嵌入式引擎时开始侦听网络模式,第二个提供了您的derby数据库和可选的derby.properties文件(例如在PROD中使用的安全设置)的必要路径。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
}
}
要获得其他六个创业提示,请参见http://blog.eisele.net/2010/12/seven-ways-to-get-things-started-java.html