1.新建Derby数据库服务器启动程序,将derby相关jar包加入RCP包引用中,新建两个类如下:
package edu.zzuli.soft.studs.domain.common;
import java.io.PrintWriter;
import java.net.InetAddress;
import org.apache.derby.drda.NetworkServerControl;
public class DerbyNetworkServerUtil {
private int portNum;
private NetworkServerControl serverControl;
private PrintWriter pw;
public DerbyNetworkServerUtil(int port, PrintWriter pw) {
this.portNum = port;
this.pw = pw;
try {
serverControl = new NetworkServerControl(InetAddress
.getByName("localhost"), portNum);
pw.println("Derby 网络服务器已创建");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* trace utility of server
*/
public void trace(boolean onoff) {
try {
serverControl.trace(onoff);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Try to test for a connection Throws exception if unable to get a
* connection
*/
public void testForConnection() throws Exception {
serverControl.ping();
}
/**
* Shutdown the NetworkServer
*/
public void shutdown() {
try {
serverControl.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Start Derby Network server
*
*/
public void start() {
try {
serverControl.start(pw);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//DerbyNetworkServer在启用RCP程序中调用 ,这解释一下不用EmbededDerby,原因是内嵌模式只能有一个JVM连接数据库,在集成Birt的情况下不能应用 。所以应用网络模式,并且让RCP控制数据库的启动和关闭。
package edu.zzuli.soft.studs.domain.common;
import java.io.PrintWriter;
/**
* derby数据库服务器
*
* @author 姚建忠
*
*/
public class DerbyNetworkServer {
private static int NETWORKSERVER_PORT = 1527;// 监听端口
private DerbyNetworkServerUtil nwServer;
public DerbyNetworkServer() {
}
public void startNetworkServer() {
PrintWriter pw = null;
try {
pw = new PrintWriter(System.out, true);
nwServer = new DerbyNetworkServerUtil(NETWORKSERVER_PORT, pw);
nwServer.start();
boolean knowIfServerUp = false;
int numTimes = 5;
// 测试服务器是否可以接受请求,测试延迟15秒
while (!knowIfServerUp && (numTimes > 0)) {
try {
numTimes--;
nwServer.testForConnection();
knowIfServerUp = true;
} catch (Exception e) {
System.out.println("未能连接到Derby数据库服务器, 3秒后尝试重新请求连接...");
Thread.sleep(3000);
}
}
if (!knowIfServerUp) {
pw.println("连接失败,退出程序");
System.exit(1);
}
pw.println("Derby数据库服务器已启动成功。");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pw != null)
pw.close();
}
}
public void shutdownDerbyNetworkServer() {
if (nwServer != null) {
nwServer.shutdown();
}
}
}
好了,建工好这两个类后,只需在Eclipse RCP的IApplication实现类中的start和stop方法调用DerbyNetworkServer中的方法即可。
至于集成Birt到RCP,网上有很多资料,google一下吧,我不想写了。