[数据库连接池二]Java数据库连接池--C3P0和JDNI.

时间:2023-03-08 16:53:53

前言:
上一篇文章中讲了DBCP的用法以及实现原理, 这一篇再来说下C3P0和JDNI的用法.

1.1、C3P0数据源

  C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。

  c3p0与dbcp区别
  1. dbcp没有自动回收空闲连接的功能
  2. c3p0有自动回收空闲连接功能

1.2、在应用程序中加入C3P0连接池

  1.导入相关jar包
       c3p0-0.9.2-pre1.jar、mchange-commons-0.2.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-0.9.2-pre1.jar
  2、在类目录下加入C3P0的配置文件:c3p0-config.xml

    c3p0-config.xml的配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--
c3p0-config.xml必须位于类路径下面
private static ComboPooledDataSource ds;
static{
try {
ds = new ComboPooledDataSource("MySQL");
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
--> <c3p0-config>
<!--
C3P0的缺省(默认)配置,
如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源
-->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy</property>
<property name="user">root</property>
<property name="password">XDP</property> <property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config> <!--
C3P0的命名配置,
如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源
-->
<named-config name="MySQL">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy</property>
<property name="user">root</property>
<property name="password">XDP</property> <property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">5</property>
<property name="maxPoolSize">20</property>
</named-config> </c3p0-config>

如下图所示:

  aaarticlea/png;base64,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" alt="" />

C3P0使用实例: C3P0Utils.java

 public class C3P0Utils {
private static DataSource dataSource = new ComboPooledDataSource(); //从池中获取一个连接
public static Connection getConnection() throws SQLException{
return dataSource.getConnection();
} public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if(conn!=null){
try {
conn.close();//关闭
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

测试类:UserDaoImpl.java

 public class UserDaoImpl {
@Test
public void testInsert(){
Connection conn = null;
PreparedStatement ps = null;
try {
conn = C3P0Utils.getConnection();
ps = conn.prepareStatement("");
//...
System.out.println(conn.getClass().getName());
} catch (SQLException e) {
e.printStackTrace();
}finally{
C3P0Utils.closeAll(null, ps, conn); }
}
}

可以看出只要将配置文件c3p0-config.xml放在classpath中,或classes目录中, 然后通过private static DataSource dataSource = new ComboPooledDataSource();就可以自动读取到,确实很方便易用.
到了这里我们来看一下这里的源码:

private static DataSource dataSource = new ComboPooledDataSource();

ComboPooledDataSource.java

  // not reassigned post-ctor; mutable elements protected by their own locks
// when (very rarely) necessery, we sync this -> wcpds -> dmds // note that serialization of these guys happens via out superclass
// we just have to make sure they get properly reset on deserialization
transient DriverManagerDataSource dmds;
transient WrapperConnectionPoolDataSource wcpds; public ComboPooledDataSource()
{ this( true ); } public ComboPooledDataSource( boolean autoregister )
{
super( autoregister ); // System.err.println("...Initializing ComboPooledDataSource."); dmds = new DriverManagerDataSource();
wcpds = new WrapperConnectionPoolDataSource(); wcpds.setNestedDataSource( dmds ); try
{ this.setConnectionPoolDataSource( wcpds ); }
catch (PropertyVetoException e)
{
logger.log(MLevel.WARNING, "Hunh??? This can't happen. We haven't set up any listeners to veto the property change yet!", e);
throw new RuntimeException("Hunh??? This can't happen. We haven't set up any listeners to veto the property change yet! " + e);
} // set things up in case there are future changes to our ConnectionPoolDataSource
//
setUpPropertyEvents();
}

具体更多细节 还请大家看下源码了, 这里我就不继续往后扩展了. 源码下载地址: http://nchc.dl.sourceforge.net/sourceforge/c3p0/c3p0-0.9.1.2.src.zip


2.1 , JDNI

JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.naming包,
  这 套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需 通过名称检索即可。其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。

  Tomcat服务器创建的数据源是以JNDI资源的形式发布的,所以说在Tomat服务器中配置一个数据源实际上就是在配置一个JNDI资源,通过查看Tomcat文档,我们知道使用如下的方式配置tomcat服务器的数据源:

1 <Context>
2 <Resource name="jdbc/datasource" auth="Container"
3 type="javax.sql.DataSource" username="root" password="123456"
4 driverClassName="com.mysql.jdbc.Driver"
5 url="jdbc:mysql://localhost:3306/datest"
6 maxActive="8" maxIdle="4"/>
7 </Context>

  服务器创建好数据源之后,我们的应用程序又该怎么样得到这个数据源呢,Tomcat服务器创建好数据源之后是以JNDI的形式绑定到一个JNDI容器中的,我们可以把JNDI想象成一个大大的容器,我们可以往这个容器中存放一些对象,一些资源,JNDI容器中存放的对象和资源都会有一个独一无二的名称,应用程序想从JNDI容器中获取资源时,只需要告诉JNDI容器要获取的资源的名称,JNDI根据名称去找到对应的资源后返回给应用程序。我们平时做javaEE开发时,服务器会为我们的应用程序创建很多资源,比如request对象,response对象,服务器创建的这些资源有两种方式提供给我们的应用程序使用:第一种是通过方法参数的形式传递进来,比如我们在Servlet中写的doPost和doGet方法中使用到的request对象和response对象就是服务器以参数的形式传递给我们的。第二种就是JNDI的方式,服务器把创建好的资源绑定到JNDI容器中去,应用程序想要使用资源时,就直接从JNDI容器中获取相应的资源即可。

  对于上面的name="jdbc/datasource"数据源资源,在应用程序中可以用如下的代码去获取

1 Context initCtx = new InitialContext();
2 Context envCtx = (Context) initCtx.lookup("java:comp/env");
3 dataSource = (DataSource)envCtx.lookup("jdbc/datasource");

  此种配置下,数据库的驱动jar文件需放置在tomcat的lib下

  aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqkAAACXCAIAAAC5q1VkAAAgAElEQVR4nOy9V3Qc15nvWy9zX2Ykea1zTEoOo5lR8oODSI8okRQtn3s1ozkeS7ZsMUdZM5JnFCx5ZJEgCBCMCIwgQYIgcmrknHMOjdBIjc6xQsfqHBEo3IddsbsaAEFSgOjq9VtY1bt2+PbeXfX/9le7G1B1XXNVbVNVbVNVTWMloLqxorqhorqhvKq+vKq+vKqurLKurKK2tKK2tLy2pLympKymuKy6uLS6qLSqqKRKUFIpKK4sLK4oFFQUCCoKiiryi6ryi6vzimvzylvyqzrzawcKGkcKW6cEHZKiHlVxn764Hxb0IYJ+tLAPze9B8rr12V26zA5ters6rUV1u0lxq1F+s0F2vV56rVZytXr2SrX4UtVMUuV0YsV0QvlkfNlkfNnEhbKJC6UTF0pE50tE50pE54rHzxWPnysaOyMYPVM4Elc4ElcgBMTm05zOHzldMHK6YPR0wejpwtG4wrHThaOxhaOxhSOxhSOxBQBhbIEwpkAYWyAEKTH5I7EFo7GFY7GFY6cF46cFotMCUVyRKK5oIq5oIq4IHItOC0SnBeOnBeOnC8diC8diC0ZjC0ZjCkZi8kdi8kdO5QlP5Qmjc4ejc4eic4ZO5gyezB6Iyh6Iyuo/kdV/IpMkq/9EVn9U1kBU9kBU9sDJnEFu6LJ9JzJ7j2f0HM/o+Sq9m8nxjJ7jmb0nMvuisvqjsgZOZg+czBmMzhmKzh2Kzh0G9pzKB+aNxhSMxhSMxhaMxRaMgZ4CYgrHwCk2RKdCOJUvPJUvPJUnPJU3fCpvODp3RYZWwfCp3GFQIQMhF6w8q6s8tK3o3OHo0LZWBIykMCZfyB4QYQw9IBwWrp7QscoZiiY+BoMnswdOZg9EZfUTZPYRZPURKdn9IA/45ETnDDKrYo8t56iGkR/Gyh2MWE8Mc9wKRmIKRtnX2jj7WpuIK5qIK6avu5ArjvxkUp9AcqByBohBIIZiIGQoIpg6fCpv+FTu8Cli2Aej6ar6T1IDS1bIuL7ojxPjE0J+MBiXUmwBuP+MhSIYjxWEJRaOxhaOxjChrkcAMR2hg0+MMGiRszlG/SEZiDtekSiueCKuePJMyeSZkqmzpdPnymbOlYvPV8xeqJRerJYn1CoT69VJDdpLTfrLzcjVVuxqm+Fqm+Fam+Fau/Fqm+FKK3alBbncBF9q1CXWaxLqVPE1igtVsvOVknPls2fLZs6WTp8pnTpTMnWmZJJsiGiOoHTqbOn02dLps2UzgHOAcvG58plzZCKoCkBWOHWmZCqueDKuePJ00cTpoonYIlGsQBRTOB5TOHaqYDQ6f+RknjAqdzgqZ+hE9uDxzP6vMvr+kt775d3u/0nr+vOdji9ut39+q+1PKa1/utny2Y2mT280fprc8Mn1+o+v1X98re7jq3X/fbU2hI+v1X18rf7j6/WfXG/4JLnx0+TGT280fXazmSClheAmRTPNjebPbjR9GgGQ508pLX9Kaf38Vtvnt9s+v93+RWrHF6mdf75D80Vq5xepHV+ktn8OjL/V+qeU1s9SWj672fzpjSaopnWgprW/prW/urW/uqW/uqWvqqWvqqWvsrm3srm3sqm3srG3orGnrAHQVVrfVVrfVVLXWVLXWVzXWVzTUVTTUVTTIahuF1S1F1a1FVS1F1R35Fd35ld3F9QNFDQIC5tFhW3Tgg6poEdV3KcrHkCLBzBBPyYYMBQOGPL7sLweNKcbyeqCMzp16e3aO22a2y3qW02qG43K5Ab59XrZtTrplVrplRrJ5RrJpZrZpCqAOKFSnFA5k1A5k1AxHV8+fbF8+mL51MWyqQtlkxdKJy+UTpwrISkmOFsyebZk8lzJ1LnSqXOlk5ycLZ04WzJxtmTiTPHEGbLI2ZLJsyVTZ0unzpVOnyudPlcGAB8+8i04VTp1FlAyBQqeKZkEVZ0pJh0FwfhpwdhpcLEV0ITcDk4DBNRNcPy0YIyALktqTN7wqTzmLWwYXPCxBSOxBaNkVeNxgnHSWZkgrWJ0MCLMS5HmLAcTZ4upmldEdKZYdKaIQTEn5FxQlAAYjTIpjmSDiKPF0KYnIjcXCc5xmAw1L6JV9zNcDIPjisbjwIQKxuKIT8soF2NxApKi8bii8TNF44wuM3rK2TvWOCzbR3YHI08WB+dKJ8+VTtGUTZ8nmDlfDhBfCIU8VTZ9nrgAp86VTp1jfQ7JgSoiByp8HIpFYSMQPmtgzEE9xAXIuDzHTgvGiLkAecj1QFwR6xPFuGTIm0nZ9Dmij+LzFeLzFeILFeILFbNhEGc5oMahfOY8dS8qm2Iwfa5smhpGspWV6ycsqZy9UCm5WCm5WCW9WCWNr5bFV8via+QJtYrEOmVivSqpQX25UXulWX+1BbnWhl5vNyR3Gm90mW90W26S3Oi23OgyJ3earncYrrVhV1uRK83w5SbdpUZNUr06sU6VUKtIqFHE18jja+REExQgsUaeUCNPqFEk1DJRJtYqE+uUibVKVnqNIqFGnkDURlR4sVoGunChUnqhUnK+YvZ8xey5cvHZ8pmzZdNnSqfjSqZOF0+eLhLFCmifIDpPeJL0CU5kDxzP6j+e2fdVRu9f0nv+kt795d3uL+92fXm368u0zv9h8GVa55d3u7682/2X9O6/pPf8Jb3nq4zerzJ6v8rs+yqz73hm3/GsfhqQktl3PLPvK4LerzJ7iSJMMlk1nMgeOJE9cCJnMCpnKCpnKCp3+CSDqNzhqNyhqJyhqJxB2nhgf2YvVNs7VdszWdszWds9WdszWdMzUdM9Ud09Ud01UdUlquwkqOgYr+gYL28fL28fL2sfK2sbK20dK20dLWkZKWkZKW4ZKWoWFjULBU3DgqYRQdNIYdNoQfNYYctEYdt0YYdE0KUQ9KgFfbqiAbRoACsaNAgGDYUDxoIBY36/Ia8Py+lFsrqRzC44vVOX1q5NbdPebtXcalbfbFbdaFImNyqvNyqv1Suu1Suu1suv1smv1Mku18ku10kv1Uov1RAk1UiSqiWJ1ZLEytmEytmESnFChTihQhxfIY6vEF+sEF+sEMdXzMZXiklm46tm4ytDoDMzmL1YSRBfKSGoksRXSei34PKolFA5CSpmQSUXAOUzF8i71XnG3YoFxx0wlHNlpPtC36REZ4pFZ2kmzpZMULXRZctngA0XSJMuVswyO8hBxexF8gbBhCpFj14VSeioPjBVswk0ktUxG0Jkw8ThzcXfR0Mk1SvYc98js7zN9Odz5mLFzMXymYuEBzx9gYRMmSHyVMxcrGB8/llje5+dDYOe/apVD2A1hTQxhBoZRVKNLKlGnlQjT6plUCNLYuShCjJmgZpc6iZADALrJrDCCBCjdLFSfLFi5kIFuHy4rsry6QvUxRV2lV0AM0XdRqok8VXShGppQo0ssVaeWKdIqlNeqlddagCoI6Pipl51qV55qV6ZVK9MqlMm1SlIlEn1yqR65aV61f3UT6dcblRfbtQQNGmvAJp1V1v011rha63I9TY0uQO70Wm82WVK6Tbf6rXe6sNv99tS++2p/fbUAXvqgD213367z3arD7/Va03psdzsMt3oNCZ3GK63Y9fb0GutyNUW+GqL/mqL/mqz7koYV5t1xFkW8NVW+BoJR4ZmHV1bk+5Kk/YyoFFzqVFzqUGd1KBOqlcl1isT65QJtYr4Wnl8jexitfRClQQ4B+cqxOfKZ86WTZ8tnTpTOnmmZDKueCKuWHS6SHS6aDxWMBYr4ArGFI7GgPAJyCAYO100frpo/HSR6HSxKI5ggg2RfpqiKAJU8ZKJuJLJM6WTZ0qnzpROnS2b5qZ06gxlfMlEXMkEaAWqH1LUDynqSGqH5LVD8poBec2AvHpAXj0gq+qXVQL6ZBW90opeaXmPtKxHUtYjKeuWlHZLSrslJV3iki5xcYe4qENc1CkWdMwKOmYLOySCLpmgW1nYrRL0agV9ekE/IhjABIOGwkEjEP6CAUN+vyG3D8vpRbN7kMxuJL0Tvtuhv9OuS23X3W7T3mrVprRobjZrbjarbzSpkptUyU2q68AVaKC52qC40qC4Uq+4Uq+4Uie/XCe/XCu/XCu7XCtLqpGyqJVdoqiRXaqVk8gu1cqSADVc1MpY951VwaqNvEmF3qE4bu5Vs/Hc90eSUC0Rk0owcxH4OgznhlHPMjdWWdiNFSBLjExSjSwJjF6d/HKd4nK94kq98qHRoLy6HKpVw1E8rDkFs90r99tKYwS4bLjC0TpH3yN1P8xs6mNPfvIjcKVOzsrPMcKrGrr7zMnOH2mgGlXXaNQ0TZxorjVpQhPpUqpr9OBTg6bghNtOruKX6xWX6+TELaJGmlgjTQTLDALmlUURdrHU0PeQS3WKy/XKyw2qK43qq83aay2666365HYkuR1J7kBvEGAk6GpIbkeJGrgJL7KayrEbHdiNToKbnYabnYabXYabXcaUbmNKt+lWj/l2r+V2nzW1H78zYEsbtKcNOe4OO+8Ou9KFLO4OO+8OOdOGHGmD9jsDttR+PLXPervXcqvXcqvHnNJtSuk2pXQbU7qNKV3Gm13GFEB3CKZQekwpPWGJVP4u400aw81Ow41Ow41O7EYHltyBJXegye3o9XbkehtyrQ2+1gqcBt2VZu2VJu3lJs3lRvWlRvWlBlVSA3ChFIl1isQ6eUKtPKFWllAji6+RElRL46slDKTUqYQaWUItQJ5QK0+so1AwjuWJdfLEWnliLag8Iqzi9Qrg2CU1KJMaVElsdzCJgHD+SOMJ+6H6MX39qL5+VF8HGNHXjuhqR3Q1I7oaoa5GqKse1lUPa6uGtZVD2opBgKZ8gKC0X13ary7pUxX3qYr7VEW9BIIeVWGPStCrKezTCfp0hf1wYR9S2I8KBrDCAUPBgCF/wJDfb8gDwt+HZfeiWT1oZjeS0QXf7YTTOvV32vWp7brbbcAD0KS0alJaNTdbNDebNTea1SFcb1Jfb1Jfb1RRXGtQXW1QsKinDpQ0ITfl+2XZe3eEnOA+ApBfrpMz/A8GrBu3ggGdfqmO9loiEFZJPVBoxZUQnV6pa5frlaAskytgABtV1xpV15vUyc2aGy3aG606wM1W3U3yOCQxEikUbUz0kbi1Iu36W+3EMbssoy2Opu+zrXYuOBrVEz1qXYnlOh6amTGA2pUIH16ODi4z4A8I90CxgB+Y8PHXLQu7+2RxarTBwCa3aK43q681qa42Ut6A/HK9nHEtKEJdq8j3hKsNqqtN6mvNmustuuQ2/Y0OJKUTu9VtvN1rSu0zp/ZZ7vRb7vRb7wyQ9K8Sy51+SyoXRIUhrKbmASb4nQE8DTBoSxu03R2y3x2ypw870oXODKEzY8SVOerOHHNnjXmyxr3ZbLLGPFljnsxRd+aoO2PElTHiTBc604cd6cMOUM/dIdvdQVtaBO4O2u4OUdgjQGbgrGQATxvA7xBY7/RbU/utqf2W1D7L7T7L7V7z7V7zrV7TrR5TSg9wHYCXg93sxG50ojc60RsdaHIHktwBfCn4ejt8vQ2+3qZfDpCtHU4mQIgaQuDw1WAuWKVudKCEYZ0o5Z+FgVLG32A0B9WLMEDdOEHtOFY7htWModVjaPUoWjWCVo2glSNopRCpECIVQqR8GCkfRsqGkbIhuHQILh2CSwbhkkG4eEBf1E8g6NMX9usL+/SF/XBhP1LQjxT0owX9aEE/lj9gyB/A8vqx3H4stw/L6UOze9HsHjSzB8noRjK6kfQuOK1Tn9ahv9OhSwUBgHbd7TYtCAPcatWmMLjZQkF4BjebNcnN6uRmdXKzKrmZCBUQNKqSG1XJTeoQrn/DsFY5KmYAgyYkDzfMyAcNoxKOeq43qu7X4EjtXm9UJTepbzRrbrZoUtp0t9r1tzvg1E50OboA2B2SNEA3djeEHkP6oyS0OUa7a2+6d9kWAd2Rm6YxLGPG3WWMX5EeLL0He6QDex9jxY1xGTLYhGVYfgowBqv4hPRgd7uxtG70TidyuwP4AZobLerkZvX1JtW1RuL6ut6out5EsYoLqll9vVmT3KK90aa72QHf6kRvdxvu9JnSBqzpQ7YMoT1D6MgccWaO3icjq+N+qx11McmiGHNljbmzx9zZ4+7scU+OyJMj8uZMeHMnfLmTvrxJf95UGJP+3El/7qQvd8KXM+HNEXlzRN7scQ/BmDtr1WRHYNlShOWM7hBjkjHizBhxZAgdGUJHutCePmxPH7bfHaZdjbRBnMSaRntCljsDwKmyhHtdzHQi54CF7Ug9EGkD1rRBAL5qrEz7oXqRsV5kbJux9CtsIyq7kGRYZR9W2gBDCtugwjaosA8SB7YBha1fYRuQ2/rleL8c75fhfTK8V4b3Sgl6JHiPBO+W4t0SvFuCdxHYuiS2LgneKcE7JXiHBO+YxTtm8XYx3i7G28R4mxhvncFbZywt0wTN05bmKUsTF42TTMyNk+bGCXPDhLlhwkRRTyFiMLEBEIVSxyD87IqsquwDW1snMtWNm+rGjbXjxtpxQ73IWD9hapgwN05amqaszTN4i9jWMmtvmbW3zDqWoXXW0SpxtpG0S5wdUheBjKBzFXQsy9qKr6bdDcXyg9AhdS7HI+4ytxmrHuqutfLQjJc6OySOtll7ixhvnrY2TZkbJ8kbi8i4pivLDGiYtDROWZtm8CaxrUXiaJW52hSeDpWvQ+XvUPs7NYFOTaBLG2QT6FwRTWTYObu0IfUHujgyhNsQzlyXdq5LN9elm+vWzXXrAfM9XHTr54kMOqIIUZxgxbbC2l1r8U5tMHy4OjSBDjUDlZ+Nr0Pla+dEGYFI+R8SHQT+VRBqPAQEY0Buy6vu/DzqzLt7D4fz22XYc/i3ew7/JgLvhLObxdsR+PXuQ7/efejX7z0Q/87zcPk94CCL9w79OzHgh3+9+/Cvdx95e8+Rt/cc+TXNUSZvs3kHsPfoO3uP/uZbzb5l+QYtWYKgh8L6D+lyA3tsJVaakRUhDXhn79F39hx5e8/ht3cfZtxYqEtg7RcUeckcfnvPkbdBQ/uOvbP//Xf2v/+bbx0HAH+4H97/zYH1Njsy7zzuQDVjhpoxw5ja/sXJs7NqbH7h3tw3TvARMc/zTcEa+a9XzxyTxftk4X5YTT33a8CGZAmC7m+47quSNbCGGdloLHwdept6OFcKfcmEDcgSD88jBaoSIpVCZFRl233w/fmFewa7H7P5wvBjdkCAwBHA7EHMEaBT7AHMHkCZ2AKoLYBwAVPgARj3h6B/cKyh6HgeFhafzuLTWrxai1dn8emsPiIdD+jwgA4P6mxzWtucFp/TsNECbAQ627zePg/b52HHPOKYRx3zmJOBY27VBDF7EA3HEcQcwfuph2Iec84bnPMG1wLASGJgYKRZNLoWje5Hg4tigRODa8HgXDAAg53zmHN+CYKoXqx6JMkukyxBkIGdYnAucMFIZ44PaRKzFWpq6ESq5gi9Y3R/8dGOM/fIE33BHPOoYw6xBcDdSWf1sVnTdYT79XhAbwvo7UHYMYc45hHXAupexNyLmOce5rmHeb7e6Hi/PTySEbj3ADxIbQ/HfqhsUFs2oB1RWHYfPDa3cA/DvRjucRnLfcarXvSKW5fo0iS41IkO5UW7/BwujbPMxpikSQZ9h8ERNNgDBnsQ3Hwxe5DbAyCdgGVcARoceAPLEOoorMhD8CT+OnhYsWKebx6Dc87gmDM4gpgjuARBGLgqQyAu0iB1YRIpjiDmCBoccwYnDVEnwXwEls8wZ6A9M3Af8BPYAyjRNFHc6JqP5NyY3Itc3DN5CMxrwhSC+x5nQ0b3gtG1AJwY1B6EbdRdxae3AiKtOhgZrByXG4z7YVsAtgdgexBxzKHOedS1gLkXMc+iwXPP4L1n8H7Nw/PogIp6FIJuhVBm2nvo/bmFRdTqRq0un/HKgr/m3oLZa0mzaeNV41HzvvZ7872AOW8jNnPR4AiQgDtLaAyAMwywsvxHxI/Y/DMq7Kcvb51WYbDND9v80yrs+Rd/1No3Sl2TPGtmCYJW60sRNzUvcQAWQ3hAiwc0eFBjDaqsQZUlqLQEFZagwhJUUoBT1jmVdU6Dg9X/nN4+B9vnEPscSviRhEgguC8cxikvYvXCVg+BhQ2VbvXCVi9i9SK4l7NCBPeCqogMNj9q82P2AOYIGpxzRtc8CycD17zRtWByLZjctD6ZPRQhYrMYAU5lWjR7Fs20Ai2YCCFkNg3sIXSaisChNv8SBNEqawugNj9GQqVTIwnyMOJ5xIW8BEGsa9lBuQgEmIMM+zkCIacMwJMAVYEmyKGGOceZ8gCcYR0EI0wMMjHOZjdr3Cz3T6QBZ0IPvnvB6CK0H9yFaPnHfXruSyOM8EvJFoBtAcQeQEjtx1wLBveiwbNo8N4zeO8ZvV/z8Dw6oNzWmdyW6SEJuv/IB3MLi7DZCZscPuOVhUD9QqB+aWlxaWlRN/pfs4On/fbKxbmuhUDbvLcJHf8zU/sNDnALWEn+w8IAlDfQ1jeacDUlRO/3HDiSW1wFrjfE5ldhjp27fgkxXq+8up35dueuX6owhwpzvPvevmkVBuP+2POJ1Nk9B448ItWMPZ+YW1wFjlv7Rj/44yfheXKLq2LPJzLfPjp7Hqn2w/SKx8u8tWmtfo01oLYGVJag0hJQmANyU0BmCshMAbkpIDcH5ObgiNzw3Is/qu8eU1qCKmtQgwe1eFBnC+ptQdgWQEhZgq0e2OLWm116s0tvdtNY3HqLG7aAty6dyakzOXVGh5YTcJbGFVoh2QTIQJyyeGCrB0gjkH+aEHlzzhmdc0CoQsTJ5A4VEjP34pUjGyPzgsm9YCI13shlANDXJQhCbT6UEFfPEgSR3o93Ron85GdbZpRIW6/w+z/4YVuvUIXiO3e9kSMoBxkI1wf3oQAbcbAEQZS3RJ9ighMtsjMQ/gRmpyTfC2aTMaEuvcUNW0DrPoYHEAY1wqRDQHlaZndEz4lb770MODwAxoDTk0i9XTC65g3OOcweRGnt9zFgXxcWr97i1Vk8APBWb2XmBNrvR4D2O4Io0H73gsGzaPDcM3oBXxt9PDyPCiijfiyjfmxgRn/g6H/OzS/ojTad0UZp/0KgfmlpST38H1PdJ7DpM/Pepjl3TcBRDo99znjwz00kpUeZ6w8GIUofnrLnwJHY84kzKuwnP9syo8JmVNi77+1TYfbc4qqdu36pwuwI7odxvxKzM7UfqHIkSX5wmM3BOGFzeLYP/vhJa98odbCi9seeT9xz4IgSszPdnc1PP0M1RAGG5dFovy8cWu8ttPbrrH6txa+2+FUWP6n6fqnRLzH4JUa/1OiXGv0yU0AoMzz3wo9qu8fk5oDSElRZghprUIsHtVa/DjgTFg8QY63RrsFsLAw2jcGuMdi1BrvGYNNgNjWGq1GrigJhHKNWFYqrUFwNwHA1qx6iKpCixkAem8ZgB06D3uyGrV4g/2S0PIDZA3EXkiD2K+5CElOipDrT0898D4KgJ598qmtowkQtW10LJtf8vkNHqYKv/+L/6Mwek2tBqjODIk8/8z2pzgxykkv8OXKRHcDsrAuH0lcE9y1BEKGsJqfO5FiCIK3RARyaKZnuJz97eUqub+ke+v4PftjaPaSALTte/0V2YRnp69AeFRk1cest7iUIov0kOgONnqnldB4i3EJJvt7s1pucOpOTcMjIEdaZKE/Lyw5CkL2z+amQAxVLIJ0tdhggYvhkNUt/ZmSFjjdQs0Y8eiBi/gFy3R/hurB4dRaP1uzRmt1aE4nZTXgAVh/LA7D54QjaT8r/+ssDz2MMlFo1eLtyoG9Sc/D9D4PzCzoM12JWn4Gp/YuK/qOTnV8iEzEBR7kPL/SYs/Qjn7G2/jEln0PsadVHIkNquQPB/YBwHW3tG33iyacgrldOURUQQuZCP/ZcIkhv7X0k2h97jo4rPPHkU6W1LZuffiYkFKHE7K29o2/96m0lZp9WYu++t0+J2XOKltN+Kj/QftAFGPfnFFVRPWU6H2/96u3W3tGHpP0+GPfBkUKX1Irf4iXXN8SOJ43Frzb7lWa/3OSXGYHw+8SYbxbzSQx+icEvNfqHpdhzL/yotmtUbgoozAGlOaCy+DUWv8bi05g9WpNLa3RqDHY1iqsQi0JvophR6LfveD09R6CEzUrYooTNIF2uM3KjJ2BWooDNCtisJLCE1KPQm5SwRYVaJWpsx+u/yC4sB/IfBljv+tr6Rl548UdiNUZ98jVG585f/DLuQpLBEcwvrX766WckGiOIfgP2HjwSdyGJGT/XmFy/270fZNt78Ojeg0fooLo9QKyebVTAnPk4wwtSgE7rTA7gLalRfAmCVIQrY5uQaH7y05cnpVoQ2NCZXHK9ecfrv8gqKNUanWGhEafO5NSaHFqjYwmCCE8rQlhFQ3pgGszGzEmHWEwuSvJpN4v0sTRGh9YIwi2EBwAzn+BYPXTUgfZ1wP5iEA8IeeYSGncxuSM6BPQjf5DTtcB0swyMrQ9UvMHgnMMcQaD91DUSelFYvDqzR2tya4wujdHJhPYAQKiMIf8g5o86grz283zDQDdLe26W9vSIlAeP/WdwfkGLWTSoxYMlAeGf81V/fc8r7T4gav9MP/aVx5zlxlKd8HWt8GPSN/eHLfGJa1Wmtzz1ne8sr/eIzb/Mo/o9B47khGr/CKeEUxoP4/7W3pHnX/zRtBJjprf2chcMR6ozP/Wd79yX/FNNA2+DaT94G3suESg9EO+QF7MI3fGiKqDrTO0P6R3F8p7EKru2BEHseD4t8GTc0huSrgPab/HpLD6Nxacy+xQmv9zolxp9Esw3i/nEqE+M+mYxnwTzSQz+YQn23As/qu0clZsCCpNfafarzH612ac2edRGl9rgUGM2oPpyrUGqQSkmperXduxMy8qXaTGZ1iDTYFINKlWjUjUioVCBA5RZkAEm02AyrQEg1xrkOoNMi5FVIVINJtcZ5XqTWIls37krq6BUb/EgTMknNRjsM4g9l7Bn/zOYuGAAACAASURBVGFiPwHuRXBvW6/whRdfmlGiqM2nxuw7d/0yr7iK6TTsOXD49LkE9vYFWtvyiqt27vqlGrMzA/iwxaNnPOPQmpxiFfrUU98Bq20grksQBGRVhViUsHkJghSwGfgx47OqH//0ZxMSDRUJkOlMO17/RVZBSZiQ2zWMgMoSBIXGThioUKsKsSgRC+FFIRYQdGGFT5iSj9GlQLVsD4B6EOPSmV2E62Ahnr+QI0z7ASvtElgwhj+C4VR9N7GmNziIeD7DyaD9DLBvkaH9zAAYfTmQwu9UGxwqzE5iU2EOjdGpNbmYAQBi9U8u/Xnt5/nmga4J2q8LOrrG5If/8Mfg3IIGtWgQsxtJAMIfcJUuzpvEHXvGW/6oE37uhK/bNYm44iw89ifdbB7XqsjP1H4Igr773U200uMsmCtXENneueuXadkCzmX9zl2/VKL21t6RJ558MsK6v5ISYyI8rkRjzyWC9NbekQ8+Wq32A7NXk1mJ2t99b19pTctbv3q7trX3rV+9rUTtOUWVsecSW3tHwNtpJbr56Wf2HDisRMECfQTG/TlFlXsOHI5UJ5VNiQLtr2SeBSmtvSPf/8EPQTaqrTV1jbiXLUEQe1nvaekepkY7W1Cht3gVCL5j1xvXbmdQ4Y1sQYXO4tNafI3d9NSk5VdKMJ8Y9fbPIJs2EzmPxyUOS9DnXvjRF1FnQMrv9x1WmXwqk29cqt+0+WmQGBVzRqbFJGpkVqkHDIxObdq0GZx9dfvOiVnl0Ng0lbJp0+aB0UmxQjcwOvlPzz2feCX5iSeegCAoNSMnNSOHaPpk7KwKlqjgofGZTZuJgieiT0vUSHVDK8gPQdCdzDzhhISyZMfrb6gwO/3M2+ZDcB9s9cIWz5Rc//yLL7V0DwHFAmQXlu3ed4gMgHv27D8Uey6e2n6ot7h37z8Eat789DNTcj0z5A7yx5yNp1NIsWfJM2abUcAQBP3v726ixHUJgtSolfCZdMYlCKLCGGNi5Y9/+jORRN3UOfD8Cy9NSrVA+6/evLP5aaKbmfnFGsymZim0dQmC2AESIkyihM0KZtBFawCBFoXepNCblTBwAnA1q0KiTiViIRwFSv4Zz1m0JqfWSD4aMFJbNIjB0RNbOJlOAK3QjM2GDIeA5QeEb7ZgCn+A3kBKTze95ZP4tgIj4M+MfoHn+rTwozYlalOiuALBFQiuRG0qzM4t/8ywP9jrx2s/zzcFdDm/9UphW+eo7Nh/fgy0X42YnbrzQPi9eL7fNTjd+rvRxvc1g/+FK85apCdNM/9jmPxUNfCfnJJPKb1MZwY3l+9+d1OI2HPCEDBCjfYcOJxTVMl8qEZKeOjDNlLjfQrU/h9//PTf/v2d0pqWDz76hEqPVDAcCWn2//7uphUzg2qB5QrScqD9TNt+t3s/yEbZkFNUuWf/Yc46p5XoT362ZVqJgu7sILSfOEulMLSfVWTNXSO1n7idyWHrp198JYetWrM7W1C++elnJuWwHMF37HoDHOssnmxBxeann5lUIDLE9skXx2f1NoXRdze/ctPmZ4bEyMAMsmnzM1/FJogR7yzqk2C+4Vl00+ZnfrfviNzor+sc+d73f9jQJRyXIc+98FJ9e78Ssc4o9K/teP1OZu6sUj8j18zItYCxadmrr+24fTdbrNABV+CrqFMzcu2MTHMrLXPTps39wol+4cSmTZtffW3H+Iz8dno2BEG//f1usUJXWdf8T889PzA6RRQ8GQP8AIkKFokVH/33p+Mz8hm5NjU9Z9PmzcMTkim5bvvOXZn5JTqzG3xumdvjwWPs7MKyHa//QqYzMRfNp+IuvLf3gIZUr937DsacuRiialTOHa//Qqo1ao2Ops4B4DNlFZSGB9XVIE7OUNApmY6cxO+qqSA/Ap5fGOVawxIEybQGud6kgM1jM4of//RnotlQ7d/89NMiiVqD2TLzizdvfnp8VkWoPljQw5YlCGI9LiGRk89ZZFqDTItJNZiUjKaAqIkCNisRi4owmLCZFn46SIDTq38Ds9cOKh4AtgXoWNszCQ8AZn/vg/hGg53pDbCjAvQ3BhcI1QfC75zHHEFiZi0hj1Qo+ScW/Shr0Q9W/B6dxaMjHvC71AaHCrMpEFwBWxWwVQ5b5LBFgViVqE1tAKt/t87s0Vk8zKU/qf1zvPbzfJNASbnNl/JbO0ZlH/zxM0L7UYtdcwYIv9OYjutvTDa9I6w9qOr9AKg+Ov4hjuPKvg+YEUvU5kfZy3pK+yEIeuLJJ1ejo2/96m0laqO1f//hnKJK2OqjWGHdb/XFnku4k1347nt7p5UobPUBxQUFP/joE2ZVkZBo2WYvmzn2XAKnDXv2H6byxF+5WdvSE9I6of1cdZKehA22+hSobceuN5iDoEBtRFSAUYQzcZVdox5YLkEQJfzgjqYzu0+djaeWqpNyWA7jO3a9kS2oAHmot1qLT2P2RZ8hRgNof2puxas73hhX4mLEM4t4Jah3eBZ57oWXajtG5Eb/jM72L//2dkOnMKOgImQqj0fHDoxMgpX93z3xREVN4+iUdNtrO27dzZqRa2/fzXr1tR1jU9JpmWZaqh6dkmx7bfuttMy+YdE/Pfd8RW3TjFzbPzL5T889X1nXzDy+nZ796vYdIrFiVqmfVcISFTyr1IsV+q+iYkizgfbrKe2fUWEgwvHEk0+1940C7Qfb5bIKSsGymxRmPCOv6Pd79lOr3vf2HoiOO8+Ie5M5Eeu4WPn8Cy82tPeCTYhU/u07d0k0GFgxs5bLCL34npRq6Ul84kkVagXar4DN8lDtt4zNsNf9MkL7s/JLgGESjWH7zl0ZecXs1bk5XPvljN0VDOEnn6eQ8k9sm0CsbCyr1X6jg3xLaz8FFQaALaxnAQSh31oknQAH8QsEjGDAPBB+KtoPW72MbY/EhgPwUwQgqMAK+JOhfmLFb3ZTi34laqNUX663yPVmBWxRonjo0t/q1UfWfiOv/TyPHigxpykpr6V9RPbhJ38mYv6oBVfGUMJvUiaK6n81XPWeousQOv4hMnJMP3QQx3FF7x/IS47ja9Mw7pOS2v+3f/t3WpNrldqvoLTfGqr9equvpXfkg48+Cd99FnMuIaeoUm/1xV+5Oa1Ef/ve3iklqkBt4IAqOKVEf/KzLSAlEhKtiTJbY3Itu+WNoIW0XE+q9RNPPtnSO8LM8MFHn+QUVXJ6LTt2vQHKAphGUtpPnc0pqgzJH1JkzV1bgiAQ6gfC39w9/MSTT546E681uZu7h55/8aVJOSyHrTtefyNbUB6i/c3dwieefDL6TILS6KvrED73wktDM3BqTvmrO94YV1jFsGcW9kgQz7CY1H6Db0ZLa//2138hVhsUsFWhN8k0mESFiBW6GZlmmmRsSvoqrf3Zr762Y2ya1v7/981/Ka9pZGo/iP9X1jWLFboBoP31LbT2E+t+IuD/1ckYsUJX1dD63PMvDE9IphX67Tt3ZbKe91P7WH2w1dvSPfT8Cy9NSDT0U3bEokQs6bmC7Tt3iVWICrXOqlGgqSGrdiVsUcDm0Wn5cy+8WN/Ww/huAk44BG291NcWmJKvIJmUashJ/Fu5zkRpP9i3SMf8YbMSsY6LVT/+6csiiaa5a/D5F1+alOnIvX4lIAIBtD8zr5hhJLXuN69i0Y9KNZgUbMLQGuU6RuSfjZIcJSVCfgsDs6lDYv5UgARsPGSs+HVmt471vQNa/uHQm0+kSECQcgIMpPBTAX+G9pOr/8jaz7XoX5X2a0wurSk07M9rP8+6ACXkNCXmtrSPyP74p78E5xY0qFWDWsyyKEr4UXHcWO1bg+XvyNv36IcO6gb2aPt+h+O4vOdYuN4zkepMhPCb3XR62GKUIZDCt371NqHcCkRPaj+VYff+w5zaGSKihOQrkJYeISXJLT3CDz76eEqB/Pa9vSHCySmQf/u3f6c1uVcj/KByEI3Yvf9wzLmE3fsPhyg0aJ1ZJKeocvf+w5y1TSmQ5198qaVHGK79OUWVTzz5JDjV0iP8/g9+SB0//+JLYNDW1DWv3uoN0f7swvIdr78h01u0Jveps/Hkut+64/U3du8/BLQ/hkhHsgWVO15/Q6KzKQ3eqLiETZufGZqGB6f0mzY/czu7XKx3D07DidfTh2fg5154qbZdKMd8MxpC+8el8ObNz2TklSgRXAGb//jJn4ZF4lkVLFZoxQrtjFw3I9eNT8tffW3H7fRssUI/SMT8Y2bk2hm55lYaEQboE06Qeq8fGJ36p+eer6pvESv1A2PguHVwbHrTps13MnIlanRYJE68euNOZt6r23dOzKpmVfDx6NObNj8tnJTNKOHtO3dlFZTpLV5aP4AA2PyI1bt7/6GYMxfAvnoVite3dX/v+z+ob+0WK+HtO3el5wpUqDUjr2j7zl0SNdbQ3vu97/+gob13TKz870+/ANr/+z37gZdQ39Zz7D8+AloYffrc9p27ZtUo81uLDMkkmJJpgfArYIua3JenRnHKsSD2+iFWFYqLJOof//TlCakWeG9Tcj3Q/t37DoJF9qm4C5s3Py2aVbMezxPP+5lP+i0K4km/mXYCtEY62g8C/kDq6Ji/lQucCo1oDOT6nlB3N9jrpyMj/AzcjO0RHn1E4Wdqf4gTwAgDkGDkup8d8/eG/PYAS/vp/X3gSnEztV+Fcsf8l3nkz9D+eYNn0cjQfpOPh+dRQWv/p/9zMjC3oMGsGsxqFP+FEn6d6PhI9b/0l/xfWevvtH2/0/S8o+l553CLWtZ9BMg5p/DDVp9EY/ybv/l/tGZ3pBA0vW/c6tVbvZSC5ggqQMqe/YepYwoFYtux6w0qXYHYSF/BG5Kym1EcqC+pwd5lmAVmm1zLZwNQ7siOXW8oENvu/Yc3P/0MMIZ5HN5ujqBi9/7Dy1QLLAedZTk3iI3qEan9K9S2qq5ZCO2nAv5A5kG77763l7nuP3D4feaDAJ3FK4dtVObf/H7fcy+8NDQNz+rdlc1DTzzxJPEUYEo/NA0/98JLNW1COeqd0eBA+9VGb2PnEPUoJz2nUK4zSjWYRIUwOR4dC0HQa9t3TkrUQ+Mz7L1+U7TeN7RKVMjQuPi551+obmyTqFFwXNPYLtWgNY3tpD1Pj0xKp+W613a8Dup5593fP/f8C6PTCiWKR8ddgCBo56431AYnY9UYRG1+8CM5zV0DWqMDrPsb2nq+9/0fNLT1qFBrQ1svqB8IqgazNXb0fe/7P2hs71NjeEZeEWiL1HhcheLRp88Tgwmeu5OPABiRfxZTMt3f/M3fKBErtc8AfB+PeqbA+I6fY0KqJb7f3zP8/IsvTStgBTGDx8gZfHpCqtHQuxZsatY+f1qtQ6IRCsamP+KYEc8P6QXz0QYZ57drqC/6U1v6SaWnBBhoLfj6n56tzXBonH8lGPIPABsDqWf5HL8gSQj/HJf2e3RM7Te7NSaXxuhQYXaw0U+JgL1+VrDoJ5/3M7XfS2i/zY+GaL/3ntF7b921gefxBkrIbUnMa20fkX/yPyeDcwsaDNdgODr1OSX8auGfRqre7C/+F2nzO0D4NT3v/N/CGWnXYfr6ZC3ovSGsRkRpAWN8qWz3/sNgezkzhVj4kikKBCe0n51SUt381q/eViA4SJxSIODBbcy5hNCvrj0wIMDwl5Ond+x6g2oRWAtSCO1nFMkO62x4hcyqlkGB4G/96m3mmKyNJQhi3NGI5/1aEp3ZTTkE2YJyIgOR36uzeDUmr9roVRq8CswrRz1S2CPRu8U616zOPat3S/Ruid4thd1S2CNDPHLUq8C8SoNXZfSpTT6N0aMxujQGpwazq1BcSW5Zpx8wh32DX6Y10M+b1ahEjZLf7iPiz+FF5DoTa23KCKrTO9Qwm9pg15pceosHwcnf9qF0wh4AC0SdyQV24BOiG65q4Ik1vXHdQemrGrNpMOo7dQ6N0aFhbPEL/Rp9GNSzcIolCNKR0XLCFQCyanbRS2TKR7d6qe8NEots0Bf2hsQlCCJ6RHWK9WtIjB0JDL+ENQgcOEB/SftdOsbP+0RaviOkKsM41Qs/ErKgZ0H+sFjIL4mxtZ/+NwTEPx0I+XcDrD2DEbXf7AHhCrDXj/EFP5sKs4EN/yzhp3/qx8Ot/W5C+0289vM8YqCk/Lakgvb2UfkXJ04H5xa0BpvWYNOLPqGEX9H/0UjVm32C/4+p/eqe38r6v+AQ+FXJjGd5dDwWT8zZhN37D68m5+79h2POJjx4i0sQFCL8YdrvJrS/sJyM0NLarzV51Savygi03ytDPBKYVn2J3i3Vu6WwW8bSfp/a6NOYfBqTV2vyaE1uHfXzPpiNK25Mygxz9Uk9iibXoGBDGRvqV/8YW8wYX5xjft0cCD+M+1BbgLlABNqP2nyw1cP8wj1TjBnxajcRqSa+sMfSWgIzmZn1ZT825jAsrGA4bCF+xJcKjC9BEPMn8xCmpNHfVqAX0yF2AiOXIIjpYbDMpn2FEE+FMz/1C0JUr+l4PuGUkCoeAlvFuQP4GP0In/rp5bmQ/12E2SMVAb/bw/AAaOYY/9xonqn9DOF3s64RE1j6O9UGBwFmp4Sfpf3EVn+w3Y8I+5Pav2D0LBo990zeeyY+5s/zKIEuFXZdKuzuHFd9eep8YG5BC34zdTJJ3ndU0n1Y0nVE0nVspOrNHsG/i5v3SLuPSLsOSzoPyfo/V0mqHo5sm3k2BEsQxBR76o7GRKa3bH/9jazCcvr3Ss0endmrs3g1ZqD9PqXBp8C8csQLlv5SYrnPEH7EK0e9SsyrMvjUJr/G7Nea/TqLj3INdWY3ezEaCnMNrSbWWDi1fUxNLTFDAOtmcsUZ/oxZR2kS7kNsAcweDNEV8tmwlymZOkqPKVeY658GwTjtJcOMnMwHZ5yE74ol1r4kSxCE4H6E3IIOfqMJwf0IIahBhuyB+HaA/LENqn52oM7iWYIg5sN1Pf279ESGUKchNHMk2ENEafly/22Z1m+US79Z/zvYRf8XQVYN4ct9xj9iNrgWWHsAwyB+0Bf3M4U//OogtZ8h/wYHqf0uDan9ofIPtN8RBNpv8CwaPYvE0t/7NQ/PIwK6Wtx7tbivU6Q+EZcQmFugg42IVi6unuo9OVr7687y90f6CtV6ZdhN000qBysxVD84MfFsLNb9H9HyrBnUHkTthK4vQRBqAzIJlI+1s530AIIR/rUm8RtcSxDE8Db8IMyOgH8/Q+XEOeHwWuizZA0o5ZeECHkE6WUwHybeiySRtdzBfhtalvvfB1P1YI451BaAcb/e6gXLFSLIb3JpSTQml8bo0hhdaqNTTXgAJKT2E/JvAvdApvwT2/0M5L/yM1Kb/uitf+SzAB6ehwF0vWzoevlQ96Q2+vxVf3BBYwReqiPkJ6lJqE+wS2tya0jZAIn3gZHn24GaG3A7c2pMLo3JrTV7tBav1uzTmH0ak19t8quMfqXBp8C4URp8SoNfZfRrzAGtJaizBvV4EMaDiG0Otc+h9iBiDyL2Ff6hM/2LhOzvMlByFQmiBnsA6CXdlp38h6r2IGqfwxxzmHPe4Fwgmcec1D9yDSC4n2UPIb0sicKc85hjPvJylp0Z5GfiWL54xDxLEERnoO0nwNhSijrAmFOAjgSXIIgckyBKw5EzEggDNLwSygbnPHucuQxmY3CCJf6igVZ9FgbXosEVscLly7IqIQ1AHXOILQDjPp3FC/5Vj8ZEanzYdcFUfRWp/VRO4soiLxydxauz+vS4H7YHEDAargXMvUj8M1+CexRGHp6HBHSzavRG5WjPtP504k1/cCGC5DO0f7XywKEW4ah4vi0YQgG3M1r7LT6txa+1BDSWgMYcUJsCKlNAZfSHEVCZAmpTQGMOai1BnXVOj8/BtnnEPo86QpiLCKk9hLrYGHCIDYfwRGiLTsGcCxjQCecCRgFysiSNLgi0dt15aLGE8DEhfBRiKCjCBpNjPFk1OFgDRepxGE724NOZF2nc94xsWGeBE8Bi8T6gJt0+B9sCeqtPZwHC71YbXazLgesC4YDtLlDXjs7q09sCsD2IOOZQ5zzqWkBdC8AJCMewUdng5vGEAN2unbhVM9E7g165WzQqgX3BBR6e+2Nu0U9zj8K3LHTO+a8DTBbCmF+ee2xWzM/VyjKtc2Tjamv5gutEMIxVFVxxuO6r7KqLr97I8H4tw9pKBVk9uuefvwc+4Y/w8gn5GK/3h4fn8Qa60ziT2jDTMq4vbR3NquxIK2pIK2pIK6pPEzQQx4L6NEH9HZoGcJAaQiHNbZ6/AlIL6+8UNaQVN90taU4va80ob88o78is6Mqs7M6sIMjggjhb2ZNV1ZNd3ZtT05tb05db25dX25df1786+gB5TGrZbyOQX0e2Ur9MzWSGeiob2Vxtb15tb25tLzhg1Vm/QSkgYfdo5eFljUbImESspy8C/cvV8wCdWp4HKljXB+Y6p7o7q7Ijs7wtvbQ5raQpragxVdBwu7D+dmHd2i8fQcOdosa04qa0kua7ZS0Z5W2Zle1ZVZ1Z1V3ZNd3ZNd05Nd05NT05tTS5PDwPDyijVZbeIivp07RNYINS04DU1C819UvN/RITzaypLwK9ADGFcXl6eB4LesXG3llTn9TcL8MH5bYhpWNY5RKqPSNa36jODxjRBTgZJQiO6YNjcHAcmRMhcyJ0bgKdn8RWz9wkNjeBhoHNTWJzzDwUE1jI2ftpK7ShILvF+63wW8Hj2q/VMoHOTSBBERIY0/tGtO5hlXNQYRuQ4f1SS9+s+QHuZqYesYm8fKz9cnxQYRtSOYbVLqHWPaLzjOi8IzrvqN4XwpjeNwbz8DwcoJxuTXaXJrtLk9WpyezUZHaqMzoI0tsJ7rar7rar7rap0kjuAFpZpLYqQ2lhcZvn20szATWbd1pVd9u1GV36rB40p9+YN2gpGLYVjjiKxtxFY+6iMc8KjHuLx70lIm/JhK90wlc26Sub9JdPbWSAkWymfOttFc8joWzKVzbpLZ3wlIjcRaOOgmFr7oApqwfN6NKnd2jT2tRruLMxi9xpVaW1a+52aNO79Jk9SFYfljNgzB2y5A1b84TWfCGeP2IDFABGbYWjtsJRe+GoXbAshVwsX2RtcDb0qBvleVhABf1ofh+S34fk9SF5vUhuL5Lbi+T0AODsHji7G87uhrMYZHbDmV00GV16bjpp0nkeFzI6ifnN7IKzetCcPkPugCl/yFIotAlGHEVjrhKRp0TkKRF5V2DCV0rCkFJ/2Xrf9CPIQGSmfBvQZp4HpGzSVzYBtN9TPOYUjNgLhqx5A6acPkN2L5bZjVC3uPu+fIgrCM7sRrJ60OxeLKffmDtgyhuy5A9b84V4vhAvEJKSP2IvGLEXjvCCyvOQgYqHzUVDZgGBqXDQVDhoKgAMmAoGTPkM8voBRkBuJPpocngeP8iJzhs05w9ZCobxwhFb0aijeMxVMu4unfCUTnhXAVv1eXg2FuBT6ikVeYrHXUWjDsGIvWAYzx+y5A2acwdMuf1rv3yIK2jAlDdgBhdR/rC1QIgXjtgKgdITYu8QhFHEZIzN6EqMPSQYda5g4UNslOehApWN4qWjeOkoXjJCUDyCFwvxYiFexEAwjAuGrUwKQxjioIDn8WMYgBcM44VCm2DEXjTqKBp1Fo+5SsZdJSKW9pfx8Hw7IYR/wlMq8pSMu4vHXEWjTsGoXTBiLxTaCodx8kKwFgyv4fKhriC8UGgrHLEJRsBqjKGdY85IFK/E/eZfMw9iJM/6AlVMOMpFBGUiR9k4QSmDkjF7CMVMRjko4nlsYTn14GNUMu4qGXeXitylIg9xx5zwlE54ynh4vp3QH2ORp1TkLhl3l4y7qPtm2JJ6jZcPJfP0TXnctQwlPDwPCUhpCRKYCRTLImdi4vmrh/F5UJjneHgeS+SP+tZn5uH5RoH2fvgVxb6V2LsmVqx2o/H49ejR8hHPt4Y/HPts3W341rPuVxwPzwMDff31Eg8Pz18J9zo6190GHh6edQdavPc1Dw/PXwMLuG2xvWPdzeDh4Vl3oLn5ezw8PH8NzGdmB834upvBw8Oz7kD+4CIPD89fAwtH3193G3h4eDYCkMM9x8PD89jj6hMGPvnTupvBw8OzEYCsjiAPD89jj//QUUdty7qbwcPDsxGATLjfhPtNePVh6LWzI37yLYHgCEicOfsKxH79QYCHZn60FP/hn8/PhKVXH4aWeX0zRq7OhpGkf+bOwDHsj9LU+xsT8gPA8y1Hhd176jvrbwYPD8/GADrEJUeHinyYxYdZqg79c9KAxYdZpuP++bU4IUgEb/+QTxz7Bs69Bh2pwizTcSxx+0O+xZd/BPr5uWmy1H1S9IflJBXiqDn/CNNIFsDI/CMQdKQqNP2fk+IexM6whrirEib9nN00p820nSGvI1UPdzAPFVXRU0/PcuhngHNImTNOflTIPj74vPM8AhwXLgV2/XLdzeDh4dkgQLuho6lKm5hB6j5od4YtdR9DKLYc3b0lRDvIUu0XXt5yoVFpEyvHjm+BdmewqhIrx45veeV4e0jifZO675Xj0Udfjr6we19JWP3LuAdhRmYchVj9pWx+OHaKlbbG6Fdejh7jONV+4WVuIxnt0oMJKNkdau0DGsmskDhmGDx2fAtxtjH6FTCVqfvCWlxmxtsvvEzU/9DGk+ehMPfDZ02fR627GTw8PBsEaDeXHO3OsIuV9tR9rxxvt4uVy5G6j8gsVo4f30IdM8g4Cu0rXb6S5esn7Mk4+nL0uDjjKARBXBVGaD3UyNLdECNb+8WXoaOpD8NOisboV16OHuc41X7xZa76mYPMsJOyljTvQY0sZU/00VRQefvFlyHKgHGmI7U7I6QIkW25GX8E48nz4GgKapcgSFnTve6W8PDwbBCg3dDROyr7bDgdF1/eV9p06pWXT43PZh7lcBC2XmxSjZ/Y+sqJDlBk/MRWaHcmVz1bLzZxNrEsd/ZxtMl67StdOU+okfY7+yBoXyk4bjr1CnW8ZjtDkd02GAAAIABJREFUIEaMczy5TWQOIG3nrMo+qyoNnZ0HNXL8xFaqQqpyauLos02nXgFTeWcfYRJ5sOyMd1x8mTL4IY0nz4Nj331o8Ykn190MHh6ejQO0B3ply9ZQOdoSI2qOYezu23oxaj+0J9MhUQNK90DH0lgHDolaFMWsZ39pWOY1ULpn68Xm0ERR1NaQCkVRMaUhZZtjXiENZhvQeXEL8VYUtZWzUw9Ec8wrW2JEHKc6L27ZH2qkRO1I2/9KVGckA1aTslqrwqb44h7o2J79xNs9maEzSKYA86iDyDNOvKizD2c8eR4QqUi7BEGut95ed0t4eHg2DtCWrcf2bD12V1O2Z3+ZNOvYlhhRS8y2LTEiqcYp1Tip47v7Q2/xdzVOaVf8lq3xLRqnVOOUakRRW6E9WeCYiShq67aorvD01VC2h3utfOwuI1tLzDbOTIQxLCMZdnbFb2HV8yB2soyhRo9FV3yEnQlko6F2gu6zevrAg0mWzTq2JSaeq3IipSVm254sZgp5sPyMs4b04YwnzwNijE1YgiBjbMK6W8LDw7NxgKD98SfD1/2xIrnWKdc604Hkb40/uR/am+0EiXJt2V7oWDrrwCnXik5uZeYJz7wGyvZujW8NTRSd3MqosDt+79Zt0P6ykLKtsdtIY0INaI3dBu0vA38fkp2syqnRY9EdvyXMSLnWmb5/28nuSAasJmV1dEfyPCAIomaNHlhy9Kjxp04tO+Pd8Vvosw9nPHkekLkfPrsEQereqXW3hIeHZ+MAbYktj956LENXvvdAuSL72JbYibbYbVtiy6O3QhAEbdm6bUvshELnyjgQuvLO0LkUuvK90LboHpdC51LoJqK3QnuzwTGDnvgtROY1UL43wro/g6p8a3xb9rEIkkZVQhlJmbRty9bwxDXbSdMWS4wYg4lojtg4+7U1vi3cTl353hCTHnQwybLZxygjMw5QAzURvfVYdCwVRNkWHUtlm4jeuooZZ5r3kMaT50GAi+uXIGj+B8+uuyU8PDwbCii6ZyL65+9n6Mv3HShX5ry/5fRE++ltW05PKPVupd5NHWccgPbluMEB8fp5QjsjXamfiP45U822Rfe4lXq3Mud96EA5qO2hk3Hg/YwITbSf3kYaxjSSYerPE9qZRR6SnczRCz9FjRs9XIxGw+ws3we9n/HQjGTUlvP+ltMT5FQSMwXeMqceoluny4bMOMvgnoQtjCYe3bzzrBLn3sNLEOTce3jdLeHh4dlQQCp46tTP38+EPSrYo4Irwcb5fbngracjbtvWuKnMg7Sk78sF2cgivYlbf57YQRQPZ+rUz7ed6o10djmYjXK/DlYSmXPf5zxP9WIlIx+5nR1x2yAI2ho3xVFD7vv0qUc2mOGNchsT3hY5tnT+lQfzoZrKs1bU0/ASBC1BkOnqnXU3hoeHZ0MBaRDP/VO5H3o/i3zbFbcNOljJqXpZB6GtcVNrauIhs4yR3xY7vxVGbjRT/5qxnkkC2q+dgdfdGB4eng0FpEW9PDw8jx/zf/8PSxAU/PHP1t0SHh6ejQakw3w8PDyPGcayJrDod3742bobw8PDs9GA9AYfDw/PY4Zn3xGg/eas4nU3hoeHZ6MB6Q1+Hh6exwlYggHhX4L4C5yHh4cDqLF9jIeH53FCfvQjIPzWLa+suzE8PDwbEGh+8R4PD8/jxNf/+I9A+xfizqy7MTw8PBsQ6N7XSzw8PI8Ni5VVVMB/saNz3e3h4eHZgEBzi0s8PDyPDYvv/g4I/9dPPbXuxvDw8GxMIN/8Eg8Pz2OCXEMt+hfe/d3628PDw7MhgbxzSzw8PI8HwdgzlPYHryavuz08PDwbE8gT/JqHh+fx4N4//COl/d7h8XW3h4eHZ2MCuYJf8/DwPAZ4Sysp4b/37D+suz08PDwbFsgZ+HoNiJTGyp6Z7IbhFansmREpjWtrhYeHZ/XM/fZ3dMD/6B/W3R4eHp4NC2T331sD5Z0TswqNz+cLhL28Xi917PP5ZhWa8s6JtbXCw8OzShwSFSX8SxDkuZu97ibx8PBsWCCb794auF3eZbPZFhcX7zFei4uLXq/XKe+fn5+nUmw22+3yrrW1wrMhkNX82+GaiXU3g2dZfKfimNpvn1Wtu0k8PDwbFgj3Lq6B60WtOI4vMF7z8/Mej8fWdhm/+prP56PScRy/XtQaVgN89VDUVVnkJlpT/n77wWX4pHUtZn8jwFcPpVQu098IXXt2e3ipR0NryrOHqkWh6cJPth/8pHWxMpa051B1ZWZUiJFvZcJc/Y08Ha0prCKtKc/GCiMZJsqM2sDTutFZZOzyW/jZlnW3h4eHZyMDWTyLayAxt8FsNs8xXk6n09KcaL3wosPhsE61+nw+kG42mxNzG8JqgK8*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" alt="" />

2.2、配置Tomcat数据源

  1、在Web项目的WebRoot目录下的META-INF目录创建一个context.xml文件

  如下图所示:

  aaarticlea/png;base64,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" alt="" />

  2、在context.xml文件配置tomcat服务器的数据源

 <Context>
<Resource
name="jdbc/datasource"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="XDP"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jdbcstudy"
maxActive="8"
maxIdle="4"/>
</Context>

  3、将数据库的驱动jar文件需放置在tomcat的lib下

  aaarticlea/png;base64,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*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" alt="" />

  4、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中获取JNDI容器中的数据源

 public class JdbcUtils_JNDI {

     private static DataSource ds = null;
//在静态代码块中创建数据库连接池
static{
try{
//初始化JNDI
Context initCtx = new InitialContext();
//得到JNDI容器
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//从JNDI容器中检索name为jdbc/datasource的数据源
ds = (DataSource)envCtx.lookup("jdbc/datasource");
}catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
} public static Connection getConnection() throws SQLException{
//从数据源中获取数据库连接
return ds.getConnection();
} public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try{
//关闭存储查询结果的ResultSet对象
rs.close();
}catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if(st!=null){
try{
//关闭负责执行SQL命令的Statement对象
st.close();
}catch (Exception e) {
e.printStackTrace();
}
} if(conn!=null){
try{
//将Connection连接对象还给数据库连接池
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}

写一个Servlet测试JNDI数据源

 public class JNDITest extends HttpServlet {

     public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try{
//获取数据库连接
conn = JdbcUtils_JNDI.getConnection();
String sql = "insert into test1(name) values(?)";
st = conn.prepareStatement(sql);
st.setString(1, "gacl");
st.executeUpdate();
//获取数据库自动生成的主键
rs = st.getGeneratedKeys();
if(rs.next()){
System.out.println(rs.getInt(1));
}
}catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
JdbcUtils_JNDI.release(conn, st, rs);
}
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}