分享
 
 
 

Tomcat 5 servlet/JSP 容器 JNDI 资源使用说明 (一)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Tomcat 5 servlet/JSP 容器 JNDI 资源使用说明 (一)

这一段时间想做一下JNDI应用,走了不少弯路 T_T

希望大家在学习的时候可以先看一下标准文档,为了大家看的方便一此,特此译了一些比较重要的文字,请指正 :)

Introduction 介绍

Tomcat5提供了一个JNDI InitialContext(首要上下文)实现的实例供web应用程序在它之上运行,它的风格和其它J2EE应用服务器是一致的。他的登记是在$CATALINA_HOME/conf/server.xml 文件里,部署文件(/WEB-INF/web.xml)的配置请参考以下的元素:

<env-entry> - 环境进入, 单值参数,它用来指定应用怎么样被操作.

<resource-ref> - 资源参考, 典型的应用是指向一个对象的工厂,比如一个JDBC数据源, 一个JavaMail会话, 或者一个被配置进tomcat 5 的自定义对象的工厂.

<resource-env-ref> - 资源环境参考, 这是一个Servlet2.4中新加的变量。它更简单地配置了不需要验证信息的资源。

首要上下文的配置是被做为一个web应用首先部署的,它可以被web应用的组件所访问(只读)。所有的配置登记和资源将会被放置于java:comp/env下,它是JNDI命名空间的一部分,如此,一个典型的访问资源(在这个例子中,是一个对JDBC数据源的访问)方法如下:

// Obtain our environment naming context

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

// Look up our data source

DataSource ds = (DataSource)

envCtx.lookup("jdbc/EmployeeDB");

// Allocate and use a connection from the pool

Connection conn = ds.getConnection();

... use this connection to access the database ...

conn.close();

See the following Specifications for more information about programming APIs for JNDI, and for the features supported by Java2 Enterprise Edition (J2EE) servers, which Tomcat emulates for the services that it provides:

请参见以下关于JNDI的APIs详细信息,tomcat提供的J2EE指定的服务器特性如下:

Java Naming and Directory Interface (included in JDK 1.4, available separately for prior JDK versions)

J2EE Platform Specification (in particular, see Chapter 5 on Naming)

Configuring JNDI Resources 配置JNDI资源

每一个可用的JDNI资源的配制都在$CATALINA_HOME/conf/server.xml中定义,所用到的元素如下:

<Environment> - 为环境登记配置名称及数值,它将被通过JNDI首要上下文暴露于web应用程序(等同于在web布署器中包含的<env-entry>).

<Resource> - 为可用的资源配置名称及数据类型 (等同于在web布署器中包含的<resource-ref>).

<ResourceParams> - 配置资源工厂用到的java类, 比如JavaBeans的属性值.

<ResourceLink> - 在全局JDNI上下文中添加一个资源链接.

所有这些元素都放置于<Context>元素或<DefaultContext>元素内.

另外,所有的布署器(/WEB-INF/web.xml)中包含的<env-entry>元素都被配置进了首要上下文!仅当conf/server.xml里的<Environment> 元素被允许重载时,conf/server.xml和/WEB-INF/web.xml相一致的内容才被重载。

Tomcat Standard Resource Factories

Tomcat5为我们的web应用提供了几个标准的资源工厂,但是却不通过修改应用布署器给了您更大的弹性(在 $CATALINA_HOME/conf/server.xml 中).以下的几个小节都应用了标准资源工厂。

如果您想知道更多的关于建立,安装,配置,使用自定义资源工厂,请见Adding Custom Resource Factories。

注意:对于标准资源工厂,只有"JDBC Data Source"和"User Transaction"才能在其它的平台上使用,并且它们只是在平台实现了J2EE时才需要。所有其它的标准资源工厂,以及你自定义的工厂,都只能在 TOMCAT中使用,而不能被其它平台接受。

一般JavaBean资源

0.介绍

这个资源工厂用来建立任何一个符合标准JavaBeans命名规范的java类。它有一个零参数的 constructor,还有一些类似于setFoo()命名的property setters。当lookup()被使用时,这个工厂每次都会建立一个bean的实例。

使用此工厂的例子如下:

1.建立一个javabean类

建立一个资源工厂可以实现的类。这个例子,建议你用com.mycompany.MyBean类,它应该象下面这样:

package com.mycompany;

public class MyBean {

private String foo = "Default Foo";

public String getFoo() {

return (this.foo);

}

public void setFoo(String foo) {

this.foo = foo;

}

private int bar = 0;

public int getBar() {

return (this.bar);

}

public void setBar(int bar) {

this.bar = bar;

}

}

2.定义你需要的资源

下面,修改你的应用布署器(/WEB-INF/web.xml)来声名JNDI名称,最简单的方法是用<resource -env-ref>元素,象这样:

<resource-env-ref>

<description>

Object factory for MyBean instances.

</description>

<resource-env-ref-name>

bean/MyBeanFactory

</resource-env-ref-name>

<resource-env-ref-type>

com.mycompany.MyBean

</resource-env-ref-type>

</resource-env-ref>

注意:必须遵守应用布署器所需要的DTD定义的元素规则。详情见 Servlet Specification

3.编写应用此资源的应用。

一个典型的应用此资源的参考如下:

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");

writer.println("foo = " + bean.getFoo() + ", bar = " +

bean.getBar());

4.配置tomcat的资源工厂

配置资源工厂在$CATALINA_HOME/conf/server.xml文件里面要添加元素,在 上下文元素(或默认的上下文元素)里添加。

<Context ...>

...

<Resource name="bean/MyBeanFactory" auth="Container"

type="com.mycompany.MyBean"/>

<ResourceParams name="bean/MyBeanFactory">

<parameter>

<name>factory</name>

<value>org.apache.naming.factory.BeanFactory</value>

</parameter>

<parameter>

<name>bar</name>

<value>23</value>

</parameter>

</ResourceParams>

...

</Context>

注意资源名称必须符合布署器的规定。

在这个例子中,setBar函数必须在类中有定义。

JDBC Data Sources JDBC数据源

0.介绍

很多web应用都需要通过JDBC访问数据库来支持应用所需要的功能。为了实现这一目的,J2EE服务器需要一个数据源的实现(即一个JDBC连接池)。 tomcat5很好的实现了这一要求,所以你基于数据库的应用在其它的J2EE服务器上不需要修改就可以很好地运行。

JDBC相关信息,请参考以下内容:

http://java.sun.com/products/jdbc/ - JDBC的老家.

http://java.sun.com/j2se/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame.html - JDBC 2.1 API 说明.

http://java.sun.com/products/jdbc/jdbc20.stdext.pdf - JDBC 2.0 标准扩展 API (包含 javax.sql.DataSource API). 这个包被称为"JDBC可选包".

http://java.sun.com/j2ee/download.html - J2EE Platform说明 (包含了J2EE必须实现的所有JDBC特性).

1.安装JDBC驱动

要使用JDBC数据源,JNDI资源工厂要求您必须将合适的JDBC驱动放在Tomcat内建类和应用程序中。很方便的实现方法是将驱动放入$CATALINA_HOME/common/lib目录里 :).

2. 定义资源

下面修改你的web应用布署器(/WEB-INF/web.xml),在你将要查找的资源之前定义JNDI名称。约定是这样的:所有的这些名字都被放在JDBC子上下文之下(标准上下文的根目录是 java:comp/env),一个典型的web.xml内容如下:

<resource-ref>

<description>

Resource reference to a factory for java.sql.Connection

instances that may be used for talking to a particular

database that is configured in the server.xml file.

</description>

<res-ref-name>

jdbc/EmployeeDB

</res-ref-name>

<res-type>

javax.sql.DataSource

</res-type>

<res-auth>

Container

</res-auth>

</resource-ref>

注意:必须遵守应用布署器所需要的DTD定义的元素规则。详情见 Servlet Specification

3.编写应用此资源的代码

一个典型的应用参考如下:

Context initCtx = new InitialContext();

Context envCtx = (Context) initCtx.lookup("java:comp/env");

DataSource ds = (DataSource)

envCtx.lookup("jdbc/EmployeeDB");

Connection conn = ds.getConnection();

... use this connection to access the database ...

conn.close();

注意应用程序使用到的名字是和应用布署器中一致的,它也必须和定义于$CATALINA_HOME/conf/server.xml 里的资源工厂一致,描述如下:

4. 配置tomcat的资源工厂

配置工厂,请在$CATALINA_HOME/conf/server.xml里添加元素,放置于这个web应用的上下文中(或者放在被<Host> 或 < Engine>元素包围的DefaultContext元素中 )

<Context ...>

...

<Resource name="jdbc/EmployeeDB" auth="Container"

type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/EmployeeDB">

<parameter>

<name>username</name>

<value>dbusername</value>

</parameter>

<parameter>

<name>password</name>

<value>dbpassword</value>

</parameter>

<parameter>

<name>driverClassName</name>

<value>org.hsql.jdbcDriver</value>

</parameter>

<parameter>

<name>url</name>

<value>jdbc:HypersonicSQL:database</value>

</parameter>

<parameter>

<name>maxActive</name>

<value>8</value>

</parameter>

<parameter>

<name>maxIdle</name>

<value>4</value>

</parameter>

</ResourceParams>

...

</Context>

注意资源名称(在这里是jdbc/EmployeeDB)必须要符合web应用布署器的规定。

这个例子采用的是HypersonicSQL数据库JDBC驱动。请修改相应的驱动程序名以及连接URL以符合您所用的数据库。

tomcat标准数据源配置工厂所需要的属性如下:

driverClassName - JDBC 所用到的数据库驱动的类全名.

maxActive - 连接池在同一时刻内所提供的最大活动连接数。

maxIdle - 连接池在空闲时刻保持的最大连接数.

maxWait - 当发生异常时数据库等待的最大毫秒数 (当没有可用的连接时).

password - 连接数据库的密码.

url - 连接至驱动的URL. (为了向后兼容, driverName也被允许.)

user - 数据库用户名.

validationQuery - 这是一个select 的SQL语句,它将被工厂所调用以保证数据库可用。

译:yifi (yifi@tom.com)

出处 jakarta.apache.org

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有