tomcat 配置 quercus记录:php使用连接池访问数据库


安装好

quercus报错: 

 D:\apache-tomcat-5.5.27\webapps\wfx\conn\mysql.php:9: Warning: A link to the server could not be established. url=jdbc:mysql://localhost:3306/fenyong?jdbcCompliantTruncation=false&characterSetResults=ISO8859_1&characterEncoding=ISO8859_1 driver=com.mysql.jdbc.Driver com.caucho.quercus.QuercusModuleException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 无法连接数据库. 错误信息为: com.caucho.quercus.QuercusModuleException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver


quercus记录:php使用连接池访问数据库


上周记录了如何用quercus建立混合型项目。
http://www.54chen.com/php-tech/quercus-notes-php-java-mixed-projects.html
这里来说说与数据库的访问,使用jndi得到连接池的好处。

JNDI
(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。

正题
在quercus中可以随意使用mysql_connect与mysql_pconnect两个方法来连接数据库。
当在web.xml定义得有database相关的消息时,mysql_connect与mysql_pconnect都会自动忽略里面的参数设置,直接使用web.xml的定义。

添加jndi设置:
vim WEB-INF/web.xml

  1. xml version="1.0" encoding="utf-8"?>  
  2. <web-app  xmlns="http://caucho.com/ns/resin">  
  3.   <description>truth applicationdescription>  
  4.   <database jndi-name="jdbc/mysql">  
  5.     <driver type="com.mysql.jdbc.Driver">  
  6.       <url>jdbc:mysql://192.168.1.5:3306/truth?useUnicode=true&characterEncoding=utf-8url>  
  7.       <user>你的用户名user>  
  8.       <password>你的密码password>  
  9.       <init-param useUnicode="true"/>   
  10.     driver>  
  11.   database>  

使用的是resin4,需要继续在web.xml的servlet段里增加:

  1. <init-param>  
  2.   <param-name>databaseparam-name>  
  3.   <param-value>jdbc/mysqlparam-value>  
  4. init-param>  

这里注意,param-value与上面的jndi-name对应,mysql_connnect函数在web.xml里有这个init-param的定义的时候,将使用对应的jndi的设置。由此可得到连接池的好处。

上面的例子只使用了jdbc的基础驱动,如果向下面的配置,自然就得到了pool:
例子1:

  1. <database>  
  2.   <jndi-name>jdbc/mysqljndi-name>  
  3.   <driver> <type>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSourcetype>  
  4.     <url>jdbc:mysql://localhost:3306/dbnameurl>  
  5.     <user>usernameuser>  
  6.     <password>passwordpassword>  
  7.     <init-param useUnicode="true"/>  
  8.   driver>  
  9. database>  

例子2:

  1. <database>  
  2.       <jndi-name>jdbc/mysqljndi-name>  
  3.       <driver type="org.gjt.mm.mysql.Driver">  
  4.         <url>jdbc:mysql://localhost:3306/testurl>  
  5.         <user>user>  
  6.         <password>password>  
  7.        driver>  
  8.        <prepared-statement-cache-size>8prepared-statement-cache-size>  
  9.        <max-connections>20max-connections>  
  10.        <max-idle-time>30smax-idle-time>  
  11.      database>  

这些简单的配置,都可以让php轻松跑在连接池上。
问题所在:
quercus写土了,没有在用户设置为unicode的时候来解析用户的输入,到处是hard code的latin1。(本来在GAE里使用这东西的人挺多的,可惜吧,AGE被盾了,然后quercus反馈latin1问题的人也不多,唉。)

  1. com.caucho.quercus.lib.db.JdbcConnectionResource: 94  348  
  2. com.caucho.quercus.lib.db.Mysqli:229  

上面三处修改为utf8即可。


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com] 
本文链接: http://www.54chen.com/php-tech/quercus-php-connect-pool.html

This entry was posted in  php and tagged  java,  php,  quercus. Bookmark the  permalink.

你可能感兴趣的:(tomcat 配置 quercus记录:php使用连接池访问数据库)