JNDI Tomcat 启动错误
Scene:
在 Tomcat 测试 JNDI。(配置context.xml和web.xml的JDBC资源参数以供web应用连接至mysql数据库)
错误信息:
Creation of the naming context failed:
javax.naming.OperationNotSupportedException: Context is read only
Solution:
? No solution yet
(link: http://stackoverflow.com/questions/15340218/what-could-cause-javax-naming-operationnotsupportedexception-when-tomcat-start
)
Tomcat MySQL JNDI 配置
Scene:
利用 JNDI 来为某个 App 配置数据源。(在 apache tomcat 提供的文档里面有提及"JNDI Datasource How-To")
好处是在该 App 的代码文件里面可以实用 JNDI 提供的接口来链接数据库,以后更改数据库产品的时候只需要一次性配置该 App 的配置文件就可以了。而不需要更改所有文件里面的代码。
Solution:
需要配置的文件有 context.xml 和 web.xml。当然(mysql的驱动可以放在web应用的 $root/WEB-INF/lib 下面,也可以放在 $tomcat/lib 下面)
context文件内容(其中的各项值的意义可以参考 tomcat 提供的文档):
在 context.xml 里面添加 <Context> 结点,在 <Context> 中定义 <Resource>。
|
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test"
username="root"
password="tsm;jd"
removeAbandoned="true"
removeAbandonedTimeout="120"
maxWait="60"
maxActive="20"
maxIdle="10"
/>
</Context>
|
web.xml文件需要添加的内容:
在 web.xml 里面定义 <resource-ref> 结点。
|
<resource-ref>
<description>the data source of mysql database, the application could use this resource to
connect to the database</description>
<res-ref-name>mysql-ds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<lookup-name>jdbc/test</lookup-name>
</resource-ref> |
可以通过菜单(安装 JBoss 社区提供的 JBoss Studio 在 eclipse 里面)
调用:
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
private static Connection CONNECTION;
static
{
try
{
Context ctx = new InitialContext();
Object datasourceRef = ctx.lookup("java:comp/env/jdbc/mysql");
DataSource ds = (DataSource)datasourceRef;
CONNECTION = ds.getConnection();
}
catch (NamingException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
其它还有很多配制方法,具体可以参考 tomcat 文档,或者 google 一下吧。