<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-paulwong-随笔分类-Websphere</title><link>http://www.blogjava.net/paulwong/category/13395.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 15 Nov 2011 20:09:58 GMT</lastBuildDate><pubDate>Tue, 15 Nov 2011 20:09:58 GMT</pubDate><ttl>60</ttl><item><title>如何将基于 Struts、Spring 和 Hibernate 的应用从 Tomcat 迁移到 WebSphere Application Server</title><link>http://www.blogjava.net/paulwong/archive/2011/11/15/363878.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 15 Nov 2011 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2011/11/15/363878.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/363878.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2011/11/15/363878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/363878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/363878.html</trackback:ping><description><![CDATA[<p sizcache="23" sizset="79"><a name="major1"><span class="atitle"><strong><font size="5">引言</font></strong></span></a></p>
现在很多的企业都在使用开源框架开发自己的企业级应用，如 Struts、Spring 和 Hibernate 等。起初由于受到资金和规模等的限制，大部分应用都部署在 Tomcat 或 Jboss 等开源应用服务器上。但随着业务不断发展，对应用部署的安全和性能要求也越来越高，企业希望将现有的开源应用从开源服务器迁移到商业应用服务器之上，比如：WebSphere Application Server ( 以下简称为 WAS)，通过 WAS 增强应用整体性能，并实现更加可靠的管理。本文将通过实例向大家介绍如何将开源应用从 Tomcat 迁移到 WAS，并帮助大家解决一些可能遇到的普遍问题。<br />
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizcache="23" sizset="80">&nbsp;</p>
<p sizcache="23" sizset="81"><a name="major2"><span class="atitle"><strong><font size="5">基于 Eclipse 开发的 Struts、Spring 和 Hibernate 开源应用和开发环境的特点</font></strong></span></a></p>
随着 Java 技术的逐渐成熟与完善，作为建立企业级应用的标准平台，J2EE 平台得到了长足的发展。借助于 J2EE 规范中包含的多项技术：Enterprise JavaBean (EJB)、Java Servlets (Servlet)、Java Server Pages (JSP)、Java Message Service (JMS) 等，大量的应用系统被开发出来。但是，在传统 J2EE 应用的开发过程中也出现了一些问题，比如在存储和读取过程中使用大量 SQL 和 JDBC 操作，会降低编程的效率以及系统的可维护性；过去传统的 J2EE 应用多采用基于 EJB 的重量级框架 ( 比如：EJB 2.1)，这样做的问题在于使用 EJB 容器进行开发和调试需要耗费大量时间并且耦合度非常高，不利于扩展。<br />
在摸索过程中，各种开源框架孕育而生。开源框架以其免费、开源和简单等特点逐渐成为开发人员的最爱，现在仍然有很多的企业使用开源框架开发自己的应用程序。在开源框架中使用最多的就是 Struts、Spring 和 Hibernate 整合框架 ( 以下简称 SSH 框架)。<br />
典型的 J2EE 三层结构，分为表现层、中间层（业务逻辑层）和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互，而是通过组件与中间层建立连接，再由中间层与数据库交互。下面就介绍以下 SSH 框架在 J2EE 三层结构中的作用：<br />
<ul>
    <li>Struts 是一个在 JSP Model2 基础上实现的 MVC 框架，主要分为模型 (Model) 、视图 (Viewer) 和控制器 (Controller) 三部分，其主要的设计理念是通过控制器将表现逻辑和业务逻辑解耦，以提高系统的可维护性、可扩展性和可重用性。</li>
    <li>Spring 是一个解决了许多 J2EE 开发中常见问题并能够替代 EJB 技术的强大的轻量级框架。这里所说的轻量级指的是 Spring 框架本身，而不是指 Spring 只能用于轻量级的应用开发。Spring 的轻盈体现在其框架本身的基础结构以及对其他应用工具的支持和装配能力。与传统 EJB ( 比如 EJB 2.1) 相比，Spring 可使程序研发人员把各个技术层次之间的风险降低。当然，随着 Java EE 5 及 Java EE 6 中新 EJB 规范的出现，如：EJB 3.0, EJB 3.1，EJB 的开发变得越来越简单。用户可以根据自己的需求和能力，选择合适的框架。想了解更多关于 Java EE 5 和 Java EE 6 中的内容，请参考参考资源 [4] 和 [5]。</li>
    <li>Hibernate 是一个数据持久层框架，是一种实现对象和关系之间映射 (O/R Mapping) 的工具，它对 JDBC 进行了轻量级的对象封装，使程序员可以使用对象编程思想来操作数据库。它不仅提供了从 Java 类到数据表的映射，也提供了数据查询和恢复机制。相对于使用 JDBC 和 SQL 来操作数据库，使用 Hibernate 能大大的提高开发效率。 </li>
</ul>
SSH 框架虽然非常强大，但也有一些缺点，比如 : 相比 Servlet+JDBC 开发方式，复杂度增加了不少 ; 而且开源框架开发和部署的灵活性，使得其使用方式不是很符合现有的 J2EE 规范，从而导致从 Tomcat 或其他开源服务器上迁移到 WAS 会出现很多问题和异常。并且，因为默认的 Eclipse 或 MyEclipse 工具缺少 WAS 的运行时插件，使得开发的开源应用程序无法直接从 IDE 里部署到 WAS。接下来，我们会分步介绍从 Tomcat 迁移到 WAS 可能出现的问题，虽然不能涵盖迁移过程中的所有问题，但希望能够抛砖引玉，尽量解决一些普遍存在的问题。<br />
以下使用的实例是利用 Struts2+Spring2+Hibernate3 开发的模拟医院管理应用。其中功能模块包括前台的显示模块、登录模块、后台的文章和药品管理模块、用户管理模块等基本模块；数据库包括药品、文章、学生、教师和看病等数据表。我们利用 Struts 实现 MVC 模型处理前台的各种请求；利用 Hibernate 将数据持久化并简化对数据的查询；利用 Spring 进行依赖注入控制整个业务逻辑层。图 1 为应用的部分包和配置文件结构<br />
<br />
<a name="fig1"><strong><font size="2" face="Arial">图 1. 应用部分包结构和相关配置文件</font></strong></a><br />
<font size="2" face="Arial"><img alt="图 1. 应用部分包结构和相关配置文件" src="http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1111_zhangt_opensource/images/image01.jpg" width="245" height="479" /></font> <br />
<p>配置好 MYSQL，将应用部署到 Tomcat 正常显示页面如下：</p>
<br />
<a name="fig2"><strong><font size="2" face="Arial">图 2. 应用主页</font></strong></a><br />
<font size="2" face="Arial"><img alt="图 2. 应用主页" src="http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1111_zhangt_opensource/images/image02.jpg" width="580" height="306" /></font> <br />
这里需要注意的是，由于开源框架的开发和目录结构不规范，导致在 WAS 中部署 WAR 文件失败。您可能会看到诸如&#8220;EAR 文件可能已损坏或不完整。确保对于 WebSphere Application Server，该应用程序处于兼容的 Java 2 Platform, Enterprise Edition (J2EE) 级别。&#8221;这样的错误。<br />
<br />
<a name="fig3"><strong><font size="2" face="Arial">图 3. WAS 中应用部署错误</font></strong></a><br />
<font size="2" face="Arial"><img alt="图 3. WAS 中应用部署错误" src="http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1111_zhangt_opensource/images/image03.jpg" width="580" height="73" /></font> <br />
遇到上述错误的原因，可能是因为 WAR 文件中包含 EXE 文件或者 WAR 文件结构不规范，去掉这些文件或调整文件结构即可解决该错误。<br />
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizcache="23" sizset="85">&nbsp;</p>
<p sizcache="23" sizset="86"><a name="major3"><span class="atitle"><strong><font size="5">迁移之前的准备工作</font></strong></span></a></p>
迁移之前的准备工作非常关键。我们首先要确保应用可以在 Tomcat 成功运行，当然我们还需要确认以下几个方面：<ol type="1">
    <li>Tomcat 启动正常</li>
    <li>Struts、Spring 和 Hibernate 所需要的 lib 包都包含在应用的 WAR 或者 EAR 包中</li>
    <li>应用在 Tomcat 上部署并且启动成功</li>
    <li>应用的 Struts 功能启动成功，并能正常处理请求</li>
    <li>应用的数据库连接正常，Hibernate 映射成功并能正常实现数据持久化</li>
    <li>应用的 Spring 功能成功，并能将所需要的资源注入到应用中</li>
    <li>测试应用的其他功能确保应用整体运行正常 </li>
</ol>
同时查看 Tomcat、Eclipse 的日志，确保应用没有编译异常或错误。当然我们利用 Eclipse 或者 MyEclipse 开发应用时可能会用到 WAS 的插件，我们在部署之前一定要确保系统中只有一个 WAS 实例在运行。如果其他 WAS 实例运行，可能会出现端口冲突等错误，这时 WAS 会提示一些错误：
<br />
<a name="listing1"><strong><font size="2" face="Arial">清单 1. WAS 端口冲突错误</font></strong></a><br />
<table border="0" cellspacing="0" summary="This table contains a code listing." cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            org.omg.CORBA.INTERNAL: CREATE_LISTENER_FAILED_4 vmcid: 0x49421000 minor code:
            Caused by: org.omg.CORBA.INTERNAL: CREATE_LISTENER_FAILED_4  vmcid: 0x49421000  minor
            code: 56  completed: No
            at com.ibm.ws.orbimpl.transport.WSTransport.createListener(WSTransport.java:719)
            at com.ibm.ws.orbimpl.transport.WSTransport.initTransports(WSTransport.java:591)
            at com.ibm.rmi.iiop.TransportManager.initTransports(TransportManager.java:155)
            at com.ibm.rmi.corba.ORB.set_parameters(ORB.java:1212)
            at com.ibm.CORBA.iiop.ORB.set_parameters(ORB.java:1662)
            at org.omg.CORBA.ORB.init(ORB.java:364)
            at com.ibm.ws.orb.GlobalORBFactory.init(GlobalORBFactory.java:86)
            at com.ibm.ejs.oa.EJSORBImpl.initializeORB(EJSORBImpl.java:179)
            at com.ibm.ejs.oa.EJSServerORBImpl.&lt;init&gt;(EJSServerORBImpl.java:102)
            at com.ibm.ejs.oa.EJSORB.init(EJSORB.java:55)
            at com.ibm.ws.runtime.component.ORBImpl.start(ORBImpl.java:379)
            ... 26 more
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
WAS 在启动的时候抛出以上异常，这主要是因为端口冲突，我们可以查看系统中是否有已经启动的 WAS 或者别的程序正在占用此端口。也可以通过修改概要文件 config\cells\cellname\nodes\nodename 目录下的 serverindex.xml 文件中的端口解决。<br />
应用和环境都没问题了，我们就可以着手迁移应用了。<br />
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizcache="23" sizset="88">&nbsp;</p>
<p sizcache="23" sizset="89"><a name="major4"><span class="atitle"><strong><font size="5">部署中 Struts 框架可能遇到的问题所遇到的问题</font></strong></span></a></p>
Struts 框架最早是作为 Apache Jakarta 项目的组成部分问世运作，它继承了 MVC 的各项特性，并根据 J2EE 的特点，做了相应的变化与扩展。Struts 框架很好的结合了 Jsp，Java Servlet，Java Bean，Taglib 等技术。<br />
不论是 Struts1 还是 Struts2，很多部署问题都跟 lib 包冲突有关，所以在部署应用的时候要尽量查看一下应用 WAR 文件本身是否存在相互冲突的 jar 文件，WAR 文件和 WAS 所带的包是否存在相互冲突。我们总结了一些 Struts 包冲突的问题供大家参考：<br />
启动应用的时候报 Unable to load bean typecom.opensymphony.xwork2.ObjectFactory classorg.apache.struts2.impl.StrutsObjectFactory 错误。这种错误多是由于 WAS 中存在相同 sturts2-core jar 文件与应用 WAR 或者 EAR 文件中 struts 包冲突。建议删除 WAR 包中的 jar 文件，即可解决此问题。<br />
还有一种情况是在 Tomcat 下项目运行没有任何问题，但把 WAR 包安装在 WAS 中只能访问 HTML 页面了，其余的 Struts2 的请求和 JSP 页面都不能访问，提示您无权查看此页面，查看 WAS 日志文件中发现，启动时有类似错误：<br />
<a name="listing2"><strong><font size="2" face="Arial">清单 2. WAS 包冲突错误</font></strong></a><br />
<table border="0" cellspacing="0" summary="This table contains a code listing." cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            [11-8-18 15:17:41:079 CST] 00000010 webapp E com.ibm.ws.webcontainer.webapp.WebApp
            initializeExtensionProcessors SRVE0280E:
            扩展处理器无法在工厂
            [com.ibm.ws.jsp.webcontainerext.ws.WASJSPExtensionFactory@2bec2bec]
            中进行初始化：java.lang.ClassCastException:
            com.sun.faces.application.WebappLifecycleListener
            incompatible with java.util.EventListener
            &#8230;&#8230;
            [10-8-18 15:17:41:562 CST] 00000010 config I Initializing
            Sun's JavaServer Faces implementation (1.2_07-b03-FCS) for context '/cc'
            [10-8-18 15:17:44:579 CST] 00000010 webapp W com.ibm.ws.webcontainer.webapp
            .WebApp initializeTargetMappings SRVE0269W: 找不到用于处理 JSP 的扩展处理器。
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
解决方法有两种：
<ul>
    <li>在应用程序服务器 -&gt; [ 选择所使用的服务器 ] -&gt; Web 容器设置 -&gt; Web 容器 -&gt; 定制属性，增加名称为"com.ibm.ws.webcontainer.invokefilterscompatibility"的定制属性，值设为 true。</li>
    <li>或者检查 WAR 文件的 lib 库中是否存 jsf-api.jar，jsf-impl.jar，jstl-1.2.jar 三个 jar 文件。这是因为在使用 MyEclipse 开发时，MyEclipse 会自动将这三个 jar 文件加入到 lib 库中，但 jsf-impl.jar 包中的 com.sun.faces.application.WebappLifecycleListener 与 java.util.EventListener 不兼容导致应用无法访问，打开 WAR 包的 lib 目录，删除这三个 lib 包即可解决问题。 </li>
</ul>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizcache="23" sizset="91">&nbsp;</p>
<p sizcache="23" sizset="92"><a name="major5"><span class="atitle"><strong><font size="5">部署中 Spring 框架可能遇到的问题所遇到的问题</font></strong></span></a></p>
Spring 框架支持轻量级的企业应用开发。作为开源项目，Spring 框架得到了广泛的支持。目前大多数 SSH 架构的开源应用以 Tomcat 作为开发以及测试的 Web 容器。 WAS 也同样支持基于 Spring 框架的项目开发和部署，除了支持 Spring 框架本身的资源管理以及支持事务的特性外，WAS 也可以依靠自身的容器管理、事务支持等带来更加可靠的运行时环境。本文该部分将初步介绍基于 Spring 框架的开源应用从 Tomcat 上移植到 WAS 上需要注意的方面。
使用 Spring 开发的应用可以同时使用 Struts 和 Hibernate。整合了 Struts、Spring 和 Hibernate 进行开发的应用只要保证需要的 JAR 包全部打包在应用中，便可以正确的部署到 WAS 上。其中，WAS 不提供 Tomcat 缺省提供的一些开源 JAR 包，需要将这些包包含在应用中。此外，WAS 提供了很多 J2EE 相关特性，如果 Spring 要使用这些特性，则需要对 Spring 做相关配置。
<p sizcache="23" sizset="93"><a name="minor5.1"><span class="smalltitle"><strong>数据访问</strong></span></a></p>
Spring 整合 Hibernate 时，数据源配置信息应该定义在 applicationContext.xml 文件中。清单 3 给出了一个典型的配置数据源信息的示例。您可以将这段代码不做任何修改，加入到 applicationContext.xml 文件中，并放到打包之后的应用中，WAS 会自动识别并利用 Spring 框架完成数据源的配置。
<br />
<a name="listing3"><strong><font size="2" face="Arial">清单 3. applicationContext.xml 文件中的数据源配置</font></strong></a><br />
<table border="0" cellspacing="0" summary="This table contains a code listing." cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"&gt;
            &lt;property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"&gt;&lt;/property&gt;
            &lt;property name="url" value="jdbc:db2://localhost:50000/MYTEST"&gt;&lt;/property&gt;
            &lt;property name="username" value="db2admin"&gt;&lt;/property&gt;
            &lt;property name="password" value="password"&gt;&lt;/property&gt;
            &lt;/bean&gt;
            &lt;bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;
            &lt;property name="dataSource"&gt;
            &lt;ref bean="dataSource" /&gt;
            &lt;/property&gt;
            &lt;property name="hibernateProperties"&gt;
            &lt;props&gt;
            &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.DB2Dialect&lt;/prop&gt;
            &lt;/props&gt;
            &lt;/property&gt;
            &lt;property name="mappingResources"&gt;
            &lt;list&gt;&lt;value&gt;com/ibm/user/Person.hbm.xml&lt;/value&gt;&lt;/list&gt;
            &lt;/property&gt;
            &lt;/bean&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
您也可以使用 WAS 中已经配置好的数据源，在 Spring 的配置文件 applicationContext.xml 文件中声明数据源的代理 Bean，将 WAS 的数据源等资源通过该 Bean 委托给 Spring 框架进行调用。清单 4 给出了一个使用该方式进行配置的 applicationContext.xml 文件的片段。应用在运行时会使用该 Bean 找到相应的数据源完成与数据库的交互。
<br />
<a name="listing4"><strong><font size="2" face="Arial">清单 4. applicationContext.xml 文件中配置 WAS 数据源</font></strong></a><br />
<table border="0" cellspacing="0" summary="This table contains a code listing." cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            &lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&gt;
            &lt;property name="jndiName"&gt;&lt;value&gt; java:comp/env/jdbc/SSHTestDB&lt;/value&gt;&lt;/property&gt;
            &lt;/bean&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p sizcache="23" sizset="96"><a name="minor5.2"><span class="smalltitle"><strong>事务管理</strong></span></a></p>
Spring 框架同 WAS 一样支持两种事务管理的方式，分别为编程式和声明式。大多数的用户会选择声明式的事务管理方式，这种方式也是推荐使用的。<br />
通常情况下 Spring 事务管理的一个核心是 PlatformTransactionManager 接口，使用声明方式的事务管理的类均实现该接口，如对数据源进行事务管理的 DataSourceTransactionManager，对 Hibernate 进行事务管理的 HibernateTransactionManager 等。用户可以选择继续使用这些事务管理方法，在 applicationContext.xml 文件中做相应的配置，如清单 5 所示，然后打包部署到 WAS 上完成应用的安装和配置。
<br />
<a name="listing5"><strong><font size="2" face="Arial">清单 5. Spring 框架的事务管理配置</font></strong></a><br />
<table border="0" cellspacing="0" summary="This table contains a code listing." cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            &lt;bean id="txManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;
            &lt;property name="dataSource" ref="dataSource"/&gt;
            &lt;/bean&gt;
            &lt;bean id="txManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;
            &lt;property name="sessionFactory" ref="sessionFactory" /&gt;
            &lt;/bean&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
其中 ref=&#8221;dataSource&#8221; 对应于清单 3 中的 Bean id=&#8221;dataSource&#8221;；ref=&#8221;sessionFactory&#8221;对应于清单 3 中的 bean id="sessionFactory"。
WAS 支持 JTA，而 Spring 也提供了 JtaTransactionManager。因此也可以将 Spring 中的事务管理交给 WAS 来做。Spring 2.5 之后提供的特定于 WAS 的事务管理的实现类为 WebSphereUowTransactionManager，您可以在 applicationContext.xml 文件中进行相应的配置，将事务的管理交由 WAS 来做。如清单 6 所示。其中配置的 bean id="transactionManager" 并不需要知道自己为哪些资源负责，因为它使用了 WAS 容器的全局事务管理体系。
<br />
<a name="listing6"><strong><font size="2" face="Arial">清单 6. Spring 配置 WAS 的事务管理</font></strong></a><br />
<table border="0" cellspacing="0" summary="This table contains a code listing." cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            &lt;bean id="txManager"
            class="org.springframework.transaction.jta.WebSphereUowTransactionManager"&gt;
            &lt;/bean&gt;
            &lt;bean id="transactionManager"
            class="org.springframework.transaction.jta.JtaTransactionManager"&gt;
            &lt;property name="transactionManager"&gt;
            &lt;ref local="txManager"/&gt;
            &lt;/property&gt;
            &lt;/bean&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizcache="23" sizset="99"><a name="major6"><span class="atitle"><strong><font size="5">部署中 Hibernate 框架可能遇到的问题所遇到的问题</font></strong></span></a></p>
Hibernate 做为数据持久层框架非常灵活，易于上手，并且便于与其它开源框架整合，从而使它成为开源解决方案中数据持久层框架的不二选择。Hibernate 从 3.2 开始，就开始兼容 JPA。Hibernate3.2 获得了 Sun TCK 的 JPA (Java Persistence API) 兼容认证。这使它的应用范围更加广泛。这里介绍将使用 Hibernate 做为持久层的应用移植到 WAS 上时需要注意的方面。
在项目初期，由于定位或需求的原因，很多 Hibernate 应用都使用 Tomcat 或 Jboss 做为应用服务器。随着项目规模越来越大，对应用的可靠性和安全要求越来越高，就会考虑向商业应用服务器的迁移。总的来说，对一个可以正常运行在 Tomcat 或 Jboss 上的应用来说，移植到 WAS 上非常简单，并不需要做太多改动，只需要将应用所依赖的 Hibernate 相关 jar 包都打包在应用中，再更具情况对配置文件做轻微调整即可，不用修改任何 Java 源代码。
<p sizcache="23" sizset="101"><a name="minor6.1"><span class="smalltitle"><strong>保持原有连接方式</strong></span></a></p>
很多 Hibernate 应用采用 JDBC 的链接方式，即在配置文件 hibernate.cfg.xml 中配置 connection.url 属性，指定数据库链接信息。例如：&lt;property name="connection.url"&gt;jdbc:db2://db2url:port/dbname&lt;/property&gt;<br />
这种应用程序往往还要使用第三方提供的数据库连接池，例如 C3P0 等。如果在移植到 WAS 之后仍然想保持现有连接形式和数据库连接池不变，则不需要对配置文件做任何修改，只需要将第三方提供的数据库连接池所依赖的 jar 包文件一同打包到 WAS 应用中即可。例如将 C3P0 数据库连接池 jar 文件 c3p0-0.9.1.jar 打包到应用程序 lib 目录下。
<p sizcache="23" sizset="102"><a name="minor6.2"><span class="smalltitle"><strong>使用 WebSphere Application Server 数据源</strong></span></a></p>
WAS 数据源有着众多企业级优势，很多用户移植后都希望能使用到 WAS 做为企业级应用服务器数据层的强大功能，对 Hibernate 的移植也不例外。其实将 Hibernate 应用的数据源移植到 WAS 非常简单，只需要在 hibernate.cfg.xml 配置文件中加入数据源属性 connection.datasource 和 JNDI 提供商信息即可，无需修改任何源代码。这里需要注意，一旦配置好 WAS 的数据源，WAS 将接管与数据库通信的工作，如果在您以前的应用中使用了第三方数据库连接池，将会产生冲突。解决方法也很简单，只要将 hibernate.cfg.xml 配置文件中的关于第三方数据库连接池的信息注释或删除即可。
总结起来可分为三步：
<ol type="1">
    <li>将数据库连接信息
    <p>&lt;property name="connection.url"&gt;jdbc:db2://db2url:port/dbname&lt;/property&gt;</p>
    <p>替换为 WAS 数据源信息</p>
    <p>&lt;property name="connection.datasource"&gt;jdbc/hibernate&lt;/property&gt;</p>
    </li>
    <li>加入 jndi.class 属性
    <p>&lt;property name="jndi.class"&gt;com.ibm.websphere.naming.WsnInitialContextFactory&lt;/property&gt;</p>
    </li>
    <li>注释或删除原有数据库连接池相关属性 </li>
</ol>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top" sizcache="23" sizset="103"><a name="major7"><span class="atitle"><strong><font size="5">总结</font></strong></span></a></p>
现在的开源框架越来越庞大，同一框架不同版本的区别也很大。这篇文章虽不能覆盖开源框架迁移到 WAS 的所有问题，但总结的都是一些比较普遍的问题，力求让用户快速地发现和解决部署和迁移过程中的问题。在迁移过程中，应用的代码基本不需要修改，只要配置和部署得当，从 Tomcat 将开源应用迁移到 WAS 并不是一件难事。<img src ="http://www.blogjava.net/paulwong/aggbug/363878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2011-11-15 21:43 <a href="http://www.blogjava.net/paulwong/archive/2011/11/15/363878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Websphere 安装配置实录</title><link>http://www.blogjava.net/paulwong/archive/2009/09/19/295657.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 19 Sep 2009 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2009/09/19/295657.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/295657.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2009/09/19/295657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/295657.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/295657.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在LINUX中安装WEB SPHERE5.1的正确方法<br>1、安装前准备 <br>1）、检查磁盘空间的分配 <br>2）、端口有没有冲突？ <br>WebSphere应用服务器缺省占用的端口包括：管理控制台端口9090，管理控制台安全端口9043，HTTP传输端口9080，HTTPS传输端口 9443，SOAP通信端口8880（在网络部署版这个端口是8879）等。如果系统中已有应用占用了这些端口，那么应用服务器启动的时候就会报告端口冲 突的错误。一般可以用netstat或nmap来查看系统端口的使用情况。 <br>3）、服务器的主机名 <br>应该在安装Websphere之前配置主机名(hostname)。/etc/hosts文件要有相应的条目。 <br>4）、用户名和用户组的建立 <br>WebSphere应用服务器中内置了一个基于WebSphere MQ的JMS服务器。在UNIX/LINUX平台上安装的时候，如果选择了完全安装或在定制安装的时候选择了安装"嵌入式消息传递"，那么就要在安装开始 前先创建两个用户组mqm和mqbrkrs和一个用户mqm。而且需要将用&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2009/09/19/295657.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/295657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2009-09-19 12:52 <a href="http://www.blogjava.net/paulwong/archive/2009/09/19/295657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎样给websphere管理页面设置权限？</title><link>http://www.blogjava.net/paulwong/archive/2006/10/10/74356.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 10 Oct 2006 11:24:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2006/10/10/74356.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/74356.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2006/10/10/74356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/74356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/74356.html</trackback:ping><description><![CDATA[----步骤 1. 用计算机管理员账户进入本机wingdows操作系统，启动WAS服务器后，从 WebSphere 管理控制台，展开安全性 －&gt; 用户注册表。单击本地OS(本地操作系统)，并输入 WebSphere 管理员标识。 <br /><br /><br />a. 在服务器用户标识字段输入管理员用户标识。 <br />b. 在服务器用户密码字段输入与标识关联的密码。<br />单击确定。<br /><br /><br />----步骤 2. 转到全局安全性窗口，单击启用安全性。请验证实施 Java 2 安全性已关闭。其它选项默认。<br /><br /><br />----步骤 3. 单击确定－&gt; 保存。<br /><br /><br />----步骤 4. 重新启动 WAS 服务器以使更改生效。<img src ="http://www.blogjava.net/paulwong/aggbug/74356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2006-10-10 19:24 <a href="http://www.blogjava.net/paulwong/archive/2006/10/10/74356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Websphere Application Server心得</title><link>http://www.blogjava.net/paulwong/archive/2006/07/28/60502.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 28 Jul 2006 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2006/07/28/60502.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/60502.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2006/07/28/60502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/60502.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/60502.html</trackback:ping><description><![CDATA[    Websphere Application Server(WAS)是一个JVM容器+WEB容器+EJB容器，能<br /><br />解析JAVA的指令，能对HTTP的请求作响应，能解析EJB指令。<br /><br />    WAS只须装一次，就能自定义多个CONTAINER，表现在访问的网址上为不同的<br /><br />端口。<br /><br />    部署在WAS上的J2EE程序包只能是EAR包或WAR包，如果一个项目内必需多个<br /><br />WEB的PROJECT,则只能部署EAR包，EAR包中指定所要包含的WEB PROJECT，事实<br /><br />上EAR包的作用就是指定项目中有几个WEB PROJECT而已；如果一个项目中只有<br /><br />一个WEB PROJECT，则部署EAR包或WAR包均可以。<br /><br />    安装EAR包或WAR包都是从控制台的“安装新应用程序”中开始，两者的区别<br /><br />是安装EAR包无须指定上下文根，即：http://localhost:9080/web1中的web1，<br /><br />而安装WAR包则必须指定上下文根，其余则没什么区别，均须指定安装在哪个<br /><br />CONTAINER上，是否可以使用别名（网址上的不同）等。<br /><br />    打包可用Application Server ToolKit，支持从CVS上下载代码。<br /><img src ="http://www.blogjava.net/paulwong/aggbug/60502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2006-07-28 10:27 <a href="http://www.blogjava.net/paulwong/archive/2006/07/28/60502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse+WebSphere  通过  JNDI  连接  Sybase  简介   </title><link>http://www.blogjava.net/paulwong/archive/2006/07/24/59855.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 24 Jul 2006 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2006/07/24/59855.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/59855.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2006/07/24/59855.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/59855.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/59855.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 很久不来这里写东西了，一是工作忙，还有就是我是个初学者也写不出什么东西。这几天因工作需要学习了一下				WebSphere5.1,				在网上找了些资料终于了解了如何通过				JNDI				连接				Sybase				数据库。贴上来一个是怕自己以后忘了，另外就是希望能帮助像我一样苦苦探索的初学者。														 						...&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2006/07/24/59855.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/59855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2006-07-24 17:12 <a href="http://www.blogjava.net/paulwong/archive/2006/07/24/59855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebSphere中流行数据库连接池的配置(Oracle、SQL Server、Sybase、MySQL)</title><link>http://www.blogjava.net/paulwong/archive/2006/07/24/59838.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 24 Jul 2006 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2006/07/24/59838.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/59838.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2006/07/24/59838.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/59838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/59838.html</trackback:ping><description><![CDATA[本文介绍WebSphere下Oracle、SQL 
Server、Sybase、MySQL数据库连接池的配置方法，并给出相应调用连接池的示例。相对于Weblogic，WebSphere连接池的配置要稍微复杂一些，因为缺少相关的文档，需要一定的技巧和经验。特别是对于初学者，完整的配置好Websphere连接池还是有一定难度的。<br /><br />一、系统准备<br />1.在相应的数据库中建立本文用到的表<br /><pre class="overflow"><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">create</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">table</span><span style="color: rgb(0, 0, 0);"> TEST(C1 </span><span style="color: rgb(0, 0, 0); font-weight: bold;">CHAR</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(128, 0, 0); font-weight: bold;">10</span><span style="color: rgb(0, 0, 0);">) )<br /></span><span style="color: rgb(0, 0, 255);">insert</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">into</span><span style="color: rgb(0, 0, 0);"> TEST </span><span style="color: rgb(0, 0, 255);">values</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(255, 0, 0);">FromTest</span><span style="color: rgb(255, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)</span></div><br /></pre><br />2.准备环境变量，此部分往往会被初学者忽略。<br /><br /><br /><img src="http://www.matrix.org.cn/resource/upload/forum/2005_11_06_031013_RRJcRWxajR.jpg" height="354" width="584" /><br /><br />点击“管理WebSphere变量”，ORACLE_JDBC_DRIVER_PATH的值输入操作系统中jar文件（classes12.jar）的位置。<br />“确认”后，界面最上方，点击“保存”，会再提示“保存”还是“放弃”，再选“保存”。<br /><br />为方便起见，本文中，SQL 
Server的jar文件（msbase.jar、mssqlserver.jar、msutil.jar 
）、Sybase的jar文件（jconn2.jar）、mySQL的jar文件（mysql-connector-java-3.1.10-bin.jar）都放在同一目录（如：C:\oracle\ora92\jdbc\lib）。<br /><br />3.本文中的所有例子测试均通过，环境：Windows2003、WebShpere5.1、ORACLE9I、SQL 
Server 2000、SYBASE12.5、MySQL5.0。<br /><br />二、Oracle、SQL 
Server、Sybase、MySQL数据库连接池在WebSphere中的详细配置步骤<br /><br />（一）、Oracle连接池的配置<br /><br />1.进入管理控制台（http://localhost:9090/admin/）<br /><br />2.选择：资源-&gt;JDBC提供程序，点击“新建”，建立JDBC提供程序。<br /><br /><img src="http://www.matrix.org.cn/resource/upload/forum/2005_11_06_031225_fsEEcqHCIU.jpg" height="323" width="679" /><br /><br /><br />点击“应用”后，类路径中，输入“${ORACLE_JDBC_DRIVER_PATH}/classes12.jar”，再点击“应用”。<br /><br />3.定义数据源<br />点击界面中“数据源后”再点击“新建”，建立数据源。<br /><br /><img src="http://www.matrix.org.cn/resource/upload/forum/2005_11_06_031313_JSltBAllRg.jpg" height="503" width="469" /><br /><br />JNDI取名ORACLE_JNDI，点击“应用”。<br /><br />4.界面上点击“定制属性”，定义连接池的JDBC 
Driver、URL、用户名和口令等信息。<br />点击“URL”,URL的值输入：jdbc:oracle:thin:@localhost:1521:MYHORA，其中，localhost可以为ORACLE的IP地址，MYHORA是ORACLE的服务名称。<br />点击“确定”保存配置。<br />同样的方法输入：<br />driverType的值oracle.jdbc.driver.OracleDriver<br />databasename的值MYHORA<br />servername的值localhost<br />preTestSQLString的值为SELECT 
COUNT(1) FROM 
TEST<br />其余的取默认值。<br /><br />5.本部分比较关键，是初学着比较困惑的地方。<br />我们看到，界面上并没有输入用户名、口令的地方，而没有用户名称、口令是无法连接数据库的。<br /><br /><img src="http://www.matrix.org.cn/resource/upload/forum/2005_11_06_031349_GstsSfatGE.jpg" height="426" width="596" /><br /><br /><br />在“定制属性”中点击“新建”，“名称”中输入user，“值”中输入数据库的用户名称，如：study，点击“确定”；<br />在“定制属性”中点击“新建”，“名称”中输入password，“值”中输入数据库的口令，如：study，点击“确定”；<br />我们看到，“定制属性”中多了两个我们自定义的属性user、password<br /><br /><img src="http://www.matrix.org.cn/resource/upload/forum/2005_11_06_031509_fzxeLTGrIO.jpg" height="297" width="528" /><br /><br /><img onmouseover="javascript:imgShowTip(this);" style="display: inline;" onclick="javascript:imgClick(this);" alt="resized image" src="resource/upload/forum/2005_11_06_031509_fzxeLTGrIO.jpg" onload="javascript:imgLoad(this);" resized="1" border="0" width="600" /><br /><br />6.保存配置，在“定制属性”界面的最上方点击“保存”。<br /><br />7.测试连接<br /><br /><br /><img src="http://www.matrix.org.cn/resource/upload/forum/2005_11_06_031603_nLJBCIUpyq.jpg" height="289" width="697" /><br /><br /><br />系统提示：成功信息，表明，连接池配置成功。<br />连接池配置成功后，WebSphere需要重新启动。<br /><br />（二）、SQL 
server连接池的配置<br /><br />SQL Server连接池的配置步骤同Oracle，具体的参数值：<br />JDBC 提供程序：下拉选择Microsoft 
JDBC driver for MSSQLServer 
2000<br />Sybase连接池的配置步骤也同Oracle，具体的参数值：<br />常规属性中的名称：Microsoft JDBC driver for 
MSSQLServer 2000<br />常规属性中的描述：Microsoft JDBC driver for MSSQLServer 
2000<br />常规属性中的类路径：<br />${ORACLE_JDBC_DRIVER_PATH}/msbase.jar<br />${ORACLE_JDBC_DRIVER_PATH}/mssqlserver.jar<br />${ORACLE_JDBC_DRIVER_PATH}/msutil.jar<br /><br />常规属性中的实现类名：默认<br />数据源中的名称：SQLSERVER_JNDI<br />数据源中的JNDI：SQLSERVER_JNDI<br />定制属性中的databaseName：数据库名称<br />定制属性中的serverName：Sybase数据库服务器的名称或IP<br />定制属性中的portNumber：端口号<br />定制属性中的preTestSQLString：SELECT 
COUNT(1) FROM 
TEST<br />同Oracle，手工“新建”user和password属性，值为数据库的用户名和口令，该用户的缺省数据库必须为databaseName的值。<br />其他默认。<br /><br />（三）、Sybase连接池的配置<br /><br />JDBC 
提供程序：下拉选择Sybase JDBC Driver<br />Sybase连接池的配置步骤也同Oracle，具体的参数值：<br />常规属性中的名称：SYBASE 
JDBC Driver<br />常规属性中的描述：SYBASE JDBC 
Driver<br />常规属性中的类路径：${ORACLE_JDBC_DRIVER_PATH}/jconn2.jar<br />常规属性中的实现类名：默认<br />数据源中的名称：SYBASE_JNDI<br />数据源中的JNDI：SYBASE_JNDI<br />定制属性中的databaseName：数据库名称<br />定制属性中的serverName：Sybase数据库服务器的名称或IP<br />定制属性中的portNumber：端口号<br />定制属性中的preTestSQLString：SELECT 
COUNT(1) FROM 
TEST<br />同Oracle，手工“新建”user和password属性，值为数据库的用户名和口令，该用户的缺省数据库必须为databaseName的值。<br />其他默认。<br /><br />（四）、MySQL连接池的配置<br /><br />MySQL连接池的配置步骤同Oracle稍有不同，JDBC 
提供程序中并没有MySQL中的选项，选Oracle JDBC 
Driver就可以，实际运行中，WebSphere是以设置的参数为准的。<br /><br />具体的参数值：<br />常规属性中的名称：MySQL JDBC 
Driver<br />常规属性中的描述：MySQL JDBC 
Driver<br />常规属性中的类路径：${ORACLE_JDBC_DRIVER_PATH}/mysql-connector-java-3.1.10-bin.jar<br />常规属性中的实现类名：com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource<br />数据源中的名称：MYSQL_JNDI<br />数据源中的JNDI：MYSQL_JNDI<br /><br /><img src="http://www.matrix.org.cn/resource/upload/forum/2005_11_06_031717_aEOIRIDquH.jpg" height="274" width="542" /><br /><br /><br /><br />由于WebSphere没有缺省的MySQL选项，“定制属性”全部需要手工新建。具体的值要根据MySQL的实际环境要做相应修改（petshop是我机器上的数据库名称）。<br /><br />三、应用程序中测试连接池。<br /><br />1. 
jsp程序中测试连接池<br /><br />附件中的TestConnPoolWeb.ear文件直接发布后，<br />运行：http://localhost:9080/TestConnPoolWeb/oracle_pool.jsp，结果：ORACLE_JNDI:FromTest<br />运行：http://localhost:9080/TestConnPoolWeb/sqlserver_pool.jsp，结果：SQLSERVER_JNDI:FromTest<br />运行：http://localhost:9080/TestConnPoolWeb/sybase_pool.jsp，结果：SYBASE_JNDI:FromTest<br />运行：http://localhost:9080/TestConnPoolWeb/mysql_pool.jsp，结果：MYSQL_JNDI:FromTest<br /><br />2. 
程序说明<br /><br />得到连接的方法：<br /><pre class="overflow"><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> Connection getConnection(String strConnPoolJndi) </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> NamingException, SQLException {<br />Context ctx </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />ctx </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> InitialContext();<br />DataSource ds </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> (DataSource)ctx.lookup(strConnPoolJndi);<br />Connection conn </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> ds.getConnection();<br /><br /></span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> conn;<br /><br />}</span></div><br /></pre><br />参数strConnPoolJndi分别为：ORACLE_JNDI、SQLSERVER_JNDI、SYBASE_JNDI、MYSQL_JNDI，对于相应的数据库。<br />从表中查询一条数据：<br /><pre class="overflow"><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String getDBData(String strConnPoolJndi) {<br />String strReturn</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">;<br />Connection conn </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />Statement st </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />ResultSet rs </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br /><br /></span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> {<br />conn </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> getConnection(strConnPoolJndi);<br />st </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> conn.createStatement();<br />rs </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> st.executeQuery( </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">select C1 from TEST</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> );<br /><br /></span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (rs.next()) {<br />strReturn </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> rs.getString(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />}<br /><br />}<br /></span></div><br /></pre><br />jsp中打印出表中的一条记录：<br /><pre class="overflow"><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">&lt;%</span><span style="color: rgb(0, 0, 0);"><br />out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">ORACLE_JNDI:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> test.pool.TestPool.getDBData(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">ORACLE_JNDI</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));<br /></span><span style="color: rgb(0, 0, 0);">%&gt;</span></div><br /></pre><br /><br />附件TestConnPoolWeb.ear（包括源程序）<br />[<a href="resource/upload/forum/2005_11_06_031801_CKcUckcOxf.rar">Download File</a>] 
<img src ="http://www.blogjava.net/paulwong/aggbug/59838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2006-07-24 16:15 <a href="http://www.blogjava.net/paulwong/archive/2006/07/24/59838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>