在本应用中由于是以derby数据库作为数据存储,采用网络连接方式连接derby,在启动tomcat 服务是进行一些数据库的初始化工作,比如创建表之类的。
所以就特地创建了一个servlet 去做这些初始化工作。
在web.xml中配置如下:
<web-app>
...
<servlet>
<servlet-name>derbynet</servlet-name>
<servlet-class>org.apache.derby.drda.NetServlet</servlet-class>
<init-param>
<param-name>startNetworkServerOnInit</param-name>
<param-value>true</param-value>
<description>Starts the Network Server at servlet
initialization if 'true'. </description>
</init-param>
<init-param>
<param-name>portNumber</param-name>
<param-value>1527</param-value>
<description>Port number to use. The default is 1527.</description>
</init-param>
<init-param>
<param-name>host</param-name>
<param-value>localhost</param-value>
<description> Host Name to use. The default is "localhost". Please secure any server which listens on a public address. </description>
</init-param>
<init-param>
<param-name>tracingDirectory</param-name>
<param-value />
<description>Directory where trace files should be placed. </description>
</init-param>
<load-on-startup>true</load-on-startup>
</servlet>
<servlet>
<servlet-name>InitializeDatabase</servlet-name>
<servlet-class>com.sap.pf.prp.servlet.InitializeDatabase</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
...
</web-app>
一切妥当之后,在eclipse下启动tomcat 服务,一切正常。
但是当我启动tomcat目录下的startup.bat时,就报错了,信息如下:
java.sql.SQLNonTransientConnectionException: java.net.ConnectException : Error c
onnecting to server localhost on port 1527 with message Connection refused: conn
ect.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unkn
own Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Sourc
e)
at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at com.sap.pf.prp.db.DBManager.getConnection(DBManager.java:56)
at com.sap.pf.prp.db.DBManager.initDB(DBManager.java:27)
at com.sap.pf.prp.servlet.InitializeDatabase.init(InitializeDatabase.jav
a:13)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.
java:1139)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:96
6)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContex
t.java:3956)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
230)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443
)
at org.apache.catalina.core.StandardService.start(StandardService.java:4
48)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700
)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: org.apache.derby.client.am.DisconnectException: java.net.ConnectExcep
tion : Error connecting to server localhost on port 1527 with message Connection
refused: connect.
at org.apache.derby.client.net.NetAgent.<init>(Unknown Source)
at org.apache.derby.client.net.NetConnection.newAgent_(Unknown Source)
at org.apache.derby.client.am.Connection.<init>(Unknown Source)
at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
at org.apache.derby.client.net.NetConnection40.<init>(Unknown Source)
at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl40.newNetConne
ction(Unknown Source)
... 24 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at javax.net.DefaultSocketFactory.createSocket(SocketFactory.java:206)
at org.apache.derby.client.net.OpenSocketAction.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 30 more
Feb 11, 2015 1:34:10 PM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-80
在网上搜了好一阵子,都没有找到真正的解决办法。
https://db.apache.org/derby/docs/10.4/adminguide/tadmincbdjhhfd.html
http://db.apache.org/derby/papers/DerbyTut/ns_intro.html
http://stackoverflow.com/questions/10420902/data-sources-derby-connection-refused
最后经过仔细的排查,发现其实是我自己的web.xml配置中【servlet启动优先级设置】的问题。
只需要将derbynet中:
<load-on-startup>true</load-on-startup> =====> <load-on-startup>0</load-on-startup>
再将初始化数据库的那个servlet的load-on-startup 改为1 即:
<load-on-startup>0</load-on-startup> ====> <load-on-startup>1</load-on-startup>
改完了之后重新发布启动tomcat,一切正常。
相关推荐
Tomcat连接池可以通过JNDI来配置数据库连接信息。在Tomcat的配置文件中,添加以下配置信息: ``` type="javax.sql.DataSource" username="your_username" password="your_password" driverClassName="org....
上网页也可以找到一些资源关于derby数据库的安装配置,但是你看起来会很麻烦,而且比较难以上手。 这是我自己动手实践过的,里面有很多截图方便你理解安装过程,已经电脑上面环境变量的配置,在MyEclipse上面的...
Derby数据库完整压缩包,解压缩即可使用,bat文件在bin文件目录下,驱动程序在lib目录下。 Apache Derby非常小巧,核心部分derby.jar只有2M,所以既可以做为单独的数据库服务器使用,也可以内嵌在应用程序中使用。...
4. **执行转换**:输入正确的命令后,工具将开始读取Derby数据库中的表结构和数据,并生成相应的SQL脚本。这个过程中,可能会有选项来决定是否包含索引、触发器、存储过程等复杂对象。 5. **审查和导入SQL脚本**:...
本文档将详细介绍Derby数据库的初级使用,包括安装、启动、创建数据库、设置用户以及连接数据库的步骤。 1. **Derby数据库版本**: 版本为db-derby-10.8.2.2,可以在官方下载地址...
Derby数据库Eclipse插件是开发人员在Eclipse集成开发环境中使用Apache Derby数据库时的一种便捷工具。Apache Derby,也称为JavaDB,是一个开源的关系型数据库管理系统,完全用Java编写,支持ACID事务、SQL标准以及多...
Apache提供了几种不同类型的Derby发行版,例如bin发行版,包含数据库工具、配置脚本、示例、API文档和库文件。安装Derby只需下载并解压缩对应的zip或tar包。配置Derby环境涉及设置`DERBY_HOME`环境变量,将`bin`目录...
### Apache Derby 数据库开发文档概览 #### 一、Apache Derby 概述 Apache Derby 是一款高质量、纯 Java 的嵌入式关系型数据库引擎。它最初由 IBM 开发并捐赠给开源社区。Derby 数据库的特点在于其轻量级、易于...
- **批处理文件和Shell脚本**:提供了用于启动和停止数据库服务的批处理文件和Shell脚本,简化了操作流程。 - **JVM兼容性**:Derby支持多种JVM版本,确保了跨平台的灵活性和兼容性。 - **类路径设置**:明确指出...
Derby提供了一个网络服务器模式,可以通过执行`bin/startNetworkServer.bat`来启动该服务。 如果需要指定IP地址,则可以使用`NetworkServerControl`工具并指定主机IP。例如: ```bash bin(NetworkServerControl ...
前面讲的配置 derby.properties 文件是为 Derby 嵌入式数据库配置系统设置。这种方法可以实现对某一个数据库的用户验证。 1. 连接到数据库,运行以下语句: CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby....
derby 数据库驱动jar包, 更多其他数据库驱动jar包(包括db2,derby,exasol,h2,jtds,mimer,mysql,nuodb,oracle,postgresql,redshift,sqlite,vertica)请看楼主其他资源贴
1. **bin** 目录:这个目录下的可执行文件(.bat脚本)用于启动和管理Derby数据库,例如`ij`命令行工具,可以用来执行SQL查询,以及`startNetworkServer`和`stopNetworkServer`脚本,分别用于启动和停止Derby的网络...
1. **安装与配置**:Derby数据库可以作为Java类库嵌入到Java应用中,无需独立服务器。只需将derby.jar和derbyclient.jar添加到项目的类路径中即可开始使用。 2. **连接数据库**:使用JDBC(Java Database ...
在Apache官网上,Derby提供了多种发布包,如bin包,包含了运行Derby数据库所需的工具、配置脚本、示例程序、jar文件等。 **安装Derby数据库**: 1. 从Derby官方网站下载对应的zip或tar包,解压缩即可。 2. 解压后的...