﻿<?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-BeanSoft's Java Blog-随笔分类-Java EE</title><link>http://www.blogjava.net/beansoft/category/17555.html</link><description>MyEclipse 6, Java EE 5, JSPWiki, Spring, Struts, Hibernate, JPA, SWT, Swing, AJAX, JavaScript, Netbeans</description><language>zh-cn</language><lastBuildDate>Sun, 20 Apr 2008 14:10:39 GMT</lastBuildDate><pubDate>Sun, 20 Apr 2008 14:10:39 GMT</pubDate><ttl>60</ttl><item><title>独家：Java EE 5 中文 API 文档在线阅读和操作视频(有声)</title><link>http://www.blogjava.net/beansoft/archive/2008/04/20/194353.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sun, 20 Apr 2008 11:30:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/04/20/194353.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/194353.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/04/20/194353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/194353.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/194353.html</trackback:ping><description><![CDATA[
		<p>
				<embed height="415" type="application/x-shockwave-flash" width="480" src="http://6.cn/player.swf?flag=0&amp;amp;vid=U7JkWvgnVutAJqMn8BRmUA" wmode="transparent" allowscriptaccess="always">
				</embed>
		</p>
		<p>如无法全屏，请点击这里：<a title="http://6.cn/watch/4599331.html" href="http://6.cn/watch/4599331.html">http://6.cn/watch/4599331.html</a> </p>
		<p>图文版说明及无声视频请参考<a href="/beansoft/archive/2008/04/17/193691.html">独家：Java EE 5 中文 API 文档在线阅读和操作视频</a></p>
<img src ="http://www.blogjava.net/beansoft/aggbug/194353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-04-20 19:30 <a href="http://www.blogjava.net/beansoft/archive/2008/04/20/194353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>独家：Java EE 5 中文 API 文档在线阅读和操作视频</title><link>http://www.blogjava.net/beansoft/archive/2008/04/17/193691.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Thu, 17 Apr 2008 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/04/17/193691.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/193691.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/04/17/193691.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/193691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/193691.html</trackback:ping><description><![CDATA[<p>本文由<a href="mailto:BeanSoft@126.com">BeanSoft@126.com</a>（刘长炯）原创，转载请注明出处！</p> <p> 最近互联网上挂起了一股到处散发广告传单，严重干扰工作学习的歪风。我想搞技术的爱国的话就多分享点资料和经验吧！这样总比那些整天只知道空谈爱国，动辄抵制XX的“爱国青年”强点。多share就是最大的爱国！</p> <p>相比较微软的开发工具详细的中文文档外，Java 的API长期以来只有英文，还好最近已经有了中文的Java SE文档。不过，Java EE 5 的中文API 却难得一见，然而，幸运的是现在我们终于可以看到中文的 Java EE 5文档了，虽然有些遗憾只能在线浏览，不过总比没有强，以后它们肯定会提供中文版的文档包下载的！</p> <p>&nbsp;</p> <p>这个阅读文档的地址就是<a title="http://doc.java.sun.com/DocWeb/" href="http://doc.java.sun.com/DocWeb/">http://doc.java.sun.com/DocWeb/</a>，而且，它采用开源的协议，读者可以注册一个用户参与翻译。也正因为如此，我认为其中的文档并不全面，需要有条件的人共同参与完成中文化文档。下面我们就看看如何阅读中文文档。</p> <p>进入首页：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JavaEE5API_981D/-2008-04-17_110035_2.png"><img border="0" alt="-2008-04-17_110035" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JavaEE5API_981D/-2008-04-17_110035_thumb.png" width="952" height="233"></a> </p> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JavaEE5API_981D/image_2.png"><img border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JavaEE5API_981D/image_thumb.png" width="222" height="396"></a> <a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JavaEE5API_981D/image_4.png"><img border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JavaEE5API_981D/image_thumb_1.png" width="716" height="265"></a> </p> <p>如果要查看单篇中文文档，可以在“EJB日”上点右键，选择菜单项“在新窗口中打开”即可。如下图所示：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JavaEE5API_981D/image_6.png"><img border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JavaEE5API_981D/image_thumb_2.png" width="442" height="339"></a> </p> <p>下面是操作视频：</p> <p>&nbsp;</p><embed height="768" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" width="1024" src="http://beansoft.java-cn.org/download/javaee5doc_cn.swf" quality="high" bgcolor="#FFFFFF"></embed><img src ="http://www.blogjava.net/beansoft/aggbug/193691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-04-17 11:37 <a href="http://www.blogjava.net/beansoft/archive/2008/04/17/193691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐资料：Hibernate 3 入門和JPA 批注参考（中文）</title><link>http://www.blogjava.net/beansoft/archive/2008/03/08/184740.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 08 Mar 2008 12:40:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/03/08/184740.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/184740.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/03/08/184740.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/184740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/184740.html</trackback:ping><description><![CDATA[<h1>Hibernate 3 入門和<a href="http://www.oracle.com/technology/global/cn/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html">JPA 批注参考（中文）</a></h1> <p><strong>Hibernate 3 入門</strong></p> <p>台湾 <a href="http://www.javaworld.com.tw/confluence/display/~caterpillar">良葛格</a>&nbsp; ，比较详细，按照开发步骤讲解的Hibernate学习资料，个人觉得比那本中文版的Hibernate参考手册要有可操作性的多。地址：<a title="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3077" href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3077">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3077</a></p> <p>内容一览：</p> <p>Hibernate 是「物件/關係對應」（Object/Relational Mapping）的解決方案，簡寫為ORM，簡單的說就是將 Java 中的物件與物件關係，映射至關聯式資料庫中的表格與表格之間的關係， Hibernate 提供了這個過程中自動對應轉換的方案。 <p>2001年未 Hibernate 第一個版本發表，2003年6月8日 Hibernate 2 發表，並於年未獲得 Jolt 2004 大獎，後被 JBOSS 收納而成為其子項目之一，2005年3月 Hibernate 3 正式發表，當中有了一些重大的改變，這份文件將以之前 Hibernate 2 時撰寫的 <a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=833">文件<sup><img border="0" alt="" align="absMiddle" src="http://www.javaworld.com.tw/confluence/images/icons/linkext7.gif" width="7" height="7"></sup></a> 為基礎，針對 Hibernate 3作重新整理的動作，所使用的版本為Hibernate 3.0。 <p><b><ins>基礎入門</ins></b><br>從一個最基本的物件關係映射自動化程式，瞭解 Hibernate 組成的基本元素，並進一步瞭解 Hibernate 的基礎語義、配置等概念。 <ul> <li>O/R 映射入門<br>第一個 Hibernate 程式很簡單，將一個物件映射至一個資料表。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3084">配置 Hibernate</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3090">第一個 Hibernate</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3094">第二個 Hibernate</a></li></ul></li></ul> <ul> <li>基本配置<br>瞭解一下配置文件、映射文件中各種元素的意義，在進入物件關係映射的學習之前，這是必備的基本功夫。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3112">配置文件</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3114">資料庫連結</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3115">簡介快取（Session Level）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3116">簡介事務管理（基於 JDBC ）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3117">映射文件</a></li></ul></li></ul> <ul> <li>基本 API<br>瞭解一下 Hibernate 常使用的幾個類別之基本使用方式。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/display/opensrc/Session">Session</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3120">Session 管理</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3128">Criteria 基本查詢</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3129">Criteria 進階查詢</a> <li><a href="http://www.javaworld.com.tw/confluence/display/opensrc/DetchedCriteria">DetchedCriteria</a> <li><a href="http://www.javaworld.com.tw/confluence/display/opensrc/Query">Query</a></li></ul></li></ul> <ul> <li>HQL（Hibernate Query Language）<br>這是 Hibernate 官方所推薦的查詢語言，接近 SQL 的語法，並提供更多的特性與封裝。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3133">基本查詢</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3134">where、group by、order by 子句</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3135">更新、刪除</a></li></ul></li></ul> <ul> <li>SQL 支援<br>Hibernate 提供了對 SQL 的支援，並可以自行定義持久化方式。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3136">建立 SQL 查詢</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3137">自定義 insert、update、delete</a></li></ul></li></ul> <ul> <li>映射基礎議題<br>一邊是物件，一邊是資料表格，兩者在映射時有一些過渡的基礎議題必須瞭解。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3138">實體物件生命週期</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3140">資料識別（Data Identity）</a></li></ul></li></ul> <p><b><ins>物件關聯映射（Object/Relational Mapping, ORM）</ins></b><br>學習 Hibernate，大部份的時間都在瞭解如何實現映射，而從中您也可以瞭解到不少關聯式資料庫的表格設計方式。 <ul> <li>實體映射<br>來看看一些進階的實體映射議題。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3142">複合主鍵（一）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3145">複合主鍵（二）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3146">Blob、Clob</a> <li><a href="http://www.javaworld.com.tw/confluence/display/opensrc/Component">Component</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3150">動態模型（Dynamic Model）</a></li></ul></li></ul> <ul> <li>繼承映射<br>在物件導向設計中，繼承關係是很常見的，但繼承與關聯式資料庫有著先天上的差異，繼承關係至表格的設計上有三種方式。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3152">繼承 - Table per concrete class</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3154">繼承 - Table per class hierarchy</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3159">繼承 - Table per subclass</a></li></ul></li></ul> <ul> <li>容器映射<br>容器常用來儲存物件，這邊來瞭解一下如何將容器的關係映射至表格。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/display/opensrc/Set">Set</a> <li><a href="http://www.javaworld.com.tw/confluence/display/opensrc/List">List</a> <li><a href="http://www.javaworld.com.tw/confluence/display/opensrc/Map">Map</a> <li><a href="http://www.javaworld.com.tw/confluence/display/opensrc/Bag">Bag</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3178">內含 Component 的容器</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3180">容器的排序</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3181">容器的延遲初始（Lazy Initialization）</a></li></ul></li></ul> <ul> <li>關係映射<br>來看看實體與實體之間的多對一、一對多、一對一、多對多如何與Java物件之間進行映射。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3187">多對一</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3283">cascade 的意義</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3346">一對多</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3479">雙向關聯（inverse 的意義）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3481">一對一（唯一外鍵關聯）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3524">一對一（主鍵關聯）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3526">多對多</a></li></ul></li></ul> <p><b><ins>進階特性</ins></b><br>有關於Hibernate的快取、事務等進階特性的探討。 <ul> <li>快取<br>二級快取可以跨越 Session 生命週期，Hibernate 透過第三方來實現二級快取，這邊也來看看 Query 的快取。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3576">二級快取（Second-level）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3606">Query 快取</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3607">Query.list、iterator</a></li></ul></li></ul> <ul> <li>Locking<br>Hibernate 透過兩種 Locking 機制來保證資料在操作過程中不會被干擾。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3608">悲觀鎖定（Pessimistic Locking）</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3609">樂觀鎖定（Optimistic Locking）</a></li></ul></li></ul> <ul> <li>Validatable、Lifecycle、Interceptor<br>分別透過這三個介面，來進行資料驗證、於 CRUD（Create Retrieve Update Delete）作對應動作、欄截動作。  <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3610">Lifecycle 介面、Validatable 介面</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3611">Interceptor 介面</a></li></ul></li></ul> <p><b><ins>工具</ins></b><br>透過一些工具來自動生成映射文件或資料庫表格。 <ul> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3612">從映射文件生成資料表</a> <li><a href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=3613">從資料表生成映射文件</a></li></ul><img src ="http://www.blogjava.net/beansoft/aggbug/184740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-03-08 20:40 <a href="http://www.blogjava.net/beansoft/archive/2008/03/08/184740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant 入门讲解视频(22分03秒)</title><link>http://www.blogjava.net/beansoft/archive/2007/11/03/157955.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 03 Nov 2007 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/11/03/157955.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/157955.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/11/03/157955.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/157955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/157955.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/11/03/157955.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/157955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-11-03 18:35 <a href="http://www.blogjava.net/beansoft/archive/2007/11/03/157955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 6 实战开发讲解视频入门 4 MyEclipse JPA 快速入门开发</title><link>http://www.blogjava.net/beansoft/archive/2007/10/01/149998.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sun, 30 Sep 2007 16:23:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/10/01/149998.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/149998.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/10/01/149998.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/149998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/149998.html</trackback:ping><description><![CDATA[
		<p>观看本视频前建议您首先观看过视频: <a href="/beansoft/archive/2007/09/26/148274.html">MyEclipse 6 实战开发讲解视频入门 2 用 MyEclipse Database Explorer 管理 MySQL 数据库</a> 否则本文内容可能将无法进行.<br /></p>
		<p>下载本视频的人同时也浏览了: <a class="entrylistItemTitle" id="CategoryEntryList1_EntryStoryList_Entries_ctl22_TitleUrl" href="/beansoft/archive/2007/08/31/141797.html"><strong><font color="#1a8bc8">MyEclipse 5.5 + JPA + Toplink 开发视频: 开发并运行第一个 JPA 项目</font></strong></a>  <br /><br />下载视频: <a href="http://gro.clinux.org/frs/download.php/2101/MyEclipse6_5.exe">MyEclipse6_5.exe</a> 4.89MB 13分15秒</p>
		<p>
				<img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="746" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/469ca7d2c252_150BC/image_1.png" width="819" border="0" />
		</p>
		<p>视频内容在线预览(一半内容):</p>
		<p>
				<embed pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" src="http://download.gro.clinux.org/beansoft/MyEclipse6_5_preview.swf" width="1024" height="792" type="application/x-shockwave-flash" bgcolor="#FFFFFF" quality="high">
				</embed>
		</p>
		<p>
				<br />
		</p>
		<p>1. 新建 Java Project;</p>
		<p>2. 给项目添加 JPA 功能(Toplink, Hibernate 均可);</p>
		<p>3. 反向工程生成 JPA Entity Bean, DAO;</p>
		<p>4. 编写测试类保存数据.<br /><br /><br />本文的部分代码:</p>
		<p>推荐的 Mysql JDBC 连接方式(不会产生乱码):</p>
		<p>-- JDBC Driver Name: com.mysql.jdbc.Driver<br />-- JDBC Driver URL: jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=GBK 
</p>
		<p> </p>
		<p>建表语句:</p>
		<div>
				<pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">
						<span style="COLOR: #0000ff">CREATE</span>
						<span style="COLOR: #0000ff">TABLE</span> MyUser (
  id <span style="COLOR: #0000ff">int</span>(11) <span style="COLOR: #0000ff">NOT</span><span style="COLOR: #0000ff">NULL</span> auto_increment,
  username <span style="COLOR: #0000ff">varchar</span>(200) <span style="COLOR: #0000ff">NOT</span><span style="COLOR: #0000ff">NULL</span>,
  password <span style="COLOR: #0000ff">varchar</span>(20) <span style="COLOR: #0000ff">NOT</span><span style="COLOR: #0000ff">NULL</span>,
  <span style="COLOR: #0000ff">PRIMARY</span><span style="COLOR: #0000ff">KEY</span>  (id)
) ENGINE=MyISAM <span style="COLOR: #0000ff">DEFAULT</span> CHARSET=GBK;</pre>
		</div>
		<p>JPA 配置文件(无中文问题版本):</p>
		<div>
				<pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">
						<span style="COLOR: #0000ff">&lt;?</span>
						<span style="COLOR: #800000">xml</span>
						<span style="COLOR: #ff0000">version</span>
						<span style="COLOR: #0000ff">="1.0"</span>
						<span style="COLOR: #ff0000">encoding</span>
						<span style="COLOR: #0000ff">="UTF-8"</span>?<span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">persistence</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://java.sun.com/xml/ns/persistence"</span><span style="COLOR: #ff0000">xmlns:xsi</span><span style="COLOR: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="COLOR: #ff0000">xsi:schemaLocation</span><span style="COLOR: #0000ff">="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"</span><span style="COLOR: #ff0000">version</span><span style="COLOR: #0000ff">="1.0"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">persistence-unit</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="JPADemoPU"</span><span style="COLOR: #ff0000">transaction-type</span><span style="COLOR: #0000ff">="RESOURCE_LOCAL"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">provider</span><span style="COLOR: #0000ff">&gt;</span>
            oracle.toplink.essentials.PersistenceProvider
        <span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">provider</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span>jpadao.Myuser<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">properties</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="toplink.jdbc.driver"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="com.mysql.jdbc.Driver"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="toplink.jdbc.url"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=GBK"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="toplink.jdbc.user"</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="root"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">properties</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">persistence-unit</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">persistence</span><span style="COLOR: #0000ff">&gt;</span></pre>
		</div>
		<p>测试类的代码:</p>
		<p> </p>
		<div>
				<pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">import jpadao.*;
import java.util.*;

<span style="COLOR: #008000">/**</span><span style="COLOR: #008000"> * JPA 测试运行代码.</span><span style="COLOR: #008000"> * @author BeanSoft</span><span style="COLOR: #008000"> *</span><span style="COLOR: #008000"> */</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">class</span> JPARun {

    <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #0000ff">void</span> main(String[] args) {
      <span style="COLOR: #008000">// 开始事务 </span>
        EntityManagerHelper.beginTransaction();
        <span style="COLOR: #008000">// 创建 DAO</span>
        MyuserDAO dao = <span style="COLOR: #0000ff">new</span> MyuserDAO();
        <span style="COLOR: #008000">// 创建实体类</span>
        Myuser user = <span style="COLOR: #0000ff">new</span> Myuser();
        user.setUsername(<span style="COLOR: #006080">"jpa test洪文"</span>);
        user.setPassword(<span style="COLOR: #006080">"jpa password"</span>);
        
        <span style="COLOR: #008000">// 保存</span>
        dao.save(user);
        
        <span style="COLOR: #008000">// 提交事务真正保存实体到数据库</span>
        EntityManagerHelper.commit();
        
        <span style="COLOR: #008000">// 列出数据库中所有对象</span>
        List&lt;Myuser&gt; result = dao.findAll();
        
        <span style="COLOR: #0000ff">for</span>(Myuser o : result) {
            System.<span style="COLOR: #0000ff">out</span>.println(o.getId());
            System.<span style="COLOR: #0000ff">out</span>.println(o.getUsername());
        }
    }

}

</pre>
		</div>
<img src ="http://www.blogjava.net/beansoft/aggbug/149998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-10-01 00:23 <a href="http://www.blogjava.net/beansoft/archive/2007/10/01/149998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>黎活明 EJB 3 实例教程 电子书加书签版下载(图文)</title><link>http://www.blogjava.net/beansoft/archive/2007/09/21/147175.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 21 Sep 2007 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/21/147175.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/147175.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/21/147175.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/147175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/147175.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如题, 基于 JBoss 的 EJB 3 实例教程.&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/09/21/147175.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/147175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-21 17:56 <a href="http://www.blogjava.net/beansoft/archive/2007/09/21/147175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何查看 JBoss 的 JNDI 树</title><link>http://www.blogjava.net/beansoft/archive/2007/09/06/143293.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Thu, 06 Sep 2007 14:55:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/06/143293.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/143293.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/06/143293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/143293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/143293.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;如何查看 JBoss 的 JNDI 树 By 刘长炯 BeanSoft@126.com Sep 4 2007 &nbsp; 首先请用任意浏览器打开地址: &nbsp; http://localhost:8080/jmx-console/HtmlAdaptor &nbsp; &nbsp; jboss _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/09/06/143293.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/143293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-06 22:55 <a href="http://www.blogjava.net/beansoft/archive/2007/09/06/143293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 5.5 开发 JBoss Entity Bean 的视频</title><link>http://www.blogjava.net/beansoft/archive/2007/09/05/143001.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 05 Sep 2007 13:21:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/05/143001.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/143001.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/05/143001.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/143001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/143001.html</trackback:ping><description><![CDATA[2007.09.04<br />By BeanSoft@126.com 
<p><br />下载此视频: <a href="http://download.gro.clinux.org/beansoft/jboss_myeclipse_entity.swf">http://download.gro.clinux.org/beansoft/jboss_myeclipse_entity.swf</a> 4.12 MB 08分31秒</p><p>下载源代码: <a href="http://download.gro.clinux.org/beansoft/MyEntityBean.zip">http://download.gro.clinux.org/beansoft/MyEntityBean.zip</a> 437KB</p><embed pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" src="http://download.gro.clinux.org/beansoft/jboss_myeclipse_entity.swf" width="800" height="600" type="application/x-shockwave-flash" bgcolor="#FFFFFF" quality="high"></embed><p></p><p>这是使用 MyEclipse 开发的一个运行成功的 JBoss 的 Entity Bean. 源代码可以导入 MyEclipse, 然后编译发布.<br />环境:<br />JDK 1.5<br />JBoss 4.2.1 GA<br />MyEclipse 5.5.1 GA<br />Derby </p><p>下载项目源码 MyEntityBean.zip<br />文件列表如下所示:<br />2007-09-05  15:33               429 .classpath<br />2007-09-05  15:29    &lt;DIR&gt;          .myeclipse<br />2007-09-05  15:29               175 .mymetadata<br />2007-09-05  15:33             1,137 .project<br />2007-09-05  15:30    &lt;DIR&gt;          .settings<br />2007-09-05  15:33    &lt;DIR&gt;          classes<br />2007-09-05  16:13               390 client.txt<br />2007-09-05  16:12               102 create.sql<br />2007-09-05  16:14               891 derby-ds.xml<br />2007-09-05  16:12           465,668 derbyclient.jar<br />2007-09-05  15:33    &lt;DIR&gt;          src </p><p>操作步骤: </p><p>首先当然是配置数据源了.<br />1. 先请把 derbyclient.jar 复制到 $JBOSS_HOME/server/default/lib/ 下, 然后重启 JBoss 服务器. </p><p>2. 在 MyEclipse 中启动 MyEclipse Derby 数据库服务器, 并创建一个测试表并插入一条数据: </p><div><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: #0000ff">create</span><span style="COLOR: #0000ff">table</span> myuser (id <span style="COLOR: #0000ff">int</span><span style="COLOR: #0000ff">primary</span><span style="COLOR: #0000ff">key</span>, username <span style="COLOR: #0000ff">varchar</span>(20));
insert <span style="COLOR: #0000ff">into</span> myuser <span style="COLOR: #0000ff">values</span>(1, <span style="COLOR: #006080">'test'</span>); </pre></div><p>3. 编写一个 DataSource 配置文件: derby-ds.xml (项目文件中已经附带), 并复制到目录 $JBOSS_HOME/server/default/deploy/ 下, 注意这些变量:<br /> &lt;jndi-name&gt;DerbyDS&lt;/jndi-name&gt; 和       &lt;connection-url&gt;jdbc:derby://localhost:1527/myeclipse;create=true&lt;/connection-url&gt; </p><p>      &lt;!-- The driver class --&gt;<br />      &lt;driver-class&gt;org.apache.derby.jdbc.ClientDriver&lt;/driver-class&gt; </p><p>      &lt;!-- The login and password --&gt;<br />      &lt;user-name&gt;app&lt;/user-name&gt;<br />      &lt;password&gt;app&lt;/password&gt; 这几个一定要和你上一步建表时候所用的数据库连接的 URL, 用户名, 密码一致. <br />      jndi-name 则是最后 EJB 所能访问到的数据源的地址.<br />      文件完整内容示例: </p><div><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #800000">xml</span><span style="COLOR: #ff0000">version</span><span style="COLOR: #0000ff">="1.0"</span><span style="COLOR: #ff0000">encoding</span><span style="COLOR: #0000ff">="UTF-8"</span>?<span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #008000">&lt;!-- The Hypersonic embedded database JCA connection factory config --&gt;</span><span style="COLOR: #008000">&lt;!-- $Id: hsqldb-ds.xml 63175 2007-05-21 16:26:06Z rrajesh $ --&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">datasources</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">local-tx-datasource</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #008000">&lt;!-- The jndi name of the DataSource, it is prefixed with java:/ --&gt;</span><span style="COLOR: #008000">&lt;!-- Datasources are not available outside the virtual machine --&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">jndi-name</span><span style="COLOR: #0000ff">&gt;</span>DerbyDS<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">jndi-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">connection-url</span><span style="COLOR: #0000ff">&gt;</span>jdbc:derby://localhost:1527/myeclipse;create=true<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">connection-url</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #008000">&lt;!-- The driver class --&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">driver-class</span><span style="COLOR: #0000ff">&gt;</span>org.apache.derby.jdbc.ClientDriver<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">driver-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #008000">&lt;!-- The login and password --&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">user-name</span><span style="COLOR: #0000ff">&gt;</span>app<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">user-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">password</span><span style="COLOR: #0000ff">&gt;</span>app<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">password</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #008000">&lt;!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">metadata</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">type-mapping</span><span style="COLOR: #0000ff">&gt;</span>Derby<span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">type-mapping</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">metadata</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">local-tx-datasource</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">datasources</span><span style="COLOR: #0000ff">&gt;</span></pre></div><p>至此, 数据源算是配置完毕. 你可以在 JBoss 的 JNDI View 中查看到这个 DerbyDS. </p><p>4. 导入项目 MyEntityBean 到 MyEclipse. </p><p>5. 将文件 $JBOSS_HOME/client/jbossall-client.jar 加入到项目的 Build Path(相当于 CLASSPATH) 中, 然后通过 MyEclipse 进行编译和部署. 部署后同样可以通过 JNDIView 来检查是否发布成功了 EJB. </p><p>6. 运行 TestMyEntityBean 来进行调用测试, 成功后可以在后台数据库看到插入的数据. </p><p>附 Bean 源码: </p><p>测试类: </p><div><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">import java.util.*;
import javax.naming.*; 

<span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">class</span> TestMyEntityBean { 

    <span style="COLOR: #008000">/**</span><span style="COLOR: #008000">     * @param args</span><span style="COLOR: #008000">     */</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #0000ff">void</span> main(String[] args) throws Exception {
        <span style="COLOR: #008000">// 手工初始化的过程</span>
        Hashtable properties = <span style="COLOR: #0000ff">new</span> Hashtable();
        <span style="COLOR: #008000">// 配置驱动程序, JBoss 特定的</span>
        properties.put(Context.INITIAL_CONTEXT_FACTORY,
                <span style="COLOR: #006080">"org.jnp.interfaces.NamingContextFactory"</span>);
        <span style="COLOR: #008000">// 配置 URL, JBoss 特定的</span>
        properties.put(Context.PROVIDER_URL, <span style="COLOR: #006080">"jnp://localhost"</span>);
        InitialContext ctx = <span style="COLOR: #0000ff">new</span> javax.naming.InitialContext(properties);
        <span style="COLOR: #008000">// 初始化, 相当于打开文件浏览器    </span>
        entity.TestuserFacadeRemote remote = (entity.TestuserFacadeRemote)ctx.lookup(<span style="COLOR: #006080">"TestuserFacade/remote"</span>);
        entity.Testuser user = <span style="COLOR: #0000ff">new</span> entity.Testuser();
        user.setId(3);
        user.setUsername(<span style="COLOR: #006080">"username3"</span>);
        remote.save(user);
        ctx.close();
    } 

} 

</pre></div><p>Bean Remote 接口: </p><div><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">package entity; 

import java.util.List;
import javax.ejb.Remote; 

<span style="COLOR: #008000">/**</span><span style="COLOR: #008000"> * Remote interface for TestuserFacade.</span><span style="COLOR: #008000"> * </span><span style="COLOR: #008000"> * @author MyEclipse Persistence Tools</span><span style="COLOR: #008000"> */</span>
@Remote
<span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">interface</span> TestuserFacadeRemote {
    <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">void</span> save(Testuser transientInstance); 

    <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">void</span> delete(Testuser persistentInstance); 

    <span style="COLOR: #0000ff">public</span> Testuser update(Testuser detachedInstance); 

    <span style="COLOR: #0000ff">public</span> Testuser findById(Integer id); 

    <span style="COLOR: #0000ff">public</span> List findByProperty(String propertyName, Object <span style="COLOR: #0000ff">value</span>);
} 

</pre></div><p>Bean 类:<br /></p><div><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">package entity; 

import java.util.List;
import java.util.logging.Level;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; 

<span style="COLOR: #008000">/**</span><span style="COLOR: #008000"> * Facade for entity Testuser.</span><span style="COLOR: #008000"> * </span><span style="COLOR: #008000"> * @see entity.Testuser</span><span style="COLOR: #008000"> * @author MyEclipse Persistence Tools</span><span style="COLOR: #008000"> */</span>
@Stateless
<span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">class</span> TestuserFacade implements TestuserFacadeRemote { 

    @PersistenceContext
    <span style="COLOR: #0000ff">private</span> EntityManager entityManager; 

    <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">void</span> save(Testuser transientInstance) {
<span style="COLOR: #008000">//        EntityManagerHelper.log("saving Testuser instance", Level.INFO, null);</span><span style="COLOR: #0000ff">try</span> {
            entityManager.persist(transientInstance);
<span style="COLOR: #008000">//            EntityManagerHelper.log("save successful", Level.INFO, null);</span>
        } <span style="COLOR: #0000ff">catch</span> (RuntimeException re) {
<span style="COLOR: #008000">//            EntityManagerHelper.log("save failed", Level.SEVERE, re);</span><span style="COLOR: #0000ff">throw</span> re;
        }
    } 

    <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">void</span> delete(Testuser persistentInstance) {
<span style="COLOR: #008000">//        EntityManagerHelper.log("deleting Testuser instance", Level.INFO, null);</span><span style="COLOR: #0000ff">try</span> {
            entityManager.remove(persistentInstance);
<span style="COLOR: #008000">//            EntityManagerHelper.log("delete successful", Level.INFO, null);</span>
        } <span style="COLOR: #0000ff">catch</span> (RuntimeException re) {
<span style="COLOR: #008000">//            EntityManagerHelper.log("delete failed", Level.SEVERE, re);</span><span style="COLOR: #0000ff">throw</span> re;
        }
    } 

    <span style="COLOR: #0000ff">public</span> Testuser update(Testuser detachedInstance) {
<span style="COLOR: #008000">//        EntityManagerHelper.log("updating Testuser instance", Level.INFO, null);</span><span style="COLOR: #0000ff">try</span> {
            Testuser result = entityManager.merge(detachedInstance);
<span style="COLOR: #008000">//            EntityManagerHelper.log("update successful", Level.INFO, null);</span><span style="COLOR: #0000ff">return</span> result;
        } <span style="COLOR: #0000ff">catch</span> (RuntimeException re) {
<span style="COLOR: #008000">//            EntityManagerHelper.log("update failed", Level.SEVERE, re);</span><span style="COLOR: #0000ff">throw</span> re;
        }
    } 

    <span style="COLOR: #0000ff">public</span> Testuser findById(Integer id) {
<span style="COLOR: #008000">//        EntityManagerHelper.log("finding Testuser instance with id: " + id,</span><span style="COLOR: #008000">//                Level.INFO, null);</span><span style="COLOR: #0000ff">try</span> {
            Testuser instance = entityManager.find(Testuser.<span style="COLOR: #0000ff">class</span>, id);
            <span style="COLOR: #0000ff">return</span> instance;
        } <span style="COLOR: #0000ff">catch</span> (RuntimeException re) {
<span style="COLOR: #008000">//            EntityManagerHelper.log("find failed", Level.SEVERE, re);</span><span style="COLOR: #0000ff">throw</span> re;
        }
    } 

    @SuppressWarnings(<span style="COLOR: #006080">"unchecked"</span>)
    <span style="COLOR: #0000ff">public</span> List&lt;Testuser&gt; findByProperty(String propertyName, Object <span style="COLOR: #0000ff">value</span>) {
<span style="COLOR: #008000">//        EntityManagerHelper.log("finding Testuser instance with property: "</span><span style="COLOR: #008000">//                + propertyName + ", value: " + value, Level.INFO, null);</span><span style="COLOR: #0000ff">try</span> {
            String queryString = <span style="COLOR: #006080">"select model from Testuser model where model."</span>
                    + propertyName + <span style="COLOR: #006080">"= :propertyValue"</span>;
            <span style="COLOR: #0000ff">return</span> entityManager.createQuery(queryString).setParameter(
                    <span style="COLOR: #006080">"propertyValue"</span>, <span style="COLOR: #0000ff">value</span>).getResultList();
        } <span style="COLOR: #0000ff">catch</span> (RuntimeException re) {
<span style="COLOR: #008000">//            EntityManagerHelper.log("find by property name failed",</span><span style="COLOR: #008000">//                    Level.SEVERE, re);</span><span style="COLOR: #0000ff">throw</span> re;
        }
    } 

    @SuppressWarnings(<span style="COLOR: #006080">"unchecked"</span>)
    <span style="COLOR: #0000ff">public</span> List&lt;Testuser&gt; findAll() {
<span style="COLOR: #008000">//        EntityManagerHelper.log("finding all Testuser instances", Level.INFO,</span><span style="COLOR: #008000">//                null);</span><span style="COLOR: #0000ff">try</span> {
            String queryString = <span style="COLOR: #006080">"select model from Testuser model"</span>;
            <span style="COLOR: #0000ff">return</span> entityManager.createQuery(queryString).getResultList();
        } <span style="COLOR: #0000ff">catch</span> (RuntimeException re) {
<span style="COLOR: #008000">//            EntityManagerHelper.log("find all failed", Level.SEVERE, re);</span><span style="COLOR: #0000ff">throw</span> re;
        }
    }
} 

</pre></div><p>Entity 类:<br /></p><div><pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">package entity; 

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table; 

<span style="COLOR: #008000">/**</span><span style="COLOR: #008000"> * Testuser generated by MyEclipse Persistence Tools</span><span style="COLOR: #008000"> */</span>
@Entity
@Table(name = <span style="COLOR: #006080">"TESTUSER"</span>, schema = <span style="COLOR: #006080">"APP"</span>, uniqueConstraints = {})
<span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">class</span> Testuser implements java.io.Serializable { 

    <span style="COLOR: #008000">// Fields </span><span style="COLOR: #0000ff">private</span> Integer id; 

    <span style="COLOR: #0000ff">private</span> String username; 

    <span style="COLOR: #008000">// Constructors </span><span style="COLOR: #008000">/** default constructor */</span><span style="COLOR: #0000ff">public</span> Testuser() {
    } 

    <span style="COLOR: #008000">/** minimal constructor */</span><span style="COLOR: #0000ff">public</span> Testuser(Integer id) {
        <span style="COLOR: #0000ff">this</span>.id = id;
    } 

    <span style="COLOR: #008000">/** full constructor */</span><span style="COLOR: #0000ff">public</span> Testuser(Integer id, String username) {
        <span style="COLOR: #0000ff">this</span>.id = id;
        <span style="COLOR: #0000ff">this</span>.username = username;
    } 

    <span style="COLOR: #008000">// Property accessors</span>
    @Id
    @Column(name = <span style="COLOR: #006080">"ID"</span>, unique = <span style="COLOR: #0000ff">true</span>, nullable = <span style="COLOR: #0000ff">false</span>, insertable = <span style="COLOR: #0000ff">true</span>, updatable = <span style="COLOR: #0000ff">true</span>)
    <span style="COLOR: #0000ff">public</span> Integer getId() {
        <span style="COLOR: #0000ff">return</span><span style="COLOR: #0000ff">this</span>.id;
    } 

    <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">void</span> setId(Integer id) {
        <span style="COLOR: #0000ff">this</span>.id = id;
    } 

    @Column(name = <span style="COLOR: #006080">"USERNAME"</span>, unique = <span style="COLOR: #0000ff">false</span>, nullable = <span style="COLOR: #0000ff">true</span>, insertable = <span style="COLOR: #0000ff">true</span>, updatable = <span style="COLOR: #0000ff">true</span>, length = 20)
    <span style="COLOR: #0000ff">public</span> String getUsername() {
        <span style="COLOR: #0000ff">return</span><span style="COLOR: #0000ff">this</span>.username;
    } 

    <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">void</span> setUsername(String username) {
        <span style="COLOR: #0000ff">this</span>.username = username;
    } 

}



</pre></div><img src ="http://www.blogjava.net/beansoft/aggbug/143001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-05 21:21 <a href="http://www.blogjava.net/beansoft/archive/2007/09/05/143001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整理: MyEclipse 5.5 实战教程</title><link>http://www.blogjava.net/beansoft/archive/2007/09/04/142716.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Tue, 04 Sep 2007 10:11:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/04/142716.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/142716.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/04/142716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/142716.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/142716.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开发 Servlet, Struts, UML, Spring, Hibernate 等&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/09/04/142716.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/142716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-04 18:11 <a href="http://www.blogjava.net/beansoft/archive/2007/09/04/142716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java EE 5 平台简介与基于 Netbeans 的相关开发(PDF)</title><link>http://www.blogjava.net/beansoft/archive/2007/09/03/142277.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 03 Sep 2007 05:33:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/03/142277.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/142277.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/03/142277.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/142277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/142277.html</trackback:ping><description><![CDATA[<p>是整理自 netbeans.org 多篇网页的资料, 供感兴趣的朋友阅读参考.</p> <p><a href="http://download.gro.clinux.org/beansoft/JavaEE5_Intro_Dev.pdf">http://download.gro.clinux.org/beansoft/JavaEE5_Intro_Dev.pdf</a>&nbsp;603KB</p> <p>内容列表:</p> <p><a href="#_Toc176589135">Java EE 5 平台简介与基于 Netbeans 的相关开发........................................................ 1</a> <p><a href="#_Toc176589136">一. Java EE 5 技术简介................................................................................................. 3</a> <p><a href="#_Toc176589137">标注取代部署描述符................................................................................................. 3</a> <p><a href="#_Toc176589138">简化的 EJB 软件开发.............................................................................................. 4</a> <p><a href="#_Toc176589139">使用依赖关系注入来访问资源................................................................................. 5</a> <p><a href="#_Toc176589140">Java 持久性 API 模型............................................................................................. 5</a> <p><a href="#_Toc176589141">Web 服务................................................................................................................... 6</a> <p><a href="#_Toc176589142">二.Java EE 5 平台中的 Java 持久性........................................................................... 7</a> <p><a href="#_Toc176589143">先决条件..................................................................................................................... 7</a> <p><a href="#_Toc176589144">本教程所需的软件..................................................................................................... 8</a> <p><a href="#_Toc176589145">教程练习..................................................................................................................... 8</a> <p><a href="#_Toc176589146">建立 Web 应用程序项目............................................................................................ 8</a> <p><a href="#_Toc176589147">小结............................................................................................................................. 8</a> <p><a href="#_Toc176589148">创建持久性单元............................................................................................................. 9</a> <p><a href="#_Toc176589149">创建持久性单元......................................................................................................... 9</a> <p><a href="#_Toc176589150">小结........................................................................................................................... 10</a> <p><a href="#_Toc176589151">创建实体类................................................................................................................... 10</a> <p><a href="#_Toc176589152">创建 Animal 实体类............................................................................................ 10</a> <p><a href="#_Toc176589153">创建 Pavilion 实体类....................................................................................... 11</a> <p><a href="#_Toc176589154">小结........................................................................................................................... 12</a> <p><a href="#_Toc176589155">创建 Web 接口.......................................................................................................... 12</a> <p><a href="#_Toc176589156">运行项目....................................................................................................................... 13</a> <p><a href="#_Toc176589157">小结........................................................................................................................... 15</a> <p><a href="#_Toc176589158">疑难解答....................................................................................................................... 15</a> <p><a href="#_Toc176589159">使用“新建 - 通过实体类创建 JSF 页”向导时的问题....................................... 15</a> <p><a href="#_Toc176589160">三. EJB 3.0 Enterprise Beans........................................................................................ 15</a> <p><a href="#_Toc176589161">先决条件................................................................................................................... 15</a> <p><a href="#_Toc176589162">本教程所需的软件................................................................................................... 15</a> <p><a href="#_Toc176589163">教程练习................................................................................................................... 16</a> <p><a href="#_Toc176589164">建立企业应用程序项目............................................................................................... 16</a> <p><a href="#_Toc176589165">创建企业应用程序................................................................................................... 16</a> <p><a href="#_Toc176589166">小结........................................................................................................................... 16</a> <p><a href="#_Toc176589167">对 EJB 模块进行编码................................................................................................ 16</a> <p><a href="#_Toc176589168">创建持久性单元....................................................................................................... 16</a> <p><a href="#_Toc176589169">创建 NewsEntity 实体类.................................................................................. 17</a> <p><a href="#_Toc176589170">创建 NewMessage 消息驱动 Bean.................................................................. 18</a> <p><a href="#_Toc176589171">创建会话 Bean....................................................................................................... 20</a> <p><a href="#_Toc176589172">小结........................................................................................................................... 20</a> <p><a href="#_Toc176589173">对 Web 模块进行编码.............................................................................................. 20</a> <p><a href="#_Toc176589174">创建 ListNews Servlet..................................................................................... 20</a> <p><a href="#_Toc176589175">创建 PostMessage Servlet............................................................................. 21</a> <p><a href="#_Toc176589176">运行项目....................................................................................................................... 23</a> <p><a href="#_Toc176589177">疑难解答....................................................................................................................... 24</a> <p><a href="#_Toc176589178">JMS 资源问题......................................................................................................... 24</a> <p><a href="#_Toc176589179">四. Java EE 5 中的 Web 服务 (JAX-WS)................................................................ 25</a> <p><a href="#_Toc176589180">本教程所需的软件................................................................................................... 25</a> <p><a href="#_Toc176589181">教程练习................................................................................................................... 26</a> <p><a href="#_Toc176589182">安装并配置教程环境................................................................................................... 26</a> <p><a href="#_Toc176589183">创建 Web 服务.......................................................................................................... 26</a> <p><a href="#_Toc176589184">选择容器................................................................................................................... 26</a> <p><a href="#_Toc176589185">通过 Java 类创建 Web 服务............................................................................. 27</a> <p><a href="#_Toc176589186">小结........................................................................................................................... 27</a> <p><a href="#_Toc176589187">对 Web 服务进行编码.............................................................................................. 27</a> <p><a href="#_Toc176589188">将业务逻辑添加到 Web 服务.............................................................................. 28</a> <p><a href="#_Toc176589189">小结........................................................................................................................... 28</a> <p><a href="#_Toc176589190">部署并测试 Web 服务.............................................................................................. 28</a> <p><a href="#_Toc176589191">小结........................................................................................................................... 30</a> <p><a href="#_Toc176589192">使用 Web 服务.......................................................................................................... 30</a> <p><a href="#_Toc176589193">客户端 1：Java SE 应用程序中的 Java 类................................................... 31</a> <p><a href="#_Toc176589194">客户端 2：Web 应用程序中的 Servlet........................................................... 31</a> <p><a href="#_Toc176589195">客户端 3：Web 应用程序中的 JSP 页............................................................ 34</a> <p><a href="#_Toc176589196">五. 比较 Java EE 5 平台和 J2EE 1.4 平台............................................................. 35</a> <p><a href="#_Toc176589197">先决条件................................................................................................................... 35</a> <p><a href="#_Toc176589198">本教程所需的软件................................................................................................... 35</a> <p><a href="#_Toc176589199">教程练习................................................................................................................... 35</a> <p><a href="#_Toc176589200">为 IDE 配置应用服务器............................................................................................ 35</a> <p><a href="#_Toc176589201">小结........................................................................................................................... 36</a> <p><a href="#_Toc176589202">建立 Web 应用程序项目.......................................................................................... 36</a> <p><a href="#_Toc176589203">小结........................................................................................................................... 36</a> <p><a href="#_Toc176589204">对 Web 应用程序进行编码...................................................................................... 36</a> <p><a href="#_Toc176589205">管理持久性............................................................................................................... 37</a> <p><a href="#_Toc176589206">创建实体类............................................................................................................... 38</a> <p><a href="#_Toc176589207">对 Servlet 进行编码............................................................................................ 39</a> <p><a href="#_Toc176589208">运行项目....................................................................................................................... 42</a> <p><a href="#_Toc176589209">小结 42</a><img src ="http://www.blogjava.net/beansoft/aggbug/142277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-03 13:33 <a href="http://www.blogjava.net/beansoft/archive/2007/09/03/142277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JPA 基础教程(PDF)</title><link>http://www.blogjava.net/beansoft/archive/2007/09/03/142270.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 03 Sep 2007 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/03/142270.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/142270.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/03/142270.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/142270.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/142270.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/09/03/142270.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/142270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-03 13:12 <a href="http://www.blogjava.net/beansoft/archive/2007/09/03/142270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3基础教程(PDF版本)</title><link>http://www.blogjava.net/beansoft/archive/2007/09/03/142234.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 03 Sep 2007 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/03/142234.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/142234.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/03/142234.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/142234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/142234.html</trackback:ping><description><![CDATA[<h3><a>EJB3</a>基础教程 PDF 版本下载:</h3> <h3><a href="http://download.gro.clinux.org/beansoft/EJB3_Bacic.pdf">http://download.gro.clinux.org/beansoft/EJB3_Bacic.pdf</a>&nbsp;448KB</h3> <p>作者: <a href="mailto:beansoft@126.com">beansoft@126.com</a> 刘长炯  <p>日期: 2007-9-3  <p>来源: <a href="http://www.blogjava.net/beansoft/">http://www.blogjava.net/beansoft/</a>  <p><b>声明</b>  <p>本文内容根据多篇网络文章整理而成, 如有侵权, 请与本人联系.  <p>本文内容仅供参考, 不得用于商业目的.  <p>转载请著名作者和出处.  <p>此文章原是本人所做的  <p><a href="http://www.blogjava.net/beansoft/archive/2007/05/07/115738.html">Java EE 5 入门 PPT 讲解有声视频 - 第二部分</a> <p><a href="http://www.blogjava.net/beansoft/archive/2007/05/07/115670.html">Java EE 5 入门 PPT 讲解有声视频 - 第一部分</a> <p>的配套资料, 现分享给大家.</p> <p>目录  <p><a href="#_Toc176580331">EJB3基础教程................................................................................................................... 1</a>  <p><a href="#_Toc176580332">备注: 一些服务器 与 EJB 3, JPA................................................................................... 5</a>  <p><a href="#_Toc176580333">第一部分&nbsp;&nbsp; EJB3介绍:Overview...................................................................................... 5</a>  <p><a href="#_Toc176580334">1.1&nbsp;&nbsp; EJB 3和EJB 2.1的区别.................................................................................. 6</a>  <p><a href="#_Toc176580335">1.2&nbsp;&nbsp;&nbsp; EJB 3中的元数据批注:Annotation................................................................. 7</a>  <p><a href="#_Toc176580336">第二部分&nbsp;Entity介绍......................................................................................................... 7</a>  <p><a href="#_Toc176580337">2.1&nbsp;&nbsp;&nbsp; 第一个Entity Bean:HelloWorld....................................................................... 7</a>  <p><a href="#_Toc176580338">2.2&nbsp;&nbsp;&nbsp; 解说Entity........................................................................................................ 9</a>  <p><a href="#_Toc176580339">2.3&nbsp;&nbsp;&nbsp; 定义对Entity中属性变量的访问................................................................... 9</a>  <p><a href="#_Toc176580340">2.4&nbsp;&nbsp;&nbsp; 主键和实体标识（Primary Key and Entity Identity)................................... 11</a>  <p><a href="#_Toc176580341">第三部分 持久化.............................................................................................................. 13</a>  <p><a href="#_Toc176580342">3.1&nbsp;&nbsp;&nbsp; 操作持久化Entity.......................................................................................... 13</a>  <p><a href="#_Toc176580343">3.2&nbsp;&nbsp;&nbsp; 配置和获得EntityManager............................................................................ 13</a>  <p><a href="#_Toc176580344">3.3&nbsp;&nbsp;&nbsp; Entity的生命周期和状态.............................................................................. 14</a>  <p><a href="#_Toc176580345">3.4&nbsp;&nbsp;&nbsp; 持久化Entity(Persist)..................................................................................... 15</a>  <p><a href="#_Toc176580346">3.5&nbsp;&nbsp;&nbsp; 获取Entity...................................................................................................... 17</a>  <p><a href="#_Toc176580347">3.6&nbsp;&nbsp;&nbsp; 新Entity.......................................................................................................... 18</a>  <p><a href="#_Toc176580348">3.7&nbsp;&nbsp;&nbsp; 删除Entity...................................................................................................... 18</a>  <p><a href="#_Toc176580349">3.8&nbsp;&nbsp;&nbsp; 脱离/附合(Detach/Merge)............................................................................... 18</a>  <p><a href="#_Toc176580350">第四部分 &nbsp;EJB3 QL查询................................................................................................ 19</a>  <p><a href="#_Toc176580351">4.1&nbsp;&nbsp;&nbsp; Query接口...................................................................................................... 19</a>  <p><a href="#_Toc176580352">4.2&nbsp;&nbsp;&nbsp; 简单查询......................................................................................................... 21</a>  <p><a href="#_Toc176580353">4.3&nbsp;&nbsp;&nbsp; 使用参数查询................................................................................................. 21</a>  <p><a href="#_Toc176580354">4.4&nbsp;&nbsp;&nbsp; 排序(order by)................................................................................................. 22</a>  <p><a href="#_Toc176580355">4.5&nbsp;&nbsp;&nbsp; 查询部分属性................................................................................................. 22</a>  <p><a href="#_Toc176580356">4.6&nbsp;&nbsp;&nbsp;&nbsp; 查询中使用构造器(Constructor).................................................................. 23</a>  <p><a href="#_Toc176580357">4.7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 聚合查询(Aggregation)................................................................................ 23</a>  <p><a href="#_Toc176580358">4.8&nbsp;&nbsp;&nbsp;&nbsp; 关联(join)....................................................................................................... 24</a>  <p><a href="#_Toc176580359">4.9&nbsp;&nbsp;&nbsp; 比较Entity...................................................................................................... 26</a>  <p><a href="#_Toc176580360">4.10&nbsp;&nbsp;&nbsp; 批量更新(Batch Update).............................................................................. 26</a>  <p><a href="#_Toc176580361">4.11&nbsp;&nbsp;&nbsp; 批量删除(Batch Remove)............................................................................. 26</a>  <p><a href="#_Toc176580362">4.12&nbsp;&nbsp;&nbsp; 使用操作符NOT.......................................................................................... 27</a>  <p><a href="#_Toc176580363">4.13&nbsp;&nbsp;&nbsp; 使用操作符BETWEEN............................................................................... 27</a>  <p><a href="#_Toc176580364">4.14&nbsp;&nbsp;&nbsp; 使用操作符IN............................................................................................. 27</a>  <p><a href="#_Toc176580365">4.15&nbsp;&nbsp;&nbsp; 使用操作符LIKE........................................................................................ 27</a>  <p><a href="#_Toc176580366">4.16&nbsp;&nbsp; 使用操作符IS NULL................................................................................... 28</a>  <p><a href="#_Toc176580367">4.17&nbsp;&nbsp;&nbsp; 使用操作符IS EMPTY................................................................................ 28</a>  <p><a href="#_Toc176580368">4.18&nbsp;&nbsp;&nbsp; 使用操作符EXISTS.................................................................................... 29</a>  <p><a href="#_Toc176580369">4.19&nbsp;&nbsp;&nbsp; 使用操作符ALL/SOME/ANY.................................................................... 29</a>  <p><a href="#_Toc176580370">4.20&nbsp;&nbsp;&nbsp;&nbsp; 字符串函数.................................................................................................. 30</a>  <p><a href="#_Toc176580371">4.21&nbsp;&nbsp; 计算函数........................................................................................................ 30</a>  <p><a href="#_Toc176580372">4.22&nbsp;&nbsp; 子查询............................................................................................................ 31</a>  <p><a href="#_Toc176580373">4.23&nbsp;&nbsp;&nbsp; 原生SQL查询............................................................................................. 31</a>  <p><a href="#_Toc176580374">第五部分 映射............................................................................................................... 32</a>  <p><a href="#_Toc176580375">5.1&nbsp;&nbsp;&nbsp; 一对一映射..................................................................................................... 32</a>  <p><a href="#_Toc176580376">5.2&nbsp;&nbsp; 一对多映射...................................................................................................... 33</a>  <p><a href="#_Toc176580377">5.3&nbsp;&nbsp;&nbsp;&nbsp; 多对多映射.................................................................................................... 34</a>  <p><a href="#_Toc176580378">第六部分 继承(Inheritance strategy)............................................................................. 34</a>  <p><a href="#_Toc176580379">6.1每个类分层结构一张表(Table per class hierarchy)........................................... 35</a>  <p><a href="#_Toc176580380">第七部分 一些重要的关键字和元数据.......................................................................... 35</a>  <p><a href="#_Toc176580381">7.1&nbsp;&nbsp; Table................................................................................................................. 35</a>  <p><a href="#_Toc176580382">7.2&nbsp;&nbsp;&nbsp; SecondaryTable............................................................................................... 36</a>  <p><a href="#_Toc176580383">7.3&nbsp;&nbsp; SecondaryTables............................................................................................... 36</a>  <p><a href="#_Toc176580384">7.4&nbsp;&nbsp; UniqueConstraint............................................................................................. 37</a>  <p><a href="#_Toc176580385">7.5&nbsp;&nbsp; Column............................................................................................................. 37</a>  <p><a href="#_Toc176580386">7.6&nbsp;&nbsp;&nbsp; JoinColumn...................................................................................................... 38</a>  <p><a href="#_Toc176580387">7.7&nbsp;&nbsp;&nbsp; JoinColumns.................................................................................................... 38</a>  <p><a href="#_Toc176580388">7.8&nbsp;&nbsp;&nbsp; Id..................................................................................................................... 39</a>  <p><a href="#_Toc176580389">7.9&nbsp;&nbsp;&nbsp; IdClass............................................................................................................. 40</a>  <p><a href="#_Toc176580390">7.10&nbsp;&nbsp;&nbsp; MapKey......................................................................................................... 40</a>  <p><a href="#_Toc176580391">7.11&nbsp;&nbsp; OrderBy.......................................................................................................... 41</a>  <p><a href="#_Toc176580392">7.12&nbsp;&nbsp; PrimaryKeyJoinColumn................................................................................. 41</a>  <p><a href="#_Toc176580393">7.13&nbsp;&nbsp;&nbsp; PrimaryKeyJoinColumns............................................................................... 42</a>  <p><a href="#_Toc176580394">7.14&nbsp;&nbsp;&nbsp; Transient........................................................................................................ 43</a>  <p><a href="#_Toc176580395">7.15&nbsp;&nbsp;&nbsp; Version.......................................................................................................... 44</a>  <p><a href="#_Toc176580396">7.16&nbsp;&nbsp;&nbsp; Lob................................................................................................................ 44</a>  <p><a href="#_Toc176580397">7.17&nbsp;&nbsp;&nbsp; JoinTable........................................................................................................ 44</a>  <p><a href="#_Toc176580398">7.18&nbsp;&nbsp;&nbsp; TableGenerator.............................................................................................. 45</a>  <p><a href="#_Toc176580399">7.19&nbsp;&nbsp;&nbsp; SequenceGenerator........................................................................................ 46</a>  <p><a href="#_Toc176580400">7.20&nbsp;&nbsp;&nbsp; DiscriminatorColumn.................................................................................... 46</a>  <p><a href="#_Toc176580401">附录:.................................................................................................................................. 47</a>  <p><a href="#_Toc176580402">1. EJB 3.0持久化规范之实体类的要求................................................................. 47</a>  <p><a href="#_Toc176580403">1、持久化字段和属性..................................................................................... 48</a>  <p><a href="#_Toc176580404">2、创建实体实例............................................................................................. 49</a>  <p><a href="#_Toc176580405">3、主键和实体唯一标识................................................................................. 49</a>  <p><a href="#_Toc176580406">4、可嵌入类..................................................................................................... 50</a>  <p><a href="#_Toc176580407">5、映射非关系字段或属性的缺省值............................................................. 50</a>  <p><a href="#_Toc176580408">6、实体关系..................................................................................................... 51</a>  <p><a href="#_Toc176580409">7、可嵌入类..................................................................................................... 52</a>  <p><a href="#_Toc176580410">8、映射非关系型字段或属性的缺省规则..................................................... 52</a>  <p><a href="#_Toc176580411">2. EJB 3 快速参考手册........................................................................................... 52</a>  <p><a href="#_Toc176580412">1．依赖注入(dependency injection)................................................................ 52</a>  <p><a href="#_Toc176580413">2．实体Bean.................................................................................................... 53</a>  <p><a href="#_Toc176580414">3．复合主键(Composite Primary Key)............................................................ 54</a>  <p><a href="#_Toc176580415">4．持久化实体管理器EntityManager............................................................ 55</a>  <p><a href="#_Toc176580416">5．会话Bean.................................................................................................... 55</a>  <p><a href="#_Toc176580417">如何改变Session Bean 的JNDI 名称：............................................... 56</a>  <p><a href="#_Toc176580418">Session Bean 的生命周期:....................................................................... 56</a>  <p><a href="#_Toc176580419">拦截器(Interceptor):.................................................................................. 57</a>  <p><a href="#_Toc176580420">6．关系/对象映射............................................................................................ 57</a>  <p><a href="#_Toc176580421">A．一对多：............................................................................................ 57</a>  <p><a href="#_Toc176580422">B．多对一：............................................................................................ 58</a>  <p><a href="#_Toc176580423">C．一对一：............................................................................................ 58</a>  <p><a href="#_Toc176580424">D．多对多：............................................................................................ 59</a>  <p><a href="#_Toc176580425">7．查询............................................................................................................. 59</a>  <p><a href="#_Toc176580426">8．事务管理服务............................................................................................. 61</a>  <p><a href="#_Toc176580427">9．Entity的生命周期和状态.......................................................................... 62</a></p> <p>&nbsp;</p> <p>参考资料:  <p>EJB 3.0 规范 <a href="http://www.jcp.org/en/jsr/detail?id=220">http://www.jcp.org/en/jsr/detail?id=220</a> <p>Enterprise Java Community: Simplifying EJB Development with EJB 3.0 <p><a href="http://www.theserverside.com/tt/articles/article.tss?l=SimplifyingEJB3">http://www.theserverside.com/tt/articles/article.tss?l=SimplifyingEJB3</a> <p>使用 EJB 3.0 Java Persistence API 设计企业应用程序 <a href="http://www.ibm.com/developerworks/cn/java/j-ejb3jpa.html">http://www.ibm.com/developerworks/cn/java/j-ejb3jpa.html</a> <p>佛山软件技术网 《EJB3.0实例教程》官方网 <p><a href="http://www.foshanshop.net/">http://www.foshanshop.net/</a></p><img src ="http://www.blogjava.net/beansoft/aggbug/142234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-03 11:08 <a href="http://www.blogjava.net/beansoft/archive/2007/09/03/142234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse  5.5 + JPA + Toplink 开发视频: 开发并运行第一个 JPA 项目</title><link>http://www.blogjava.net/beansoft/archive/2007/08/31/141797.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 31 Aug 2007 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/08/31/141797.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/141797.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/08/31/141797.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/141797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/141797.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 仅供 MyEclipse + JPA 入门用&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/08/31/141797.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/141797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-08-31 17:34 <a href="http://www.blogjava.net/beansoft/archive/2007/08/31/141797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse  5.5 + JBoss 开发视频: 配置,开发并运行第一个 EJB 3 项目</title><link>http://www.blogjava.net/beansoft/archive/2007/08/31/141695.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 31 Aug 2007 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/08/31/141695.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/141695.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/08/31/141695.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/141695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/141695.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 和初学 Java EE 的朋友分享一下, 仅供参考.&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/08/31/141695.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/141695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-08-31 12:53 <a href="http://www.blogjava.net/beansoft/archive/2007/08/31/141695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BeanSoft 制作的 Java 学习视频集 - 会一直增加</title><link>http://www.blogjava.net/beansoft/archive/2007/08/11/136012.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 11 Aug 2007 05:32:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/08/11/136012.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/136012.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/08/11/136012.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/136012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/136012.html</trackback:ping><description><![CDATA[<p>做了/收集了不少学习视频, 现在整理一下链接便于自己复习和参考用. 一个个找太麻烦了.</p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/09/19/146315.html">MyEclipse 5.5 开发 Struts 1.2 简单登录的入门视频(有声+源码)</a>&nbsp; 2007-09-19 01:50</p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/09/02/142046.html">视频讲解: Netbeans 5.5 配置显示中文 JavaDoc</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/09/01/141995.html">入门视频: 使用 MyEclipse 开发 Swing 应用</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/08/31/141845.html">河南话讲解 MyEclipse + Tomcat Servlet 开发入门视频</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/08/31/141797.html">MyEclipse + JPA + Toplink 开发视频: 开发并运行第一个 JPA 项目</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/08/31/141695.html">MyEclipse + JBoss 开发视频: 配置,开发并运行第一个 EJB 3 项目</a></p> <p><a class="postTitle2" id="_45f7b17fef0_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/29/140937.html"><font color="#1a8bc8">JDBC 入门视频: 配置 SQL Explorer 插件, ODBC 数据源, 建表, 用 JDBC 读取数据库</font></a> </p> <p><font color="#1a8bc8"></font><a href="http://www.blogjava.net/beansoft/archive/2007/08/28/140353.html">Tomcat 入门视频: 下载, 运行, 第一个 HelloWorld</a></p><a class="postTitle2" id="_45f7b17fef0_HomePageDays_DaysList_ctl02_DayItem_DayList_ctl06_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/27/139836.html"> <p></a><a class="postTitle2" id="_45f7b17fef0_HomePageDays_DaysList_ctl02_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/27/140023.html"><font color="#1a8bc8">Eclipse 入门视频: 下载, 运行, 第一个 HelloWorld</font></a><a class="postTitle2" id="_45f7b17fef0_HomePageDays_DaysList_ctl02_DayItem_DayList_ctl06_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/27/139836.html"> </a></p> <p><a class="postTitle2" id="_45f7b17fef0_HomePageDays_DaysList_ctl02_DayItem_DayList_ctl02_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/27/139901.html"><font color="#1a8bc8">Java 入门视频: 下载, 安装 JDK, 配置环境变量, HelloWorld</font></a><a class="postTitle2" id="_45f7b17fef0_HomePageDays_DaysList_ctl02_DayItem_DayList_ctl06_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/27/139836.html"><font color="#1a8bc8"> </p></font> <p><font color="#1a8bc8">推荐给初学者的 Java 视频</font></a> </p> <p><a class="postTitle2" id="_217969d9afe_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/23/138787.html"><u><font color="#800080">Netbeans 6.0 M10 开发 UML 项目的入门视频</font></u></a> </p> <p><a class="postTitle2" id="_217969d9afe_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl02_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/23/138785.html"><font color="#1a8bc8">MyEclipse UML 入门视频2 - 根据代码反向工程生成 UML</font></a> </p> <p><a class="postTitle2" id="_217969d9afe_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/21/138445.html"><font color="#1a8bc8">MyEclipse UML 入门视频</font></a> </p> <p><font color="#1a8bc8"><a class="postTitle2" id="homepage1_HomePageDays_ctl00_DayList_ctl06_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/12/136164.html">MyEclipse + Tomcat 开发视频: 下载,安装,配置,开发并运行Web项目</a><a class="postTitle2" id="_45f7b17fef0_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl06_TitleUrl" href="http://www.blogjava.net/beansoft/archive/2007/08/28/140353.html"> </a></font></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/08/08/135310.html">小电影: 用 MyEclipse 开发 Spring + Struts + Hibernate 的总结与操作视频(9分钟) </a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/08/06/134571.html">小电影: 用 MyEclipse 开发 Spring + Struts 的总结与操作视频(7分钟)</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/08/03/134327.html">用MyEclipse 4 分钟开发Spring整合Hibernate应用的视频</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/07/24/132052.html">在 Linux 上配置并运行 Tomcat 服务器(入门整理)(视频)</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/07/16/130521.html">Java 初学者入门视频: 下载 JDK 和 Netbeans</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/06/15/124514.html">Eclipse 配置显示中文 javadoc 的视频</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/06/14/124274.html">Hibernate 英文 PPT 及 MyEclipse 操作视频整理</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/06/12/123627.html">推荐一点 MyEclipse 的官方Spring,Hibernate入门视频教程</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/05/21/118869.html">Netbeans 5.5 + JPA + Hibernate 3 + Tomcat 实例有声视频</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/05/14/117350.html">推荐一些AJAX视频和文章</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/05/09/116258.html">夏昕 &lt;&lt;Spring 开发指南入门&gt;&gt;1 分钟上手教程视频(不带解说)</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/05/08/115878.html">AJAX 入门培训 PPT 及示例代码</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/05/07/115738.html">Java EE 5 入门 PPT 讲解有声视频 - 第二部分</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/05/07/115670.html">Java EE 5 入门 PPT 讲解有声视频 - 第一部分</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/04/30/114763.html">Java EE 5 入门视频 - 在 JSF 中使用 JPA</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/04/30/114752.html">Jigloo 开发 Swing 的入门教程</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/04/24/113110.html">视频:使用 Netbeans 5.5可视化开发 JSF 的简单注册流程</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/04/23/113002.html">Java EE 5 入门视频 - 在 J2SE 中使用 JPA</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2007/01/18/94583.html">Navicat管理Mysql 的视频</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2006/12/04/85308.html">Weblogic 9 之旅图文视频 2 - Portal 开发环境设置, 简单的Portal 开发(视频已贴上)</a></p> <p><a href="http://www.blogjava.net/beansoft/archive/2006/11/27/83767.html">用 JProfiler4 调优 Weblogic 和 Tomcat 的视频(原创)</a></p><img src ="http://www.blogjava.net/beansoft/aggbug/136012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-08-11 13:32 <a href="http://www.blogjava.net/beansoft/archive/2007/08/11/136012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB 3 容器元数据注入的原理代码</title><link>http://www.blogjava.net/beansoft/archive/2007/07/27/132781.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 27 Jul 2007 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/07/27/132781.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/132781.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/07/27/132781.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/132781.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/132781.html</trackback:ping><description><![CDATA[<p>我们学习 EJB 3 的时候, 经常会看到这样的代码:</p> <p>@TimerService</p> <blockquote> <p>private&nbsp;TimerService timerService;</p></blockquote> <p>然后书上会告诉你容器会实例化 bean 然后注入对应的值, 但是到底怎么实现的呢? 首先是 private 的变量啊. 经过一番研究, BeanSoft 终于实现了自己的元数据注入微容器(呵呵, jdon 的最爱啊)原型代码:</p> <p>首先是调用, 肯定不能 new 了, 否则容器就无用武之地了.</p> <blockquote> <p>package metadataDI.test;  <p>import metadataDI.container.MetadataDIContainer;<br>import metadataDI.entity.UserBean;  <p>/**<br>* @author Administrator<br>*<br>*/<br>public class TestMetadataDIContainer {  <p>public static void main(String[] args) {<br>MetadataDIContainer container = new MetadataDIContainer();<br>UserBean bean = (UserBean) container.getUserBean();<br>System.out.println("被容器实例化过的 Bean 的 name 属性值是: " + bean.getName());<br>}  <p>}</p></blockquote> <p>先 show 一下运行结果: <p>&nbsp; <p>容器已经加载了 Bean 类<br>容器已经实例化了 Bean 类<br>容器将检查类里面的所有变量看是否有 @UserName 标注<br>列出类里面的所有变量<br>private java.lang.String name;<br>一共1个元数据注释<br>发现了 @UserName 标注, 将给实例的该字段设置值(注入值).<br>列出类里面的所有变量<br>private java.lang.String password;<br>一共0个元数据注释<br>被容器实例化过的 Bean 的 name 属性值是: 容器注入的用户名 <p>Bean: <blockquote> <p>&nbsp; <p>/**<br>* <br>*/<br>package metadataDI.entity;  <p>import metadataDI.annotation.UserName;  <p>/**<br>* 用户类.<br>*/<br>public class UserBean {<br>/**<br>* 名称变量<br>*/<br>@UserName <br>private String name;  <p>private String password; <p>public UserBean() {<br>} <br>/**<br>* @return the password<br>*/<br>public String getPassword() {<br>return password;<br>}  <p>/**<br>* @param password the password to set<br>*/<br>public void setPassword(String password) {<br>this.password = password;<br>}  <p>/**<br>* @return the 名称变量<br>*/<br>public String getName() {<br>return name;<br>}  <p>/**<br>* @param name the 名称变量 to set<br>*/<br>public void setName(String name) {<br>this.name = name;<br>}  <p>}</p></blockquote> <p>注释类: <blockquote> <p>&nbsp; <p>/**<br>* <br>*/<br>package metadataDI.annotation;  <p>import java.lang.annotation.*;  <p>/**<br>* 这个标注指明被标注的类的成员变量的值运行时将会被<br>* 设置为一个固定的值: "容器注入的用户名"<br>*/<br>@Documented<br>@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.FIELD})//指定目标, 必须包含私有变量<br>@Retention(RetentionPolicy.RUNTIME)//设置保持性<br>@Inherited<br>public @interface UserName {  <p>}</p></blockquote> <p>最重要的: 容器类 <blockquote> <p>&nbsp; <p>/**<br>* <br>*/<br>package metadataDI.container;  <p>import java.lang.annotation.Annotation;<br>import java.lang.reflect.Field;<br>import java.lang.reflect.Modifier;  <p>import metadataDI.annotation.UserName;  <p>/**<br>* 元数据依赖注入容器, 这里将加载 UserBean 然后实例化, 把<br>* 标注有 @UserName 的变量设置一个初始值: "容器注入的用户名".<br>*/<br>public class MetadataDIContainer {<br>/** bean 实例 */<br>private Object bean;<br>/**<br>* 容器初始化, 加载 JavaBean类, 实例化, 将里面的标有元数据的变量设置一个初始值.<br>*/<br>public MetadataDIContainer() {<br>try {<br>// 加载类, 类名可以是任意的 JavaBean 名称<br>Class clz = Class.forName("metadataDI.entity.UserBean");<br>System.out.println("容器已经加载了 Bean 类");<br>bean = clz.newInstance();<br>System.out.println("容器已经实例化了 Bean 类");<br>System.out.println("容器将检查类里面的所有变量看是否有 @UserName 标注");<br>Field[] fields = clz.getDeclaredFields();  <p>for (Field f : fields)<br>{ <br>System.out.println("列出类里面的所有变量");<br>Class type = f.getType();<br>String name = f.getName();<br>System.out.print(" " + Modifier.toString(f.getModifiers()));<br>System.out.println(" " + type.getName() + " " + name + "");<br>Annotation[] annotation = f.getAnnotations();<br>System.out.println("一共" + annotation.length + "个元数据注释");<br>if(f.getAnnotation(UserName.class) != null) {<br>System.out.println("发现了 @UserName 标注, 将给实例的该字段设置值(注入值).");<br>f.setAccessible(true);// 设置为 true 可以允许反射访问私有变量, 忽略 Java 的默认访问规则<br>f.set(bean, "容器注入的用户名");<br>}<br>}<br>} catch (Exception e) {<br>// TODO Auto-generated catch block<br>e.printStackTrace();<br>}<br>}<br>/**<br>* 通过容器获得生成的 Bean 实例.<br>* @return<br>*/<br>public Object getUserBean() {<br>return bean;<br>}  <p>}</p></blockquote><img src ="http://www.blogjava.net/beansoft/aggbug/132781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-07-27 14:30 <a href="http://www.blogjava.net/beansoft/archive/2007/07/27/132781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>讨论:如何对新手讲解 EJB?</title><link>http://www.blogjava.net/beansoft/archive/2007/06/08/122769.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 08 Jun 2007 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/06/08/122769.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/122769.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/06/08/122769.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/122769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/122769.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 交流培训心得&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/06/08/122769.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/122769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-06-08 09:38 <a href="http://www.blogjava.net/beansoft/archive/2007/06/08/122769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB 2 工作流程图</title><link>http://www.blogjava.net/beansoft/archive/2007/06/07/122677.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Thu, 07 Jun 2007 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/06/07/122677.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/122677.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/06/07/122677.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/122677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/122677.html</trackback:ping><description><![CDATA[<p>和大家分享一下</p> <p><img alt="http://www.blogjava.net/images/blogjava_net/beansoft/17773/o_ejb2_flow.png" src="http://www.blogjava.net/images/blogjava_net/beansoft/17773/o_ejb2_flow.png"></p><img src ="http://www.blogjava.net/beansoft/aggbug/122677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-06-07 17:47 <a href="http://www.blogjava.net/beansoft/archive/2007/06/07/122677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java EE 5 入门 PPT 讲解有声视频 - 第二部分</title><link>http://www.blogjava.net/beansoft/archive/2007/05/07/115738.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 07 May 2007 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/05/07/115738.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/115738.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/05/07/115738.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/115738.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/115738.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第二部分: JPA, EJB3 实体 Bean&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/05/07/115738.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/115738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-05-07 19:06 <a href="http://www.blogjava.net/beansoft/archive/2007/05/07/115738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java EE 5 入门 PPT 讲解有声视频 - 第一部分</title><link>http://www.blogjava.net/beansoft/archive/2007/05/07/115670.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 07 May 2007 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/05/07/115670.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/115670.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/05/07/115670.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/115670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/115670.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/05/07/115670.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/115670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-05-07 10:40 <a href="http://www.blogjava.net/beansoft/archive/2007/05/07/115670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java EE 5 入门视频 - 在 J2SE 中使用 JPA</title><link>http://www.blogjava.net/beansoft/archive/2007/04/23/113002.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 23 Apr 2007 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/04/23/113002.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/113002.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/04/23/113002.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/113002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/113002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 影片时间: 06:48, 实际操作时间: 约 2 分钟&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/04/23/113002.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/113002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-04-23 17:43 <a href="http://www.blogjava.net/beansoft/archive/2007/04/23/113002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java EE 5 入门 PPT</title><link>http://www.blogjava.net/beansoft/archive/2007/04/12/110162.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Thu, 12 Apr 2007 06:06:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/04/12/110162.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/110162.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/04/12/110162.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/110162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/110162.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: jee5-2007-04.pdf.rar 754KB 一共 51 页的 PDF. 供大家了解 JEE 5 用.&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/04/12/110162.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/110162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-04-12 14:06 <a href="http://www.blogjava.net/beansoft/archive/2007/04/12/110162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MHT 文件格式解密</title><link>http://www.blogjava.net/beansoft/archive/2007/03/30/107538.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 30 Mar 2007 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/03/30/107538.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/107538.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/03/30/107538.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/107538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/107538.html</trackback:ping><description><![CDATA[IE 生成的 MHT 文件就是一封 email, 符合 MIME 规范, 用任何 Mail API 解析即可. 例如 JavaMail 可完美生成 MHT 文件.<br /><br />第一部分是正文的 HTML, 后面则是附件, 需要注意的是有些特殊的 header 来指示 HTML 中的资源应该在附件里找.<br /><br />看到网上好多人被 MIME 格式的 MHT 文件搞的晕三倒四, 真是不忍心.<br /><img src ="http://www.blogjava.net/beansoft/aggbug/107538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-03-30 20:13 <a href="http://www.blogjava.net/beansoft/archive/2007/03/30/107538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转载) 使用DBCP连接池检测未关闭的数据库连接</title><link>http://www.blogjava.net/beansoft/archive/2007/03/22/105624.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Thu, 22 Mar 2007 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/03/22/105624.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/105624.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/03/22/105624.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/105624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/105624.html</trackback:ping><description><![CDATA[<p>感言: 好的东西并不需要如何高深, 如何先进, 只需要解决问题即可.</p> <p>来源: <a href="http://lucaslee.javaeye.com/blog/34743">使用DBCP连接池检测未关闭的数据库连接</a></p> <p>&nbsp;</p> <p>我一直使用DBCP连接池，效果还不错。 <br>最近因为朋友的一个J2EE应用一上连接池，很快就会报connection pool exhausted的错误，所以 <br>特地研究了一下如何自动检测未关闭的数据库连接的技术。 <p>研究了tomcat文档中DataSource一章，发现有专门的Preventing dB connection pool leaks一节， <br>设置数据源的removeAbandoned="true"，removeAbandonedTimeout="60"，logAbandoned="true"几个属性就可以了。 <br>DBCP会自动把超过timeout时间仍未关闭的连接强制关闭，并且打出异常信息(包含打开连接的代码位置)。 <br>但是要注意，不能依赖这种方式关闭连接，是有一定风险的，比如万一页面操作数据库的时间偶尔超过了 <br>timeout的时间，那会造成执行错误。 <p>对我来说，这个方法最好的用法就是用来检测未关闭的连接，然后修改程序，显式的关闭连接。 <p>一个经验需要说一下，DBCP的log会输出到控制台，如果使用log4j,需要设置log4j.xml中的console appender的threshold为debug. </p><img src ="http://www.blogjava.net/beansoft/aggbug/105624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-03-22 18:48 <a href="http://www.blogjava.net/beansoft/archive/2007/03/22/105624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Simple Persistence for Java 的零配置对象持久性(zz)</title><link>http://www.blogjava.net/beansoft/archive/2007/03/21/105265.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 21 Mar 2007 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/03/21/105265.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/105265.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/03/21/105265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/105265.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/105265.html</trackback:ping><description><![CDATA[<p>思路是不错, 可惜只能用于 hsqldb..... 被现在复杂的框架搞晕了.</p> <p><a title="http://www.ibm.com/developerworks/cn/java/j-sp4j/index.html" href="http://www.ibm.com/developerworks/cn/java/j-sp4j/index.html">http://www.ibm.com/developerworks/cn/java/j-sp4j/index.html</a></p><img src ="http://www.blogjava.net/beansoft/aggbug/105265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-03-21 14:44 <a href="http://www.blogjava.net/beansoft/archive/2007/03/21/105265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Java SE环境下使用JPA1.0(Java EE 5.0 中的主要组成部分)(zz)</title><link>http://www.blogjava.net/beansoft/archive/2007/03/21/105186.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 21 Mar 2007 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/03/21/105186.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/105186.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/03/21/105186.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/105186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/105186.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/03/21/105186.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/105186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-03-21 10:41 <a href="http://www.blogjava.net/beansoft/archive/2007/03/21/105186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在 JSP/Servlet 中使用 Bean 自动属性填充机制(含原理分析)</title><link>http://www.blogjava.net/beansoft/archive/2007/03/19/104780.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Mon, 19 Mar 2007 10:23:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/03/19/104780.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/104780.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/03/19/104780.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/104780.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/104780.html</trackback:ping><description><![CDATA[<p></p> <p>[ HTML 版请阅读 <a title="http://beansoft.java-cn.org/ajax/JspRuntime/readme/index.htm" href="http://beansoft.java-cn.org/ajax/JspRuntime/readme/index.htm">http://beansoft.java-cn.org/ajax/JspRuntime/readme/index.htm</a>]  <p>(原创)在 JSP/Servlet 中使用 Bean 自动属性填充机制  <p>作者: BeanSoft 2004.04  <p>Abstract: 大家都知道, 在 JSP 开发中经常用到的一个操作就是从 request 中读取参数, 然后把它赋给 JavaBean 中对应的实现. JSP 提供了一个操作 &lt;jsp:setProperty name="beanName" property="*"/&gt; 来简化这一过程. 但是在 Servlet 中却无法直接使用这个方法, 而且中文用户经常出现汉字值无法正确取出以及用户输入非法数值时页面出错的情况. 本文将就如何从修改 Tomcat 源码解决这些问题展开讨论, 并展示已经取得的部分成果...... <p>从 JSP 规范刚刚推出的时候起, 为了方便对 Bean 的操作, 里面就包含了一个内置指令 &lt;jsp:setProperty&gt; 来简化从 HttpServletRequest 中的参数到 JavaBean 的对应参数的读取和设置工作. 的确, 在纯英文和 JSP 环境下, 这个操作减轻了相当大的重复使用 request.getParameter("xxx") 和 someBean.setXxx(xxx) 的工作, 特别是在当有大量属性需要读取和设置的时候. 不过根据我个人在 Tomcat 下的使用经验, 这个操作很少能对中文的参数值进行正确的读取和设置工作, 归根结底是由 Tomcat 的默认请求的参数的字符集都是 ISO8859-1 造成的. 这里不再详细讨论相关的解决方法, 只关注于本文的核心内容. 而且更令人头痛的是, 一旦用户不小心在 Bean 的对应属性中没有输入正确的值, 例如本来应该是一个数字却输入了字母, 这个操作就会报错, 并跳出整个流程处理. 在实际中, 可能并不需要如此的稍有错误就页面停止执行的情况出现, 因此这里也将考虑解决这个问题.<br>首先简要介绍一下测试的时候所用到的一个很简单的 JavaBean:  <p>sample.SampleBean 只有两个不同类型的属性: id 和 name, 这两种类型也方便我们对表单值出错时的测试. 接下来我们需要通过两个简单的页面来搞清楚 Tomcat 的底层到底是如何实现这个操作的.<br>将 SampleBean 类复制到 [TOMCAT安装目录]/webapps/ROOT/WEB-INF/classes/sample 目录下, 然后在您的 Tomcat 的 webapps/ROOT 目录下创建一个名为 test.jsp 的文件, 内容简单如下:  <p>&lt;jsp:useBean id="sampleBean" scope="page" class="sample.SampleBean" /&gt;<br>&lt;jsp:setProperty name="sampleBean" property="*"/&gt;  <p>, 然后在您的浏览器里输入地址(假定您是按照默认的配置运行的 Tomcat) <a href="http://localhost:8080/test.jsp">http://localhost:8080/test.jsp</a>, 这将使 Tomcat 翻译 JSP 文件, 然后编译到 servlet, 最后运行这个页面. 当然, 这个时候在浏览器里您什么也看不到, 我们的目的只是为了弄清楚到底 Tomcat 是如何实现自动填充属性的工作的. 打开目录[TOMCAT安装目录]/work, 在里面对应的目录下仔细查找的话会找到一个对应的包含 test_jsp 字样的 .java 文件(不同的 Tomcat 版本这个文件名字会有所变化), 打开这个文件查看其内容, 您总可以看到类似如下的语句:  <p>......<br>// begin [file="E:\\index.jsp"from=(1,0);to=(1,49)]<br>JspRuntimeLibrary.introspect(pageContext.findAttribute("sampleBean"), request);<br>// end<br>......  <p>, 这就是 &lt;jsp:setProperty name="sampleBean" property="*"/&gt; 的真正实现语句, 它调用了类 org.apache.jasper.runtime.JspRuntimeLibrary 中的一个方法. 好了, 一切都将从这里开始, 解决相关问题的途径就在这里.<br>打开 Tomcat 源码(我这里使用的是 Tomcat 4.12 的源码, 这个源码可以从 Tomcat 的站点下载, 如果您安装有 JBuilder 开发环境, 那么这个源码就位于目录 [JBuilder安装目录]\extras\jakarta-tomcat-4.1.12-src 下. 搜索 JspRuntimeLibrary.java, 打开它, 再查找方法 introspect, 可以看到如下代码:  <p>// __begin introspectMethod<br>public static void introspect(Object bean, ServletRequest request)<br>throws JasperException<br>{<br>Enumeration e = request.getParameterNames();<br>while ( e.hasMoreElements() ) {<br>String name = (String) e.nextElement();<br>String value = request.getParameter(name);<br>introspecthelper(bean, name, value, request, name, true);<br>}<br>}<br>// __end introspectMethod  <p>它通过循环读取 request 对象里面的所有参数, 然后再尝试设置这些值到和参数名称相同的 Bean 中的属性上去. 看到带下划线的那个代码了吗? 这是我们再熟悉不过的一个语句了, 而且 Tomcat 下这个默认的取参数的操作对汉字的读取总是字符集编码错误的, 所以最后填充给 Bean 的属性后的取值也是错误的, 这也是论坛上经常出现的关于 JSP 中文问题中经常要讨论的一个话题. 然后再看看 introspecthelper 方法, 发现它最后调用了 internalIntrospecthelper 方法. Ok, 这就是属性填充的最终实现代码. 看看这个方法的实现, 可以发现如下所示的读取参数列表的代码:  <p>... <br>Class t = type.getComponentType();<br>String[] values = request.getParameterValues(param);<br>//XXX Please check.<br>if(values == null) return;<br>...<br>if(value == null || (param != null &amp;&amp; value.equals(""))) return;<br>Object oval = convert(prop, value, type, propertyEditorClass);<br>if ( oval != null )<br>method.invoke(bean, new Object[] { oval });<br>... <p>这个地方也会出现汉字无法正确读出的问题, 因此需要修改. 第二段代码则是给出了如何将输入的字符串值转换为最终的相应的数据类型, 那就是调用 convert 方法, 而 convert 方法会出现异常, 这样, 整个循环处理就会因而中断并报错. 可以看到, 如果转换结果值为 null 的话, 就不会跳出出错处理流程. 因此考虑在 convert 失败时返回一个 null 值来取代原来的抛出异常的做法.<br>具体的修改过程并不十分有趣, 而是非常乏味. convert 方法被修改, 当转换类型发生错误时捕获它并返回一个 null 的转换结果, 字符集问题则只是简单的加入了转换内码的方法, 从而允许用户指定 request 所使用的字符集和最后转换到的字符集, 便于将程序移植到不同的字符集特性的服务器上工作. 主要的修改结果如下所示:  <p>// __begin convertMethod<br>/**<br>* 将输入的字符串转换为目标类型(会出错).<br>* Note: 修改出错处理, 出现异常时只返回空值,<br>* 即可改变 Bean 赋值出错时发生中断的问题.<br>*/<br>public static Object convert(<br>String propertyName,<br>String s,<br>Class t,<br>Class propertyEditorClass)<br>throws JasperException {<br>...<br>} catch (Exception ex) {<br>// Modified by BeanSoft Studio -- 只返回空值, 不报错<br>System.out.println(ex);<br>return null;<br>// Old code below:<br>//throw new JasperException(ex);<br>}<br>}<br>// __end convertMethod  <p>// __begin introspectMethod<br>/**<br>* 用 ServletRequest 的默认字符集实现 ServletRequest 到 Bean 值的自动填充工作.<br>* 实现和 Tomcat 默认的操作相同的功能.<br>*<br>* @param bean JavaBean 对象<br>* @param request ServletRequest 对象<br>*/<br>public static void introspect(Object bean, ServletRequest request) {<br>//throws JasperException {<br>introspect(bean, request, null);<br>}<br>// __end introspectMethod  <p>// __begin introspectMethod<br>/**<br>* 从默认字符集转换到目标字符集并进行 ServletRequest 到 Bean 值的自动填充工作.<br>*<br>* @param bean JavaBean 对象<br>* @param request ServletRequest 对象<br>* @param encoding 目标字符集(如果要转换到中文字符集, 此参数应该为 "GB2312"<br>* 或者 "GBK"), 如果参数为空, 则不做任何转码<br>*/<br>public static void introspect(Object bean, ServletRequest request, String encoding) {<br>//throws JasperException {<br>introspect(bean, request, null, encoding);<br>}<br>// __end introspectMethod  <p>// __begin introspectMethod<br>/**<br>* 用给定字符编码转换实现 ServletRequest 到 Bean 值的自动填充工作.<br>*<br>* @param bean JavaBean 对象<br>* @param request ServletRequest 对象<br>* @param sourceEncoding ServeltRequest 的源字符集(如果为空, 则默认为 ISO8859-1)<br>* @param targetEncoding 目标字符集, 例如 "GB2312" 或者 "GBK"<br>*/<br>public static void introspect(Object bean, ServletRequest request,<br>String sourceEncoding, String targetEncoding) {<br>//throws JasperException {<br>// Check default encoding<br>if(sourceEncoding == null || sourceEncoding.length() == 0) {<br>sourceEncoding = "ISO8859-1"<br>}  <p>try {<br>Enumeration e = request.getParameterNames();<br>while (e.hasMoreElements()) {<br>String name = (String) e.nextElement();<br>String value = request.getParameter(name);<br>// 字符集转换, 仅当目标字符集非空时进行此操作<br>if(value != null &amp;&amp; targetEncoding != null &amp;&amp; targetEncoding.length() &gt; 0) {<br>try {<br>value = new String(value.getBytes(sourceEncoding), targetEncoding);<br>} catch (UnsupportedEncodingException exception) {<br>exception.printStackTrace();<br>}<br>}  <p>introspecthelper(bean, name, value, request, name, true,<br>sourceEncoding, targetEncoding);<br>}<br>} catch (Exception e) {<br>e.printStackTrace();<br>}  <p>}<br>// __end introspectMethod<br>/**<br>* Bean 属性设置的实现(可转换字符集编码版本).<br>*<br>* @param bean<br>* @param prop 属性名称<br>* @param value<br>* @param r