TOMCAT遇上Derby
一直以来在写程序的时候觉得有许多数据是运行这个程序本身需要的,和用户的数据没有什么关系,都放在一个库里有点不合适。分开放要同时连接两个以上的大型数据库(客户的数据一般都放在大型的数据库里面)好象也不太合适。
在网上一查发现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的连接池这些和其他的没有什么区别了。以后有时间再记吧。
--
X-Spirit

没有评论:
发表评论