我们都知道在tomcat中,可以通过在context.xml中配置resource中用于配置tomcat数据源,如下所示即是一个配置例子。
<Context> <Resource name="jdbc/xx" auth="Container" type="javax.sql.DataSource" password="mymysql" driverClassName="com.mysql.jdbc.Driver" username="root" url="jdbc:mysql://127.0.0.1/xx" /> </Context>
配置了如上的数据源之后,在java代码中,就可以以如下代码进行访问:
InitialContext initialContext = new InitialContext(); DataSource dataSource = (DataSource) initialContext.lookup("java:comp/env/jdbc/xx");
那么,tomcat是如何将resource中的信息解析成上下文中,并可以通过jndi的方式进行访问呢。这就得从contextResource对象的创建说起。
在NamingContextListener中,namingContext被创建,同时相应的comp上下文和evn上下文被创建起来。然后通过解析context.xml,将最终的jdbc/xx节点绑定在相应的上下文中,并通过解析Resource节点,最终确定数据源对象的创建。