一直以来在写程序的时候觉得有许多数据是运行这个程序本身需要的,和用户的数据没有什么关系,都放在一个库里有点不合适。分开放要同时连接两个以上的大型数据库(客户的数据一般都放在大型的数据库里面)好象也不太合适。
在网上一查发现Derby这个东西不错,人家说了:),查资料,做DEMO。最后发现它不能够和TOMCAT一块起来,还得单独起动它的网络服务。这怎么能行呢?
最后在http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/dm-
0508bader/index.html查到一篇文章。但它写得很麻烦,可能是我没有用到那么多功能。我整理如下步骤:
1、修改TOMCAT_HOME\conf\catalina.properties文件,在common.loader
键最后面加入DERBY的JAR,这是TOMCAT启动时加载的类的路径,这个不改也可以,需要把DERBY的JAR放到TOMCAT_HOME/common/lib下。这样更简单一些。
2、修改TOMCAT_HOME\conf\server.xml文件,在 <Server>
元素的开头添加下列元素:
<Listener className="org.apache.derby.tomcat.ServerLifecycleListenerWithNetworkServer" debug="0" />
这个类的源代码如下 :
package
org.apache.derby.tomcat;
import
org.apache.derby.tomcat.ServerLifecycleListener;
public
class
ServerLifecycleListenerWithNetworkServer
extends
ServerLifecycleListener
...
{
public
static
final
String START_NETWORK_SERVER
=
"
derby.drda.startNetworkServer
"
;
public
static
final
String HOST
=
"
derby.drda.host
"
;
public
static
final
String PORT_NUMBER
=
"
derby.drda.portNumber
"
;

protected
void
initializeCloudscape()
...
{
System.setProperty(
START_NETWORK_SERVER,
"
true
"
);
super
.initializeCloudscape();
}


}
package
org.apache.derby.tomcat;
import
java.sql.DriverManager;
import
java.sql.SQLException;
import
org.apache.catalina.Lifecycle;
import
org.apache.catalina.LifecycleEvent;
import
org.apache.catalina.LifecycleListener;

public
class
ServerLifecycleListener
implements
LifecycleListener
...
{
public
static
final
String DRIVER_CLASSNAME
=
"
org.apache.derby.jdbc.EmbeddedDriver
"
;
public
static
final
String SHUTDOWN_URL
=
"
jdbc:derby:;shutdown=true
"
;
public
static
final
String SHUTDOWN_MESSAGE
=
"
Cloudscape system shutdown.
"
;
public
static
final
String MSG_INIT_SUCCESS
=
"
Cloudscape JDBC driver loaded successfully
"
;
public
static
final
String MSG_INIT_CLASS_NOT_FOUND
=
"
The Cloudscape JDBC driver (
"
+
DRIVER_CLASSNAME
+
"
) could not be found. Make sure the appropriate JAR
"
+
"
files are available.
"
;
public
static
final
String MSG_TERM_SUCCESS
=
"
Cloudscape shutdown was successful.
"
;
public
static
final
String MSG_TERM_FAILURE
=
"
Unexpected Exception was caught from the Cloudscape shutdown.
"
;


public
void
lifecycleEvent(LifecycleEvent argEvent)
...
{
if
(argEvent.getType().equals(Lifecycle.START_EVENT))
...
{
this
.initializeCloudscape();
}
else
if
(argEvent.getType().equals(Lifecycle.STOP_EVENT))
...
{
this
.shutdownCloudscape();
}
}


protected
void
initializeCloudscape()
...
{
try
...
{
Class.forName(DRIVER_CLASSNAME);
System.out.println(MSG_INIT_SUCCESS);
}
catch
(ClassNotFoundException varException)
...
{
System.out.println(MSG_INIT_CLASS_NOT_FOUND);
varException.printStackTrace();
}
}


protected
void
shutdownCloudscape()
...
{
try
...
{
DriverManager.getConnection(SHUTDOWN_URL);
}
catch
(SQLException varException)
...
{
if
(varException.getMessage().equals(SHUTDOWN_MESSAGE))
...
{
System.out.println(MSG_TERM_SUCCESS);
}
else
...
{
System.out.println(MSG_TERM_FAILURE);
varException.printStackTrace();
}
}
}
}
怎么找不到上传附件的地方呢???
把这两个文件编译好后放到TOMCAT_HOME\server\classes目录下。
现在重启TOMCAT就可以发现DERBY会一块启来了!
至于DERBY的连接池这些和其他的没有什么区别了。以后有时间再记吧。
本文介绍如何在Tomcat服务器中集成Apache Derby数据库,通过修改配置文件和添加自定义监听器实现Derby与Tomcat的一体化启动。适用于希望简化部署流程的开发者。
227

被折叠的 条评论
为什么被折叠?



