Oct
源起
應用程式總是需要地方放資料,這裡用的是 Apache Derby。因為文件提到支援 OSGi,原先預期可以直接使用,因為其內建 EmbeddedActivator,不過無法在 eclipse pde 環境載入,原因不明,於是轉包一個來用。
另一個原因是希望將 jar 包成一個,比較方便 export。
轉包
目前內容和 org.apache.derby.osgi.EmbeddedActivator 一樣如下,只是加個 MANIFEST.MF。
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: haha.derby Bundle-SymbolicName: haha.derby Bundle-Version: 1.0.0 Bundle-Localization: plugin Bundle-ClassPath: lib/derby.jar, lib/derbytools.jar, . Bundle-Activator: org.apache.derby.osgi.EmbeddedActivator Import-Package: org.osgi.framework;version="1.4.0" Export-Package: org.apache.derby.jdbc
org.apache.derby.osgi.EmbeddedActivator
public final class EmbeddedActivator implements BundleActivator {
public void start(BundleContext context) {
new org.apache.derby.jdbc.EmbeddedDriver();
}
public void stop(BundleContext context) {
try {
DriverManager.getConnection("jdbc:derby:;shutdown=true");
} catch (SQLException sqle) {
}
}
}
Network Server Mode
為了方便測試,將啟動改為 org.apache.derby.drda.NetworkServerControl 來負責, 啟動後預設將開啟 1527 port,可改用 org.apache.derby.jdbc.ClientDriver 來連線。
MANIFEST.MF
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: haha.derby Bundle-SymbolicName: haha.derby Bundle-Version: 1.0.0 Bundle-Localization: plugin Bundle-ClassPath: ., lib/derbytools.jar, lib/derby.jar, lib/derbynet.jar, lib/derbyclient.jar Bundle-Activator: haha.derby.DerbyActivator Import-Package: org.osgi.framework;version="1.4.0" Export-Package: org.apache.derby.jdbc
src/haha/derby/DerbyActivator.java
public void start(BundleContext context) throws Exception {
server = new NetworkServerControl();
server.start(null);
}
public void stop(BundleContext context) throws Exception {
server.shutdown();
}
分開比較方便
每個包都需要功能測試,這次想要將之前的 haha.remix.derby 分兩包, 一個是 haha.remix.derby.server 負責 derby.jar/derbynet.jar/jerbytools.jar, 另一個是 haha.remix.derby.client 負責 derbyclient.jar。
觀察
- 資料以檔案夾為單位,例如建立 derbyDB 的話,會建立 derbyDB 目錄來放資料。 沒有設定 derby.system.home 或是直接在 jdbc 中指明位置的話,大概會出現像 是 C:\Downloads\EclipseInstall\eclipse-3.2 當前執行程式的目錄下。
