Jee - Tomcat MySQL JNDI 配置

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>。

 Jee - Tomcat MySQL JNDI 配置_第1张图片
<?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> 结点。
Jee - Tomcat MySQL JNDI 配置_第2张图片
 	
<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 一下吧。

你可能感兴趣的:(eclipse,tomcat,mysql,javaee,JNDI)