﻿<?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>C++博客-天高任鸟飞  海阔凭鱼跃-随笔分类-Java</title><link>http://www.cppblog.com/jaunt/category/3036.html</link><description>……C++正在学习中……</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 20:31:05 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 20:31:05 GMT</pubDate><ttl>60</ttl><item><title>Java开源项目Hibernate包作用详解</title><link>http://www.cppblog.com/jaunt/archive/2006/11/16/15242.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Thu, 16 Nov 2006 09:11:00 GMT</pubDate><guid>http://www.cppblog.com/jaunt/archive/2006/11/16/15242.html</guid><wfw:comment>http://www.cppblog.com/jaunt/comments/15242.html</wfw:comment><comments>http://www.cppblog.com/jaunt/archive/2006/11/16/15242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jaunt/comments/commentRss/15242.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jaunt/services/trackbacks/15242.html</trackback:ping><description><![CDATA[ 本文将详细讲解Hibernate每个jar包的作用，便于你在应用中根据自己的需要进行取舍 <br /><br />　　Hibernate一共包括了23个jar包，令人眼花缭乱。本文将详细讲解Hibernate每个jar包的作用，便于你在应用中根据自己的需要进行取舍。<br /><br />　　下载Hibernate，例如2.0.3稳定版本，解压缩，可以看到一个hibernate2.jar和lib目录下有22个jar包： <br /><br />　　<span style="BACKGROUND-COLOR: rgb(255,204,0)">hibernate2.jar</span>: <br />　　Hibernate的库，没有什么可说的，必须使用的jar包 <br /><br />　　<span style="BACKGROUND-COLOR: rgb(255,204,51)">cglib-asm.ja</span>r: <br />　　CGLIB库，Hibernate用它来实现PO字节码的动态生成，非常核心的库，必须使用的jar包 <br /><br />　　<span style="BACKGROUND-COLOR: rgb(255,204,51)">dom4j.jar</span>: <br />　　dom4j是一个Java的XML API，类似于jdom，用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API，具有性能优异、功能强大和极端易用使用的特点，同时它也是一个开放源代码的软件，可以在SourceForge上找到它。在 IBM developerWorks上面可以找到一篇文章，对主流的Java XML API进行的性能、功能和易用性的评测，dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j，直到现在。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML，特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包，Hibernate用它来读写配置文件。 <br /><br />　　<span style="BACKGROUND-COLOR: rgb(255,204,51)">odmg.jar</span>: <br />　　ODMG是一个ORM的规范，Hibernate实现了ODMG规范，这是一个核心的库，必须使用的jar包。 <br /><br />　　<span style="BACKGROUND-COLOR: rgb(255,204,51)">commons-collections.jar</span>： <br />　　Apache Commons包中的一个，包含了一些Apache开发的集合类，功能比java.util.*强大。必须使用的jar包。 <br /><br />　　<span style="BACKGROUND-COLOR: rgb(255,204,51)">commons-beanutils.jar</span>： <br />　　Apache Commons包中的一个，包含了一些Bean工具类类。必须使用的jar包。 <br /><br />　　<span style="BACKGROUND-COLOR: rgb(255,204,51)">commons-lang.jar</span>: <br />　　Apache Commons包中的一个，包含了一些数据类型工具类，是java.lang.*的扩展。必须使用的jar包。 <br /><br />　　<span style="BACKGROUND-COLOR: rgb(255,204,51)">commons-logging.jar</span>: <br />　　Apache Commons包中的一个，包含了日志功能，必须使用的jar包。这个包本身包含了一个Simple Logger，但是功能很弱。在运行的时候它会先在CLASSPATH找log4j，如果有，就使用log4j，如果没有，就找JDK1.4带的java.util.logging，如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾，当初Apache极力游说Sun把 log4j加入JDK1.4，然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了，因此拒绝了Apache的要求，使用自己的 java.util.logging，这个包的功能比log4j差的很远，性能也一般。<br /><br />　　后来Apache就开发出来了commons -logging.jar用来兼容两个logger。因此用commons-logging.jar写的log程序，底层的Logger是可以切换的，你可以选择log4j，java.util.logging或者它自带的Simple Logger。不过我仍然强烈建议使用log4j，因为log4j性能很高，log输出信息时间几乎等于System.out，而处理一条log平均只需要5us。你可以在Hibernate的src目录下找到 Hibernate已经为你准备好了的log4j的配置文件，你只需要到Apache 网站去下载log4j就可以了。commons- logging.jar也是必须的jar包。 <br /><br />　　使用Hibernate必须的jar包就是以上的这几个，剩下的都是可选的。 <br /><br />　　ant.jar: <br />　　Ant编译工具的jar包，用来编译Hibernate源代码的。如果你不准备修改和编译Hibernate源代码，那么就没有什么用，可选的jar包 <br /><br />　　optional.jar： <br />　　Ant的一个辅助包。 <br /><br />　　c3p0.jar： <br />　　C3PO是一个数据库连接池，Hibernate可以配置为使用C3PO连接池。如果你准备用这个连接池，就需要这个jar包。 <br /><br />　　proxool.jar： <br />　　也是一个连接池，同上。 <br /><br />　　commons-pool.jar, commons-dbcp.jar: <br />　　DBCP数据库连接池，Apache的Jakarta组织开发的，Tomcat4的连接池也是DBCP。 <br /><br />　　实际上Hibernate自己也实现了一个非常非常简单的数据库连接池，加上上面3个，你实际上可以在Hibernate上选择4种不同的数据库连接池，选择哪一个看个人的偏好，不过DBCP可能更通用一些。另外强调一点，如果<span style="BACKGROUND-COLOR: rgb(153,153,0)">在EJB中使用Hibernate，一定要用App Server的连接池，不要用以上4种连接池，否则容器管理事务不起作用</span>。 <br /><br />　　connector.jar: <br />　　JCA 规范，如果你在App Server上把Hibernate配置为Connector的话，就需要这个jar。不过实际上一般App Server肯定会带上这个包，所以实际上是多余的包。 <br /><br />　　jaas.jar: <br />　　JAAS是用来进行权限验证的，已经包含在JDK1.4里面了。所以实际上是多余的包。 <br /><br />　　jcs.jar： <br />　　如果你准备在Hibernate中使用JCS的话，那么必须包括它，否则就不用。 <br /><br />　　jdbc2_0-stdext.jar: <br />　　JDBC2.0的扩展包，一般来说数据库连接池会用上它。不过App Server都会带上，所以也是多余的。 <br /><br />　　jta.jar： <br />　　JTA规范，当Hibernate使用JTA的时候需要，不过App Server都会带上，所以也是多余的。 <br /><br />　　junit.jar: <br />　　Junit包，当你运行Hibernate自带的测试代码的时候需要，否则就不用。 <br /><br />　　xalan.jar, xerces.jar, xml-apis.jar: <br />　　Xerces是XML解析器，Xalan是格式化器，xml-apis实际上是JAXP。一般App Server都会带上，JDK1.4也包含了解析器，不过不是Xerces，是Crimson，效率比较差，不过Hibernate用XML只不过是读取配置文件，性能没什么紧要的，所以也是多余的。<img src ="http://www.cppblog.com/jaunt/aggbug/15242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jaunt/" target="_blank">Jaunt</a> 2006-11-16 17:11 <a href="http://www.cppblog.com/jaunt/archive/2006/11/16/15242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts与Hibernate常见错误</title><link>http://www.cppblog.com/jaunt/archive/2006/11/16/15240.html</link><dc:creator>Jaunt</dc:creator><author>Jaunt</author><pubDate>Thu, 16 Nov 2006 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/jaunt/archive/2006/11/16/15240.html</guid><wfw:comment>http://www.cppblog.com/jaunt/comments/15240.html</wfw:comment><comments>http://www.cppblog.com/jaunt/archive/2006/11/16/15240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jaunt/comments/commentRss/15240.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jaunt/services/trackbacks/15240.html</trackback:ping><description><![CDATA[ 以下所说的struts-config.xml和ApplicationResources.properties等文件名是缺省时使用的，如果你使用了多模块，或指定了不同的资源文件名称，这些名字要做相应的修改。 
<p><strong>1、“No bean found under attribute key XXX”<br /></strong>在struts-config.xml里定义了一个ActionForm，但type属性指定的类不存在，type属性的值应该是Form类的全名。或者是，在Action的定义中，name或attribute属性指定的ActionForm不存在。<br /></p><p><strong>2、“Cannot find bean XXX in any scope”</strong><br />在Action里一般会 request.setAttribute()一些对象，然后在转向的jsp文件里（用tag或request.getAttribute()方法）得到这些对象并显示出来。这个异常是说jsp要得到一个对象，但前面的Action里并没有将对象设置到request（也可以是session、 servletContext）里。<br />可能是名字错了，请检查jsp里的tag的一般是name属性，或getAttribute()方法的参数值；或者是Action逻辑有问题没有执行setAttribute()方法就先转向了。<br />还有另外一个可能，纯粹是jsp文件的问题，例如&lt;logic:iterate&gt;会指定一个id值，然后在循环里&lt;bean: write&gt;使用这个值作为name的值，如果这两个值不同，也会出现此异常。（都是一个道理，request里没有对应的对象。）<br /></p><p><strong>3、“Missing message for key "XXX"”</strong><br />缺少所需的资源，检查ApplicationResources.properties文件里是否有jsp文件里需要的资源，例如：</p><p> </p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"><div><img alt="" src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">bean:message key</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">msg.name.prompt</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span></div></div><p> </p><p>这行代码会找msg.name.prompt资源，如果AppliationResources.properties里没有这个资源就会出现本异常。在使用多模块时，要注意在模块的struts-config-xxx.xml里指定要使用的资源文件名称，否则当然什么资源也找不到，这也是一个很容易犯的错误。</p><p><strong>4、“No getter method for property XXX of bean teacher”</strong><br />这条异常信息说得很明白，jsp里要取一个bean的属性出来，但这个bean并没有这个属性。你应该检查jsp中某个标签的property属性的值。例如下面代码中的cade应该改为code才对：</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"><div><img alt="" src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">bean:write name</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">teacher</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> property</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">cade</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)"> filter</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">true</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">/&gt;</span></div></div><br /><p> </p><p><strong>5、“Cannot find ActionMappings or ActionFormBeans collection”<br /></strong>待解决。</p><p><strong>6、“Cannot retrieve mapping for action XXX”<br /></strong>在.jsp的&lt;form&gt;标签里指定action='/XXX'，但这个Action并未在struts-config.xml里设置过。</p><p><strong>7、HTTP Status 404 - /xxx/xxx.jsp<br /></strong>Forward的path属性指向的jsp页面不存在，请检查路径和模块，对于同一模块中的Action转向，path中不应包含模块名；模块间转向，记住使用contextRelative="true"。</p><p><strong>8、没有任何异常信息，显示空白页面</strong><br />可能是Action里使用的forward与struts-config.xml里定义的forward名称不匹配。<br /></p><p><strong>9、“The element type "XXX" must be terminated by the matching end-tag "XXX".”<br /></strong>这个是struts-config.xml文件的格式错误，仔细检查它是否是良构的xml文件，关于xml文件的格式这里就不赘述了。</p><p><strong>10、“Servlet.init() for servlet action threw exception”</strong><br />一般出现这种异常在后面会显示一个关于ActionServlet的异常堆栈信息，其中指出了异常具体出现在代码的哪一行。我曾经遇到的一次提示如下：</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: rgb(230,230,230) 0% 50%; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"><div><img alt="" src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: rgb(0,0,0)">java.lang.NullPointerException<br /><img alt="" src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:</span><span style="COLOR: rgb(0,0,0)">1003</span><span style="COLOR: rgb(0,0,0)">)<br /><img alt="" src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:</span><span style="COLOR: rgb(0,0,0)">955</span><span style="COLOR: rgb(0,0,0)">)<br /><img alt="" src="http://bjzhanghao.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><img alt="" src="http://bjzhanghao.cnblogs.com/Images/dot.gif" /></span></div></div><p><br />为解决问题，先下载struts的源码包，然后在ActionServlet.java的第1003行插入断点，并对各变量进行监视。很丢人，我竟然把struts-config.xml文件弄丢了，因此出现了上面的异常，应该是和CVS同步时不小心删除的。</p><p><strong>11、“Resources not defined for Validator”</strong><br />这个是利用Validator插件做验证时可能出现的异常，这时你要检查validation.xml文件，看里面使用的资源是否确实有定义，form的名称是否正确，等等。</p><p><strong>12、“Servlet action is not available”<br /></strong>a、struts.jar没有放在正确的位置； <br />b、web.xml或struts-config.xml的内容有问题，比如在struts-config.xml里指定了使用一个Plugin，但那个Plugin类不存在或加载出错。</p><img src ="http://www.cppblog.com/jaunt/aggbug/15240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jaunt/" target="_blank">Jaunt</a> 2006-11-16 17:08 <a href="http://www.cppblog.com/jaunt/archive/2006/11/16/15240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>