Derby网络服务器配置
简介
正如“Derby的嵌入式配置”部分中所解释的,应用程序可以嵌入Derby,这意味着Derby引擎与应用程序在同一JVM中运行。
但是,应用程序也可以使用更熟悉的客户机/服务器模式访问Derby数据库。这是通过一个框架来实现的,该框架嵌入了Derby并处理来自应用程序的数据库请求,包括在同一台机器上或远程机器上运行的不同jvm中运行的应用程序。Derby网络服务器就是这样一个框架。它嵌入Derby并管理来自网络客户端的请求,如图2所示。
本节介绍如何启动Derby网络服务器,配置您的环境以使用Derby网络客户机JDBC驱动程序,以及编译和运行一个使用网络服务器的简单Java应用程序。
Derby网络服务器
首先设置DERBY_INSTALL环境变量。
配置环境
要启动或停止网络服务器,请将CLASSPATH设置为包括下面列出的jar文件:
derbynet.jar:包含Derby网络服务器的代码和对引擎jar文件的引用(derby.jar)
derbytools.jar:包含Derby工具
您可以使用下面所示的命令显式设置CLASSPATH:
Windows:
C:\> set CLASSPATH=%DERBY_INSTALL%\lib\derbytools.jar;%DERBY_INSTALL%\lib\derbynet.jar;
Linux:
$ export CLASSPATH=$DERBY_INSTALL/lib/derbytools.jar:$DERBY_INSTALL\lib\derbynet.jar:.
您还可以使用Derby提供的脚本来设置CLASSPATH。将目录更改为DERBY_INSTALL/bin目录,然后执行setNetworkServerCP.bat (Windows) 或 setNetworkServerCP (Linux),如下所示:
Windows:
C:\> cd %DERBY_INSTALL%\bin
C:\Apache\db-derby-10.4.1.3-bin\bin> setNetworkServerCP.bat
Linux:
$ cd $DERBY_INSTALL/bin
$ . setNetworkServerCP
当网络服务器处理连接请求时,消息将继续输出到此窗口。
网络服务器启动Derby,因此您将找到启动网络服务器的目录中的错误日志Derby.log。
更简单的方法:derbyrun.jar
此外,由于各种jar文件的改进,现在启动网络服务器比以前容易得多。在最新版本中,“配置环境”和“启动网络服务器”这两个部分实际上只需要一个命令行即可:
Windows:
C:\Apache\db-derby-10.4.1.3-bin\lib> java -jar derbyrun.jar server start
Security manager installed using the Basic server security policy.
Apache Derby Network Server - 10.4.1.3 - (648739) started and ready to
accept connections on port 1527 at 2008-04-28 17:13:13.921 GMT
Linux:
$ java -jar derbyrun.jar server start
Security manager installed using the Basic server security policy.
Apache Derby Network Server - 10.4.1.3 - (648739) started and ready to
accept connections on port 1527 at 2008-04-30 09:35:55.871 GMT
案例程序
打开一个新窗口并设置DERBY_INSTALL环境变量。
配置环境以使用Derby网络客户端JDBC驱动程序
要使用Derby Network Client JDBC驱动程序,请将CLASSPATH设置为包括下面列出的jar文件:
derbyclient.jar:包含JDBC驱动程序
derbytools.jar可选,提供ij工具
您可以使用以下命令显式设置CLASSPATH:
Windows:
C:\> set CLASSPATH=%DERBY_INSTALL%\lib\derbyclient.jar;%DERBY_INSTALL%\lib\derbytools.jar;.
Linux:
$ export CLASSPATH=$DERBY_INSTALL/lib/derbyclient.jar:$DERBY_INSTALL/lib/derbytools.jar:.
您还可以使用Derby提供的脚本来设置CLASSPATH。将目录更改为DERBY_INSTALL/bin目录,然后执行setNetworkClientCP.bat (Windows) 或 setNetworkClientCP (Linux) 脚本,如下所示:
Windows:
C:\Apache\db-derby-10.4.1.3-bin\bin> setNetworkClientCP.bat
LINUX:
$ . setNetworkClientCP
使用ij测试网络服务器连接
创建并连接到数据库的嵌入式连接URL如下所示:
java org.apache.derby.tools.ij
ij> connect 'jdbc:derby:MyDbTest;create=true';
Derby网络客户端连接URL非常接近;只需在数据库名称之前添加 //localhost:1527/:
java org.apache.derby.tools.ij
ij> connect 'jdbc:derby://localhost:1527/MyDbTest;create=true';
问:新创建的数据库的物理位置是什么?
答:如果默认情况下是在ij目录中创建的,则在该目录中嵌入了驱动程序。如果使用Derby网络客户机JDBC驱动程序,默认情况下,数据库是在启动网络服务器的目录中创建的;换句话说,在Derby_INSTALL/bin中。
Derby提供了许多方法来指定实际位置。例如,下面的连接URL指定数据库位置的完整路径:
java org.apache.derby.tools.ij
ij> connect 'jdbc:derby://localhost:1527//home/bill/DerbyDb/MyDbTest;create=true';
复制案例程序
本节使用的示例应用程序与“Derby的嵌入式配置”部分使用的示例应用程序相同。
默认情况下,此应用程序以嵌入式模式运行。如果在运行时向它传递derby client参数,那么它将使用Derby网络客户端JDBC驱动程序创建并连接到数据库。
快速查看代码
SimpleApp.java应用程序将其大部分时间用于创建表,将数据插入到该表中,并查询返回的数据,同时演示了许多JDBC调用。本节重点介绍使之成为客户机/服务器Derby应用程序的JDBC调用。“Derby的嵌入式配置”部分展示了如何将相同的代码转换为嵌入式应用程序。
加载客户端JDBC驱动程序
当使用derby client参数执行时,SimpleApp应用程序将使用以下代码加载Derby网络客户端驱动程序:
driver = "org.apache.derby.jdbc.ClientDriver";
...
Class.forName(driver).newInstance();
获取网络服务器连接
使用derby client参数执行时,SimpleApp应用程序将创建并连接到derbyDB数据库,代码如下:
protocol = "jdbc:derby://localhost:1527/";
...
conn = DriverManager.getConnection(protocol + "derbyDB;create=true", props);
完整构建的连接URL如下所示:
jdbc:derby://localhost:1527/derbyDB;create=true
不要关闭Derby
如果你看看SimpleApp.java您会注意到,只有在嵌入式模式下运行Derby时,才会关闭Derby。当通过网络服务器连接时,其他应用程序可能正在访问与您相同的数据库;因此,不要关闭数据库或Derby。
编译案例程序
编译案例程序,如下所示:
javac SimpleApp.java
运行案例程序
运行案例程序,如下所示:
java SimpleApp derbyclient
您应该会看到如下输出:
SimpleApp starting in derbyclient mode.
Loaded the appropriate driver.
Connected to and created database derbyDB
Created table derbyDB
Inserted 1956 Webster
Inserted 1910 Union
Updated 1956 Webster to 180 Grand
Updated 180 Grand to 300 Lakeshore
Verified the rows
Dropped table derbyDB
Closed result set and statement
Committed transaction and closed connection
SimpleApp finished
问:示例应用程序创建的derbyDB数据库的物理位置在哪里?
(答案:在默认的$DERBY_INSTALL/bin位置。)
停止网络服务器
执行stopNetworkServer.bat (Windows) 或 stopNetworkServer (Linux) 脚本来停止网络服务器,如下所示:
Windows:
C:\> cd %DERBY_INSTALL%\bin
C:\Apache\db-derby-10.4.1.3-bin\bin> setNetworkServerCP.bat
C:\Apache\db-derby-10.4.1.3-bin\bin> stopNetworkServer.bat
Linux:
$ cd $DERBY_INSTALL/bin
$ . setNetworkServerCP
$ stopNetworkServer
运行网络服务器的窗口应输出确认关闭的消息。
请注意,与启动服务器一样,还有一种更容易关闭服务器的方法。例如:
Windows:
C:\> java -jar %DERBY_INSTALL%\lib\derbyrun.jar server shutdown
Linux:
$ java -jar $DERBY_INSTALL/lib/derbyrun.jar server shutdown
运行不带参数的derbyrun.jar以获取进一步的用法信息。自10.2发布系列以来,derbyrun.jar 已经包含在Derby发行版中。
下一步
网络服务器选项
默认情况下,Derby网络服务器只接受来自端口1527的本地主机的请求。您可以将网络服务器修改为:
- 在默认端口以外的端口上侦听。
- 接受来自本地主机外部的请求。
- 在Java安全管理器中运行以提高安全性。
嵌入式服务器
到目前为止,本节主要讨论如何作为一个独立的进程来启动和停止网络服务器。
另一个称为“嵌入式服务器”的选项允许应用程序加载嵌入式JDBC驱动程序供自己使用,并启动网络服务器以允许运行在其他jvm中的应用程序进行远程访问。执行此操作的应用程序可以使用嵌入式驱动程序或客户端驱动程序访问数据库。
图3描述了一个名为MyEmbedSrvApp的应用程序,它加载嵌入式驱动程序并启动网络服务器。这允许其他应用程序(如ij或使用Derby网络客户机的SimpleApp)通过客户机JDBC驱动程序连接到同一个数据库。
虽然MyEmbedSrvApp肯定可以使用Derby网络客户端JDBC驱动程序,但使用嵌入式驱动程序可能更好,因为Derby网络客户机JDBC数据库请求会产生通过网络发出的开销。嵌入式服务器体系结构使嵌入Derby的应用程序保留了嵌入式访问的优点,同时还允许使用另一个工具(如ij)对同一数据库进行远程访问。