﻿<?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-Think in MyLife-文章分类-Frame</title><link>http://www.blogjava.net/zhangzhong1018/category/16373.html</link><description>study ruby on rails</description><language>zh-cn</language><lastBuildDate>Thu, 08 Mar 2007 06:37:40 GMT</lastBuildDate><pubDate>Thu, 08 Mar 2007 06:37:40 GMT</pubDate><ttl>60</ttl><item><title>2007年标志设计趋势密码[转]</title><link>http://www.blogjava.net/zhangzhong1018/articles/102563.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Thu, 08 Mar 2007 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/102563.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/102563.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/102563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/102563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/102563.html</trackback:ping><description><![CDATA[
		<p>
				<strong>2007年标志设计趋势密码<br />2007 Logo Design Trends</strong>
		</p>
		<p>2007年1月发表，1月24日由Quester中文翻译，原文链接：<a href="http://logoorange.com/logo-design.php" target="_blank">http://logoorange.com/logo-design.php</a></p>
		<p>
				<strong>11 trends that will define Logo design in 2007</strong>
		</p>
		<p>Everyone wants to set the curve when it comes to style. No one wants to design out of a book of trends, but nevertheless, they emerge. <br />Take a peek at the following 11 Logo design trends that we think will define the look of 2007. </p>
		<p>
				<strong>11种趋势将定义2007年的Logo设计</strong>
		</p>
		<p>每个设计师都想在某一风格成为流行前把握它。没有人愿意自己的设计和流行趋势脱节。但是无论如何，这些趋势总是会露出端倪。</p>
		<p>让我们一同来窥探一下这11种我们认为的2007年标志设计的趋势密码。 </p>
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<img height="212" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend1.gif" width="144" align="left" border="NaN" />
								</td>
								<td valign="top">
										<p>
												<strong>1. Talk Boxes</strong>
										</p>
										<p>This is an outgrowth of last year's trend, even though these boxes have been around a few years now. <br />We don't quite know who's doing the talking, but whoever it is, their bubble is popping up all over. This Logo symbolizes communication, whether it be from the company or between its customers. LifeLogger, for instance, uses a speech bubble with a smile in it to illustrate how users can communicate through them to friends. They continue the use of three-dimensional speech bubbles in creating avatars for their users, as illustrated to the right. <br />In this way, the idea of communication represents the person themselves, showing the importance of contact.</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td width="150">
										<p>
												<img height="212" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend1.gif" width="144" align="left" border="NaN" />
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>1. 对话泡泡</strong>
										</p>
										<p>这是一种去年的流行风格的衍生，尽管这些泡泡已经玩了好几年了。 <br />我们搞不懂是谁在说话，但管它是谁呢，反正满处都是冒的这些泡泡。这个符 号象征着沟通，无论是来自企业还是他们的客户之间。LifeLogger（生活的记录者）网站，是一个例证，用泡泡和微笑符号来说话，表明用户可以用什么 样的方式和他们的朋友来交流。 他们继续使用立体的对话泡泡来为用户创造神话，就像右边那个泡泡。 <br />在这里，沟通的想法代表这些人本身，想要展示接触的重要性。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<img height="179" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend2.gif" width="117" align="left" border="NaN" />
								</td>
								<td valign="top">
										<p>
												<strong>2. Clouds</strong>
										</p>
										<p>Everyone remembers a time when they laid on their back in the grass, staring at the clouds daydreaming or finding images in their puffs. <br />Clouds are a powerful Logo, conjuring imagery of dreams, creativity and playfulness. Sometimes clouds are combined with thought bubbles to invoke feelings of dreaminess. The clouds can be a 3D bubble or take on a flat feeling. Many of these cloud Logos represent new ideas, hence the thought bubble. Many "clouds" came from new businesses on the internet, certainly a place for dreamers. Some, also include imagery of the sun, which evokes a feeling of a new dawn. </p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" bordercolor="#cccccc" width="150">
										<img height="179" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend2.gif" width="117" align="left" border="NaN" />
								</td>
								<td valign="top">
										<p>
												<strong>2. 云状物</strong>
										</p>
										<p>每个人都有那些仰面躺在草地上的时候，望着云朵发白日梦或者从腾云变换中寻找图案的记忆。<br />云状物是一个极有表现力的标志，凭空幻化意象，即有创造性，又很好玩。有时候云状物和“思维泡泡”结合起来，会产生一种梦幻的感觉。云状物可以是三维的泡泡或者只是平面的。许多的云状物Logo用“思维泡泡”来代表一种新思想。<br />许多的“云朵”来自互联网上的新生意，互联网确实是个梦想之地。有一些，也包含太阳的图形，用来形成“新的曙光”的感觉。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<img height="160" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend3.gif" width="133" align="left" border="NaN" />
								</td>
								<td valign="top">
										<p>
												<strong>3. Reflections</strong>
										</p>
										<p>Mirror, mirror, on the wall, what's the hottest trend of all? It might just be reflections. With Apple leading the way, looking like all their graphics were set on a shiny table, others are sure to follow. Dubbed by some as ?the new drop shadow,? reflections are taking over, especially on the web. The reflections might be skewed, such as in the Logo for blinklist, indicating the location of some light source, invisible to the onlooker, but effective in creating even more of a sense of a whole different world the Logo is in.</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td width="150">
										<p>
												<img height="160" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend3.gif" width="133" align="left" border="NaN" />
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>3. 反射效果（镜像效果）</strong>
										</p>
										<p>魔镜魔镜告诉我，什么是最热的潮流啊？ 它可能就是“反射效果”。苹果最先开始倡导的，把什么东西都弄得好像放在光滑闪亮的桌面上，其他人就开始跟风。有人给它起了个绰号叫什么来着？“新的下拉 阴影”（意思和以前的“下拉阴影”效果一样满天飞）。 “反射效果”全面霸占，尤其是在网上。反射效果可以是不对称的，就像 blinklist 的Logo一样，弄出一些光的效果却让你找不到光源，但对于创造拥有更多“完全不同的世界”感觉的Logo是有效而时尚的。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<img height="217" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend4.gif" width="112" align="left" border="NaN" />
								</td>
								<td valign="top">
										<p>
												<strong>4. Rectangle</strong>
										</p>
										<p>In a graphic world where you can do nearly anything, some companies are keeping it simple with shaded rectangles. Their Logo, in a contrasting white, pops out from the background. Shadow boxes have historically been a sign of amateurish design, but this new generation of effective Logos has shown that good design will always be in style. With the popularity of rounded corners, these Logos stand out with (oh no!) sharp edges and right angles. In some occasions, such as with the blurb Logo, the rectangle can represent an image. Blurb used their blue shadow behind their name to symbolize a book, as they are in the book publishing business. </p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td width="150">
										<p>
												<img height="217" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend4.gif" width="112" align="left" border="NaN" />
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>4. 长方形</strong>
										</p>
										<p>在图形世界里，你几乎可以做任何事情，但有些公司只使用简单的带边框的长方形。他们的Logo，从高反差的白色背景上“跳”出来。相框一样的长方形 容易给人“业余设计水平”的感觉，但是新生的有活力的这些Logo，表明了好的设计永远都是有品味的。与人气极旺的圆角风格同时，这些Logo因有着锐利 的边缘和适当的倾斜角度而特别显眼（不是吧！）。在某些场合，就像 Blurb的Logo，长方形可以用于扮演一个形象。Blurb 用蓝色的图形放在名字后面来代表一本书，因为他们做的是图书出版业务。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p> </p>
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td width="150">
										<p>
												<strong>
														<img height="282" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend5.gif" width="108" align="left" border="NaN" />
												</strong>
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>5. 3d Puffies</strong>
										</p>
										<p>With these new puffed-up Logos, you don't know whether to click on them or bounce on them. Now that the industry has overcome the production issues of gradients, designers seem to prefer air-popped graphics to the flat drawings of yore. Even desktop icons these days seem to have a rounded feel, like you might pop one with one good hard double-click. It's a 2D world out there in Internet land, and these 3D images really make Web pages and Logos jump out of the page, to where you feel you could run your hands over the computer screen and feel their bumps and curves. </p>
								</td>
						</tr>
				</tbody>
		</table>
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td width="150">
										<p>
												<strong>
														<img height="282" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend5.gif" width="108" align="left" border="NaN" />
												</strong>
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>5. 立体发泡物</strong>
										</p>
										<p>这些新出现的圆鼓鼓发泡Logo，让你搞不懂到底是在上面点击还是在上面弹跳。自从工业生产克服了“渐变色”的难题，设计师们就似乎热衷于将“立体 弹出”的图像加到以往的平面图样中。甚至桌面图标在最近也看起来有圆乎乎的感觉，就像你用力一点击它就会弹得老高。二维的世界已经从互联网走开了，三维的 图像的确让网页和Logo“跳出”页面，进入一个你可以用手指满屏幕去感觉那些凹凸不平和曲线的新世界。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<p>
												<img height="217" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend6.gif" width="146" align="left" border="NaN" />
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>6. Hot Dogs</strong>
										</p>
										<p>These cute little Tic Tacs of color are popping up all over the design world. Like many abstract symbols, the hot dogs can be used to mean many different things. Sometimes they denote movement or sound, such as in the Logo for Snap. These lines, reminiscent of those drawn out of shocked cartoon people by children everywhere, can denote an idea, a feeling or a literal meaning. But no matter how they're used in design, they are a powerful symbol of an upbeat emotion. </p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<p>
												<img height="217" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend6.gif" width="146" align="left" border="NaN" />
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>6. 热狗肠</strong>
										</p>
										<p>这些色彩和弹出的可爱小把戏遍布了整个设计界。像许多抽象符号一样，热狗肠可以用来表示许多不同的东西。又是他们表示声音或运动的 警示，就像Snap的Logo里那样。那些辐射的线条，让人想起随处可见的小孩子画的 大吃一惊的 卡通人物。它能表示一种想法，一种感觉或者只是一种 字面上的意义。但不管它们用在设计中是为什么，它们都是一种有强烈表现力的符号来象征 乐观的态度。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<p>
												<img height="217" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend7.gif" width="146" align="left" border="NaN" />
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>7. Transmission beam</strong>
										</p>
										<p>With satellite tv and radio and wireless everything all the rage in the new millennium, a transmission beams are a quick way to show that they are on the cutting edge of technology. Many companies who use this Logo trend deal in internet information. Part of what many of these companies are doing on the internet is taking user (or customer) information and sharing it with the world. The transmission beam, starting with a single dot (to represent the user), shows their ideas spreading out. It's the perfect symbol for publishing companies or blog sites. </p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<p>
												<img height="217" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend7.gif" width="146" align="left" border="NaN" />
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>7. 发射电波</strong>
										</p>
										<p>卫星电视，电台和无线的东东在新纪元里遍地开花，用发射电波是最快捷方式来表明他们是站在科技的最前沿。用这种Logo的许多公司都在做互联网信息 生意。他们中间有许多公司做的是在互联网上获取用户（客户）资料然后分享给全世界。无线电波，始发于一个“点”（代表用户），体现他们的理念在传播。对于 出版公司和博</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p> </p>
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<p>
												<strong>
														<img height="260" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend8.gif" width="122" align="left" border="NaN" />
												</strong>
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>8. People</strong>
										</p>
										<p>AOL's little man has some company, with others creating buddies to include in their Logos. For companies that bring people together, these genderless little people are shown in pairs or groups. They provide a visual indicator of coming together. Others show just one of these symbols, usually as an avatar for their customer. Anyone looking for other people can be sure they've found them when they see a Logo with a buddy. </p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<p>
												<strong>
														<img height="260" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend8.gif" width="122" align="left" border="NaN" />
												</strong>
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>8. 人形</strong>
										</p>
										<p>美国在线的“小人”已有了几个军团，和其他正在创建的好友一起都归属在它的Logo旗下。军团将人聚在一起，把这些搞不清性别的人成对或成组排列。 他们为“聚在一起”提供了这样一个视觉指示。有些公司的Logo只展示符号中的一个，这通常作为他们客户的偶像。任何想找人的人，当他们看到有这个 Logo的哥们，就能确信自己可以找到队伍。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="160">
										<img height="145" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend9.gif" width="167" align="left" border="NaN" />
								</td>
								<td valign="top">
										<p>
												<strong>9. Transparency</strong>
										</p>
										<p>Transparency is still hot. Again, many may gasp as the mere though of using a shadow, but this updated version is nothing like the shadow boxes that have plagued generic design. These Logos invoke images of blending together. Some, like the two transmission bubbles that seem to be popping out the little people in the BlueDot Logo, can symbolize communication, or a sort of overlapping and blending of ideas. Others are a Venn diagram, showing where the company fits, such as Zopa.</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<p>
												<img height="145" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend9.gif" width="167" align="left" />
										</p>
								</td>
								<td valign="top">
										<p>
												<strong>9. 透明效果</strong>
										</p>
										<p>透明效果仍旧热门。强调一下，很多人的需求只不过是加上个相框样的东东，但是这个“升级版”一点都不象相框那样是令人厌倦的普通设计。这些Logo 让图像混合在一起。有些，象是两个传送的泡泡，它们看起来象是要把“小人”弹出来（见BlueDot的Logo），它可以象征沟通，或者 观念的混合 和 重叠的排序。另外的看起来象“交集图”(Venn diagram)，展现出什么是公司的业务范围，就像 Zopa。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<img height="195" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend10.gif" width="128" align="left" border="NaN" />
								</td>
								<td valign="top">
										<p>
												<strong>10. Outlines</strong>
										</p>
										<p>(I think this is another way to add sophistication, 3d effect to a Logo) <br />Many are finding that nothing brings a Logo to the next level like a professionally done outline. These surrounding lines or shades can simply run around the text or seem to encapsulate it in a bubble, as seen in the picturecloud.com Logo. These outlines can take text and make it seem as though it's one unit. Nicely done, these effects add sophistication and a third dimension to Logos. </p>
								</td>
						</tr>
				</tbody>
		</table>
		<p> </p>
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<img height="195" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend10.gif" width="128" align="left" border="NaN" />
								</td>
								<td valign="top">
										<p>
												<strong>10. 轮廓线</strong>
										</p>
										<p>（我想这是另外一个方法来锦上添花，弄点立体效果到Logo上。）<br />很多人发现，没有什么比用轮廓线更能使Logo看起来显得专业。这些环绕 着的线或者框可以直接用在文字的周围或是看起来象塑封在一个泡泡里，就像在picturecloud.com 的Logo里一样。这些轮廓线能让文字看起来就像是一个整体。干得漂亮，这些效果的确给Logo锦上添花并有了立体感。</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<strong>
												<img height="238" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend11.gif" width="137" align="left" border="NaN" />
										</strong>
								</td>
								<td valign="top">
										<p>
												<strong>11. Punctuation</strong>
										</p>
										<p>From smiley faces to complex illustrations, every day punctuation has gained a new life in the tech typing world of the internet. While some used to only be used to denote the f-word, they're now used in the young on-line world on instant messaging, e-mailing and teen-speak in general. Now, these symbols have jumped out of instant messaging and onto billboards as of late, with their meanings left to the imagination of customers.</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<table bordercolor="#cccccc" cellspacing="5" cellpadding="0" width="100%" border="1">
				<tbody>
						<tr>
								<td valign="top" width="150">
										<strong>
												<img height="238" alt="" src="http://www.blueidea.com/articleimg/2007/01/4454/trend11.gif" width="137" align="left" border="NaN" />
										</strong>
								</td>
								<td valign="top">
										<p>
												<strong>11. 标点符号</strong>
										</p>
										<p>从笑脸图案到复杂插图，在互联网的文字输入世界里，标点符号每天都会获得新生。当某些人习惯于只用 F-word（粗俗语言，Fxxk字头的词汇）来表达时，它们现在就被年轻人用在即时聊天，E-Mail和小青年们的日常对话里。现在这些符号从即时聊天 软件和聊天室里蹦出来，带着它们的涵义留给用户无限的想像空间。</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/102563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2007-03-08 11:38 <a href="http://www.blogjava.net/zhangzhong1018/articles/102563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转compass   （http://www.agilejava.org/space/?108/action_viewspace_itemid_172.html）</title><link>http://www.blogjava.net/zhangzhong1018/articles/96567.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Mon, 29 Jan 2007 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/96567.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/96567.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/96567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/96567.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/96567.html</trackback:ping><description><![CDATA[     <a onclick="javascript:tagshow(event, 'Compass');" href="javascript:;" target="_self"><u><strong><font color="#3399cc">Compass</font></strong></u></a>是一流的开放源码JAVA搜索引擎框架，对于你的应用修饰，搜索引擎语义更具有能力。依靠顶级的<a onclick="javascript:tagshow(event, 'Lucene');" href="javascript:;" target="_self"><u><strong><font color="#3399cc">Lucene</font></strong></u></a>搜索引擎，Compass 结合了，像 <a onclick="javascript:tagshow(event, 'Hibernate');" href="javascript:;" target="_self"><u><strong><font color="#3399cc">Hibernate</font></strong></u></a>和 Sprin的流行的框架，为你的应用提供了从数据模型和数据源同步改变的搜索力.并且添加了2方面的特征,事物管理和快速更新优化. Compass的目标是：把java应用简单集成到搜索引擎中.编码更少，查找数据更便捷。<br />    下面以一个应用场景分步骤讲解如何利用compass实现搜索引擎：<br />1. 这里我们有一个Article表，希望利用compass实现对它的搜索。<br />  Article的结构如下：<br />  CREATE TABLE `article` (<br />    `ArticleID` bigint(20) NOT NULL,<br />    `PersonInfoID` bigint(20) default NULL,<br />    `ArticleTitle` varchar(200) default NULL,<br />    `PublishDate` datetime default NULL,<br />    `Summary` text,<br />    `Content` longtext,<br />    `KeyList` text,<br />    PRIMARY KEY  (`ArticleID`),<br />    KEY `PersonInfoArticle_FK` (`PersonInfoID`)<br />  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br />  我们希望利用compass对它的ArticleTitle、Summary、Content和KeyList进行全文检索。下面开始行动吧。<br />  <br />2. 首先到<a href="http://www.opensymphony.com/compass/download.action"><font color="#3399cc">http://www.opensymphony.com/compass/download.action</font></a> 上下载一个compass的发布版，我们下载的是Version 1.0.0的With Dependencies 。这样就可能省去寻找相关信赖库的麻烦了。 
<p>3. 将compass1.0解压到一个合适的目录，我们的工作目录是d:\develop\compass1.0</p><p>4. 我们是在eclipse环境下实现当前要求的，所以建议你也安装一个eclipse 3.2。</p><p>5. 首先我们在eclipse中建立了一个java工程，名为mycompass。</p><p>6. 然后我们在工程目录中建立了一个lib目录，用来存放本次工程所需要的所有compass和其它相关的库文件，并将他们设置为当前工程构建路径中需要的库文件。所有这些文件可以在compass的安装目录的lib目录找到。</p><p>  下面是我们的库文件列表：<br /> <br />7. 建立了Article表的pojo类。<br />  package com.darkhe.sample.mycompass;<br />  <br />  // Generated 2006-8-2 10:57:06 by Hibernate Tools 3.2.0.beta6a<br />  <br />  import java.util.Date;<br />  <br />  /**<br />   * Article generated by hbm2java<br />   */<br />  public class Article implements java.io.Serializable {<br />  <br />   // Fields    <br />  <br />   private long articleId;<br />  <br />   private Long personInfoId;<br />  <br />   private <a onclick="javascript:tagshow(event, 'String');" href="javascript:;" target="_self"><u><strong><font color="#3399cc">String</font></strong></u></a> articleTitle;<br />  <br />   private Date publishDate;<br />  <br />   private String summary;<br />  <br />   private String content;<br />  <br />   private String keyList;<br />  <br />   // Constructors<br />  <br />   /** default constructor */<br />   public Article() {<br />   }<br />  <br />   /** minimal constructor */<br />   public Article(long articleId) {<br />    this.articleId = articleId;<br />   }<br />  <br />   /** full constructor */<br />   public Article(long articleId, Long personInfoId, String articleTitle,<br />     Date publishDate, String summary, String content, String keyList) {<br />    this.articleId = articleId;<br />    this.personInfoId = personInfoId;<br />    this.articleTitle = articleTitle;<br />    this.publishDate = publishDate;<br />    this.summary = summary;<br />    this.content = content;<br />    this.keyList = keyList;<br />   }<br />  <br />   // Property accessors<br />   public long getArticleId() {<br />    return this.articleId;<br />   }<br />  <br />   public void setArticleId(long articleId) {<br />    this.articleId = articleId;<br />   }<br />  <br />   public Long getPersonInfoId() {<br />    return this.personInfoId;<br />   }<br />  <br />   public void setPersonInfoId(Long personInfoId) {<br />    this.personInfoId = personInfoId;<br />   }<br />  <br />   public String getArticleTitle() {<br />    return this.articleTitle;<br />   }<br />  <br />   public void setArticleTitle(String articleTitle) {<br />    this.articleTitle = articleTitle;<br />   }<br />  <br />   public Date getPublishDate() {<br />    return this.publishDate;<br />   }<br />  <br />   public void setPublishDate(Date publishDate) {<br />    this.publishDate = publishDate;<br />   }<br />  <br />   public String getSummary() {<br />    return this.summary;<br />   }<br />  <br />   public void setSummary(String summary) {<br />    this.summary = summary;<br />   }<br />  <br />   public String getContent() {<br />    return this.content;<br />   }<br />  <br />   public void setContent(String content) {<br />    this.content = content;<br />   }<br />  <br />   public String getKeyList() {<br />    return this.keyList;<br />   }<br />  <br />   public void setKeyList(String keyList) {<br />    this.keyList = keyList;<br />   }<br />  <br />  }</p><p><br />8. 建立hibernate的pojo到数据表映射文件<br /> &lt;?xml version="1.0"?&gt;<br /> &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br /> "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><font color="#3399cc">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</font></a>"&gt;<br /> &lt;!-- Generated 2006-8-2 10:57:07 by Hibernate Tools 3.2.0.beta6a --&gt;<br /> &lt;hibernate-mapping&gt;<br />    &lt;class name="com.darkhe.sample.mycompass.Article" table="article" catalog="freedom"&gt;<br />        &lt;comment&gt;&lt;/comment&gt;<br />        &lt;id name="articleId" type="long"&gt;<br />            &lt;column name="ArticleID" /&gt;<br />            &lt;generator class="assigned" /&gt;<br />        &lt;/id&gt;<br />        &lt;property name="personInfoId" type="java.lang.Long"&gt;<br />            &lt;column name="PersonInfoID"&gt;<br />                &lt;comment&gt;&lt;/comment&gt;<br />            &lt;/column&gt;<br />        &lt;/property&gt;<br />        &lt;property name="articleTitle" type="string"&gt;<br />            &lt;column name="ArticleTitle" length="200"&gt;<br />                &lt;comment&gt;&lt;/comment&gt;<br />            &lt;/column&gt;<br />        &lt;/property&gt;<br />        &lt;property name="publishDate" type="timestamp"&gt;<br />            &lt;column name="PublishDate" length="19"&gt;<br />                &lt;comment&gt;&lt;/comment&gt;<br />            &lt;/column&gt;<br />        &lt;/property&gt;<br />        &lt;property name="summary" type="string"&gt;<br />            &lt;column name="Summary" length="65535"&gt;<br />                &lt;comment&gt;&lt;/comment&gt;<br />            &lt;/column&gt;<br />        &lt;/property&gt;<br />        &lt;property name="content" type="string"&gt;<br />            &lt;column name="Content"&gt;<br />                &lt;comment&gt;&lt;/comment&gt;<br />            &lt;/column&gt;<br />        &lt;/property&gt;<br />        &lt;property name="keyList" type="string"&gt;<br />            &lt;column name="KeyList" length="65535"&gt;<br />                &lt;comment&gt;&lt;/comment&gt;<br />            &lt;/column&gt;<br />        &lt;/property&gt;<br />    &lt;/class&gt;<br /> &lt;/hibernate-mapping&gt;</p><p><br />9. 开始配置compass，首先是compass的系统配置文件 mycompass.cfg.xml<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;compass-core-config<br /> xmlns="<a href="http://www.opensymphony.com/compass/schema/core-config"><font color="#3399cc">http://www.opensymphony.com/compass/schema/core-config</font></a>"<br /> xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance"><font color="#3399cc">http://www.w3.org/2001/XMLSchema-instance</font></a>"<br /> xsi:schemaLocation="<a href="http://www.opensymphony.com/compass/schema/core-config"><font color="#3399cc">http://www.opensymphony.com/compass/schema/core-config</font></a><br />           <a href="http://www.opensymphony.com/compass/schema/compass-core-config.xsd"><font color="#3399cc">http://www.opensymphony.com/compass/schema/compass-core-config.xsd</font></a>"&gt;</p><p> &lt;compass name="default"&gt; &lt;!—这个名字随你取了，但它是必须的--&gt;</p><p>  &lt;connection&gt;<br />   &lt;file path="target" /&gt; &lt;!—这里是索引文件的存放路径，我们设置的是当前工程的相对路径target-?<br />  &lt;/connection&gt;</p><p>  &lt;searchEngine&gt;<br />    &lt;!-- 因是使用自己的分词算法，所以这里的类型必须是CustomAnalyzer --&gt;<br />          &lt;analyzer name="MMAnalyer" type="CustomAnalyzer" analyzerClass="jeasy.analysis.MMAnalyzer"&gt;<br />              &lt;stopWords&gt;<br />                  &lt;stopWord value="test" /&gt;<br />              &lt;/stopWords&gt;<br />          &lt;/analyzer&gt;<br />      &lt;/searchEngine&gt;</p><p> &lt;/compass&gt;<br />&lt;/compass-core-config&gt;<br /> 在上面的配置中，我们使用的我们选用的一个中文分词算法库，你可以用compass自带的。具体compass提供了哪些分词算法，请查阅compass的手册。</p><p><br />10. 然后是mycompass.cmd.xml <br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE compass-core-meta-data PUBLIC <br />    "-//Compass/Compass Core Meta Data DTD 1.0//EN"<br />    "<a href="http://www.opensymphony.com/compass/dtd/compass-core-meta-data.dtd"><font color="#3399cc">http://www.opensymphony.com/compass/dtd/compass-core-meta-data.dtd</font></a>"&gt;</p><p>&lt;compass-core-meta-data&gt;</p><p>&lt;!-- 定义一个实体和字段组--&gt;<br />    &lt;meta-data-group id="mycompass" displayName="My Compass"&gt;<br />    <br />        &lt;descrīption&gt;Mycompass Meta Data&lt;/descrīption&gt;       <br />        &lt;uri&gt;http://com/darkhe/sample/mycompass&lt;/uri&gt;<br />    <br />        <br />&lt;!-- 申明所有需要检索的实体--&gt;        <br />        &lt;alias id="Article" displayName="Article"&gt;<br />            &lt;descrīption&gt;Article alias&lt;/descrīption&gt;<br />            &lt;uri&gt;http://com/darkhe/sample/mycompass/alias/Article&lt;/uri&gt;<br />            &lt;name&gt;Article&lt;/name&gt;<br />        &lt;/alias&gt;<br />        <br /> &lt;!-- 申明所有需要检索的属性或者字段，而不管这些属性或者字段是哪个实体的 --&gt;        <br />        &lt;meta-data id="ArticleTitle" displayName="ArticleTitle"&gt;<br />            &lt;descrīption&gt;ArticleTitle&lt;/descrīption&gt;<br />            &lt;uri&gt;http://com/darkhe/sample/mycompass/alias/ArticleTitle&lt;/uri&gt;<br />            &lt;name&gt;ArticleTitle&lt;/name&gt;<br />        &lt;/meta-data&gt;<br />        <br />        &lt;meta-data id="PublishDate" displayName="PublishDate"&gt;<br />            &lt;descrīption&gt;PublishDate&lt;/descrīption&gt;<br />            &lt;uri&gt;http://com/darkhe/sample/mycompass/alias/PublishDate&lt;/uri&gt;<br />            &lt;name format="yyyy-MM-dd hh:mm:ss"&gt;date&lt;/name&gt;<br />        &lt;/meta-data&gt;<br />        <br />        &lt;meta-data id="Summary" displayName="Summary"&gt;<br />            &lt;descrīption&gt;Summary&lt;/descrīption&gt;<br />            &lt;uri&gt;http://com/darkhe/sample/mycompass/alias/Summary&lt;/uri&gt;<br />            &lt;name&gt;Summary&lt;/name&gt;<br />        &lt;/meta-data&gt;<br />        <br />        &lt;meta-data id="Content" displayName="Content"&gt;<br />            &lt;descrīption&gt;Content&lt;/descrīption&gt;<br />            &lt;uri&gt;http://com/darkhe/sample/mycompass/alias/Content&lt;/uri&gt;<br />            &lt;name&gt;Content&lt;/name&gt;<br />        &lt;/meta-data&gt;</p><p>        &lt;meta-data id="KeyList" displayName="KeyList"&gt;<br />            &lt;descrīption&gt;KeyList&lt;/descrīption&gt;<br />            &lt;uri&gt;http://com/darkhe/sample/mycompass/alias/KeyList&lt;/uri&gt;<br />            &lt;name&gt;KeyList&lt;/name&gt;<br />        &lt;/meta-data&gt;        <br />                        <br />    &lt;/meta-data-group&gt;<br />    <br />&lt;/compass-core-meta-data&gt;</p><p><br />11. 再是mycompass.cpm.xml<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE compass-core-mapping PUBLIC<br />    "-//Compass/Compass Core Mapping DTD 1.0//EN"<br />    "<a href="http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd"><font color="#3399cc">http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd</font></a>"&gt;</p><p>&lt;!-- 这里的包名必须和pojo的包名一致 --&gt;<br />&lt;compass-core-mapping package="com.darkhe.sample.mycompass"&gt;</p><p>&lt;!-- 定义实体及其字段的对应关系 --&gt;</p><p>&lt;!-- 注意实体及其字段的名称的大小写应当与pojo对象一致，而不是与数据库一致<br />  关于pojo与数据库的对应表的一致性关系由hibernate的映谢文件定义，而不是这个文件<br />  当前映射文件只定义compass与hibernate的关系 --&gt;</p><p> &lt;class name="Article" alias="${mycompass.Article}"&gt;<br />  &lt;id name="ArticleId" /&gt;<br />  <br />  &lt;property name="ArticleTitle"&gt;<br />   &lt;meta-data&gt;${mycompass.ArticleTitle}&lt;/meta-data&gt;<br />  &lt;/property&gt;</p><p>  &lt;property name="PublishDate"&gt;<br />   &lt;meta-data&gt;${mycompass.PublishDate}&lt;/meta-data&gt;<br />  &lt;/property&gt;</p><p>  &lt;property name="Summary"&gt;<br />   &lt;meta-data&gt;${mycompass.Summary}&lt;/meta-data&gt;<br />  &lt;/property&gt;</p><p>  &lt;property name="Content"&gt;<br />   &lt;meta-data&gt;${mycompass.Content}&lt;/meta-data&gt;<br />  &lt;/property&gt;</p><p>  &lt;property name="KeyList"&gt;<br />   &lt;meta-data&gt;${mycompass.KeyList}&lt;/meta-data&gt;<br />  &lt;/property&gt;<br /> &lt;/class&gt;<br /> &lt;/compass-core-mapping&gt;</p><p><br />12. log4j.properties<br />log4j.rootLogger=WARN, stdout<br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n<br />log4j.logger.org.compass=INFO</p><p><br />13. jdbc.properties<br /># Properties file with JDBC-related settings.<br /># Applied by PropertyPlaceholderConfigurer from "applicationContext-*.xml".<br /># Targeted at system administrators, to avoid touching the context <a onclick="javascript:tagshow(event, 'XML');" href="javascript:;" target="_self"><u><strong><font color="#3399cc">XML</font></strong></u></a> files.<br />jdbc.driverClassName=com.mysql.jdbc.Driver<br />#jdbc.driverClassName=org.hsqldb.jdbcDriver<br />#jdbc.url=jdbc:hsqldb:hsql://localhost:9001<br />jdbc.url=jdbc:mysql://localhost:3306/testdb<br />jdbc.username=test<br />jdbc.password=test<br /># Property that determines the Hibernate dialect<br /># (only applied with "applicationContext-hibernate.xml")<br />#hibernate.dialect=org.hibernate.dialect.HSQLDialect<br />hibernate.dialect=org.hibernate.dialect.MySQLDialect</p><p></p><p>14. 最后是applicationContext-hibernate.xml，这里集中配置了compass如何与<a onclick="javascript:tagshow(event, 'spring');" href="javascript:;" target="_self"><u><strong><font color="#3399cc">spring</font></strong></u></a>与hibernate结合的。<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd"><font color="#3399cc">http://www.springframework.org/dtd/spring-beans.dtd</font></a>"&gt;</p><p>&lt;!--<br /> - Application context definition for Petclinic on Hibernate.<br />--&gt;<br />&lt;beans&gt;<br /> &lt;!-- ========================= RESOURCE DEFINITIONS ========================= --&gt;<br /> &lt;!-- Configurer that replaces ${...} placeholders with values from a properties file --&gt;<br /> &lt;!-- (in this case, JDBC-related settings for the dataSource definition below) --&gt;<br /> &lt;bean id="propertyConfigurer"<br />  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;<br />  &lt;property name="location"&gt;<br />   &lt;value&gt;classpath:jdbc.properties&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> &lt;!-- Local DataSource that works in any environment --&gt;<br /> &lt;!-- Note that DriverManagerDataSource does not pool; it is not intended for production --&gt;<br /> &lt;!-- See JPetStore for an example of using Commons DBCP BasicDataSource as alternative --&gt;<br /> &lt;!-- See Image Database for an example of using C3P0 ComboPooledDataSource as alternative --&gt;<br /> &lt;bean id="dataSource"<br />  class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br />  &lt;property name="driverClassName"&gt;<br />   &lt;value&gt;${jdbc.driverClassName}&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="url"&gt;<br />   &lt;value&gt;${jdbc.url}&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="username"&gt;<br />   &lt;value&gt;${jdbc.username}&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="password"&gt;<br />   &lt;value&gt;${jdbc.password}&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> &lt;!-- <a onclick="javascript:tagshow(event, 'JNDI');" href="javascript:;" target="_self"><u><strong><font color="#3399cc">JNDI</font></strong></u></a> DataSource for J2EE environments --&gt;<br /> &lt;!--<br />  &lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&gt;<br />  &lt;property name="jndiName"&gt;&lt;value&gt;java:comp/env/jdbc/petclinic&lt;/value&gt;&lt;/property&gt;<br />  &lt;/bean&gt;<br /> --&gt;<br /> &lt;!-- Hibernate SessionFactory --&gt;<br /> &lt;bean id="sessionFactory"<br />  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br />  &lt;property name="dataSource"&gt;<br />   &lt;ref local="dataSource" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="mappingResources"&gt;<br />   &lt;list&gt;<br />    &lt;value&gt;<br />     com/darkhe/sample/mycompass/Article.hbm.xml &lt;!-- 这里是hibernate里需要的数据映射文件 --&gt;<br />    &lt;/value&gt;<br />   &lt;/list&gt;<br />  &lt;/property&gt;<br />  &lt;property name="hibernateProperties"&gt;<br />   &lt;props&gt;<br />    &lt;prop key="hibernate.dialect"&gt;<br />     ${hibernate.dialect}<br />    &lt;/prop&gt;<br />    &lt;prop key="hibernate.show_sql"&gt;false&lt;/prop&gt;<br />    &lt;prop key="hibernate.generate_statistics"&gt;true&lt;/prop&gt;<br />   &lt;/props&gt;<br />  &lt;/property&gt;<br />  &lt;property name="eventListeners"&gt;<br />   &lt;map&gt;<br />    &lt;entry key="merge"&gt;<br />     &lt;bean<br />      class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" /&gt;<br />    &lt;/entry&gt;<br />   &lt;/map&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</p><p><br /> &lt;!-- COMPASS START --&gt;<br /> &lt;bean id="compass" class="org.compass.spring.LocalCompassBean"&gt;<br />  &lt;property name="resourceLocations"&gt;<br />   &lt;list&gt;<br />    &lt;value&gt;classpath:mycompass.cmd.xml&lt;/value&gt; &lt;!-- 这里是compass所需要的两个关于数据项的配置文件 --&gt;<br />    &lt;value&gt;classpath:mycompass.cpm.xml&lt;/value&gt;<br />   &lt;/list&gt;<br />  &lt;/property&gt;<br />  &lt;property name="configLocation"&gt;<br />   &lt;value&gt;classpath:mycompass.cfg.xml&lt;/value&gt; &lt;!-- 这里是compass的系统配置文件的路径 --&gt;<br />  &lt;/property&gt;<br />  &lt;!--         &lt;property name="compassSettings"&gt;<br />   &lt;props&gt;<br />   &lt;prop key="compass.engine.connection"&gt;file://d:/target&lt;/prop&gt;<br />   &lt;prop key="compass.transaction.factory"&gt;org.compass.spring.transaction.SpringSyncTransactionFactory&lt;/prop&gt;<br />   &lt;/props&gt;<br />   &lt;/property&gt;--&gt;</p><p>  &lt;property name="transactionManager"&gt;<br />   &lt;ref local="transactionManager" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</p><p><br /> &lt;bean id="hibernateGpsDevice"<br />  class="org.compass.spring.device.hibernate.SpringHibernate3GpsDevice"&gt;<br />  &lt;property name="name"&gt;<br />   &lt;value&gt;hibernateDevice&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref local="sessionFactory" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> &lt;bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps"<br />  init-method="start" destroy-method="stop"&gt;<br />  &lt;property name="compass"&gt;<br />   &lt;ref bean="compass" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="gpsDevices"&gt;<br />   &lt;list&gt;<br />    &lt;bean<br />     class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper"&gt;<br />     &lt;property name="gpsDevice" ref="hibernateGpsDevice" /&gt;<br />    &lt;/bean&gt;<br />   &lt;/list&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> &lt;!-- COMPASS END --&gt;<br />&lt;/beans&gt;</p><p>15. 注意上面的所以配置文件，根据我们上面的配置，都应当放到classpath的根路径。<br />16. 建立工具类，用来进行spring引擎的初始化工作。<br />/**<br /> * &lt;p&gt;@(#) IOC.java 2006-2-1 0:08:23&lt;/p&gt;<br /> * &lt;p&gt;Copyright (c) 2005-2006 ???????????????????&lt;/p&gt;<br /> */<br />package com.darkhe.sample.mycompass;</p><p>import org.springframework.context.ApplicationContext;<br />import org.springframework.context.support.ClassPathXmlApplicationContext;</p><p>/**<br /> * <br /> * <br /> * @version 1.0 2006-2-1<br /> * @author darkhe<br /> */<br />public class IOC {<br /> private static ApplicationContext context = null;</p><p> private static boolean isInit = false;</p><p> private IOC() {<br />  super();<br /> }</p><p> private static void init() {<br /> <br />  if (isInit == false) {<br />   String[] xmlfilenames = { "applicationContext-hibernate.xml" };</p><p>   context = new ClassPathXmlApplicationContext(xmlfilenames);</p><p>   isInit = true;<br />  }<br /> }</p><p> /**<br />  *  <br />  * @return<br />  */<br /> public static ApplicationContext getContext() {<br />  if (context == null || isInit == false) {<br />   init();<br />  }<br />  return context;<br /> }</p><p> /**<br />  * <br />  * @param name<br />  * @return<br />  */<br /> public static Object getBean(String name) {<br />  return getContext().getBean(name);<br /> }</p><p>}</p><p><br />17. 建立索引程序，用来数据库中的建立索引<br />/*<br /> * Copyright (c) 2005-2006 <br /> * ChongQing Man-Month Technology Development Co. ,Ltd<br /> * <br /> * ---------------------------------------------------------------------------------<br /> * @(#) Inder.java, 2006-8-1 下午09:01:14<br /> * ---------------------------------------------------------------------------------<br /> */<br />package com.darkhe.sample.mycompass;</p><p>import java.io.FileNotFoundException;</p><p>import org.compass.gps.CompassGps;<br />import org.springframework.context.ApplicationContext;</p><p>/**<br /> * @author darkhe<br /> * <br /> */<br />public class Indexer {</p><p> /**<br />  * @param args<br />  * @throws FileNotFoundException <br />  */<br /> public static void main(String[] args) throws FileNotFoundException {</p><p>   // 加裁自定义词典<br />  DictionaryUtils.loadCustomDictionary();</p><p>  ApplicationContext context = IOC.getContext();</p><p>  // 得到spring环境中已经配置和初始化好的compassGps对象<br />  CompassGps compassGps = (CompassGps) context.getBean("compassGps");<br />  // 调用index方法建立索引<br />  compassGps.index();</p><p> }</p><p>}</p><p></p><p>18. 建立搜索程序，检证compass的应用。<br />/*<br /> * Copyright (c) 2005-2006 <br /> * ChongQing Man-Month Technology Development Co. ,Ltd<br /> * <br /> * ---------------------------------------------------------------------------------<br /> * @(#) Searcher.java, 2006-8-1 下午09:36:29<br /> * ---------------------------------------------------------------------------------<br /> */</p><p>package com.darkhe.sample.mycompass;</p><p>import java.io.FileNotFoundException;</p><p>import org.compass.core.Compass;<br />import org.compass.core.CompassCallbackWithoutResult;<br />import org.compass.core.CompassException;<br />import org.compass.core.CompassHits;<br />import org.compass.core.CompassSession;<br />import org.compass.core.CompassTemplate;<br />import org.compass.core.Resource;<br />import org.springframework.context.ApplicationContext;</p><p>/**<br /> * @author darkhe<br /> * <br /> */<br />public class Searcher {</p><p> /**<br />  * @param args<br />  * @throws FileNotFoundException<br />  */<br /> public static void main(String[] args) throws FileNotFoundException {</p><p>  // 加裁自定义词典<br />  DictionaryUtils.loadCustomDictionary();</p><p>  ApplicationContext context = IOC.getContext();</p><p>  Compass compass = (Compass) context.getBean("compass");</p><p>  CompassTemplate <a onclick="javascript:tagshow(event, 'template');" href="javascript:;" target="_self"><u><strong><font color="#3399cc">template</font></strong></u></a> = new CompassTemplate(compass);</p><p>  template.execute(new CompassCallbackWithoutResult() {<br />   protected void doInCompassWithoutResult(CompassSession session)<br />     throws CompassException {<br />    CompassHits hits = session.find("大头人");</p><p>    System.out.println("Found [" + hits.getLength()<br />      + "] hits for [大头人] query");<br />    System.out<br />      .println("======================================================");<br />    for (int i = 0; i &lt; hits.getLength(); i++) {<br />     print(hits, i);<br />    }</p><p>    hits.close();<br />   }<br />  });</p><p> }</p><p> public static void print(CompassHits hits, int hitNumber) {<br />  Object value = hits.data(hitNumber);<br />  Resource resource = hits.resource(hitNumber);<br />  System.out.println("ALIAS [" + resource.getAlias() + "]  SCORE ["<br />    + hits.score(hitNumber) + "]");<br />  System.out.println(":::: " + value);<br />  System.out.println("");<br /> }<br />}</p><p></p><p><br />19. 工具类DictionaryUtils是用来管理我们自己采用的中文分词算法的加载自定义词典的。<br />/**<br /> * Copyright (c) 2005-2006 重庆人月科技发展有限公司<br /> * <br /> * ------------------------------------------------------------------------------<br /> * @(#) DictionaryUtils.java, 2006-8-2 下午04:55:22<br /> * ------------------------------------------------------------------------------<br /> */<br />package com.darkhe.sample.mycompass;</p><p>import java.io.File;<br />import java.io.FileNotFoundException;<br />import java.io.FileReader;</p><p>import jeasy.analysis.MMAnalyzer;</p><p>/**<br /> * <br /> * @author darkhe<br /> * @version 1.0.0<br /> */<br />public class DictionaryUtils {<br /> // 静态变量<br /> private static boolean isInit = false;</p><p> // 静态初始化</p><p> // 静态方法<br /> public static void loadCustomDictionary() throws FileNotFoundException {</p><p>  if (isInit == false) {</p><p>   // 添加我们自己的词典<br />   FileReader fr = new FileReader(new File("dict.txt"));<br />   MMAnalyzer.addDictionary(fr);<br />   <br />   //System.out.println("添加我们自己的词典");</p><p>   isInit = true;<br />  }<br /> }<br />}<br />20. 执行Indexer，再执行Seracher后控制台信息如下：</p><p>Found [1] hits for [大头人] query<br />================================================<br />ALIAS [Article] SCORE [0.3988277]<br />:::: <a href="mailto:com.darkhe.sample.mycompass.Article@bla4e2"><font color="#3399cc">com.darkhe.sample.mycompass.Article@bla4e2</font></a></p><p><br />具体结果和你的数据表中的内容有别。</p><p>21. 这样，我们便实现了如何利用compass构建我们自己的搜索引擎的一个简单实现。</p><img src ="http://www.blogjava.net/zhangzhong1018/aggbug/96567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2007-01-29 18:21 <a href="http://www.blogjava.net/zhangzhong1018/articles/96567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COMPASS应用(转)</title><link>http://www.blogjava.net/zhangzhong1018/articles/96564.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Mon, 29 Jan 2007 10:12:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/96564.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/96564.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/96564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/96564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/96564.html</trackback:ping><description><![CDATA[
		<table width="100%">
				<tbody>
						<tr>
								<td>
										<div class="postTitle">一个简单的COMPASS应用</div>
										<br />
										<div class="postText">首先你要下载Compass framework: <a href="http://www.compassframework.org/display/SITE/Downloads"><font color="#002c99">Download Compass</font></a>. <br />你需要在你的class path 中添加4个jar<font face="Courier New"><a title="一个简单的COMPASS应用" href="/ognl/archive/2006/06/29/55688.html"><font color="#002c99">compass</font></a>-x/modules/core/compass-core-x.jar, <a title="一个简单的COMPASS应用" href="/ognl/archive/2006/06/29/55688.html"><font color="#002c99">compass</font></a>/modules/core/lib/commons-logging-x.jar, <a title="一个简单的COMPASS应用" href="/ognl/archive/2006/06/29/55688.html"><font color="#002c99">compass</font></a>-x/modules/core/lib/log4j-x.jar, <a title="一个简单的COMPASS应用" href="/ognl/archive/2006/06/29/55688.html"><font color="#002c99">compass</font></a>-x/modules/core/lib/lucene-core-x-rc1-dev.jar. <br />在你的项目中创建下面的目录(可以根据自己的定义来改动)：</font><br /><code>log4j.properties <br />- org <br />   - compassframework <br />     - sample <br />       - example <br />           alias.cmd.xml <br />           <a title="一个简单的COMPASS应用" href="/ognl/archive/2006/06/29/55688.html"><font color="#002c99">compass</font></a>.cfg.xml <br />           CompassExample.java <br />           Phrase.cpm.xml <br />           Phrase.java <br /></code>下面说一下几个重要的配置文件<br /></div>
										<p class="postText">
												<font size="+0"> <code><a title="一个简单的COMPASS应用" href="/ognl/archive/2006/06/29/55688.html"><font color="#00ccff">compass</font></a><font color="#00ccff">.cfg.xml</font></code><font color="#00ccff">code</font></font>
										</p>
										<p class="postText">指定的target/index 是一个存储目录放索引文件的<br /><font size="+0"></font><br /><code><font size="+0"></font></code>（这个类必须有个无参数的构造和id属性）<br /></p>
										<div class="code_title">xml 代码</div>
										<div class="postText">
												<div class="dp-highlighter">
														<div class="bar">
														</div>
														<ol class="dp-xml">
																<li class="alt">
																		<span>
																				<span>&lt;!--CTYPE compass-core-configuration PUBLIC"-//Compass/Compass Core Configuration DTD 1.0//EN"    &lt;/sp--&gt;</span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>  </span>
																</li>
																<li class="">
																		<span>"http://static.compassframework.org/dtd/compass-core-configuration-1.0.dtd"</span>
																		<span class="tag">&gt;</span>
																		<span>    </span>
																</li>
																<li class="alt">
																		<span>  </span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>  </span>
																</li>
																<li class="">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>  </span>
																</li>
																<li class="">
																		<span>
																		</span>
																		<span class="tag-name">compass-core-configuration</span>
																		<span class="tag">&gt;</span>
																		<span>    </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">compass</span>
																		<span class="tag">&gt;</span>
																		<span>  </span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">setting</span>
																		<span> </span>
																		<span class="attribute">name</span>
																		<span>=</span>
																		<span class="attribute-value">"compass.engine.connection"</span>
																		<span class="tag">&gt;</span>
																		<span>target/index</span>
																		<span class="tag">
																				<span class="tag-name">setting</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">meta-data</span>
																		<span> </span>
																		<span class="attribute">resource</span>
																		<span>=</span>
																		<span class="attribute-value">"org/compassframework/sample/example/alias.cmd.xml"</span>
																		<span> </span>
																		<span class="tag">/&gt;</span>
																		<span>  </span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">
																				<span class="tag-name">compass</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">
																				<span class="tag-name">compass-core-configuration</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
														</ol>
												</div>
										</div>
										<p class="postText"> <code>alias.cmd.xml</code>:</p>
										<div class="code_title">xml 代码</div>
										<div class="postText">
												<div class="dp-highlighter">
														<div class="bar">
														</div>
														<ol class="dp-xml">
																<li class="alt">
																		<span>
																				<span class="tag">&lt;!--sp--&gt;<span>  </span></span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag-name">xml</span>
																		<span> </span>
																		<span class="attribute">version</span>
																		<span>=</span>
																		<span class="attribute-value">"1.0"</span>
																		<span class="tag">?&gt;</span>
																		<span>    </span>
																</li>
																<li class="">
																		<span>&lt;!--CTYPE compass-core-meta-data PUBLIC    &lt;/sp--&gt;</span>
																</li>
																<li class="alt">
																		<span>"-//Compass/Compass Core Meta Data DTD 1.0//EN"    </span>
																</li>
																<li class="">
																		<span>"http://static.compassframework.org/dtd/compass-core-meta-data-1.0.dtd"</span>
																		<span class="tag">&gt;</span>
																		<span>    </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">compass-core-meta-data</span>
																		<span class="tag">&gt;</span>
																		<span>    </span>
																</li>
																<li class="">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">meta-data-group</span>
																		<span> </span>
																		<span class="attribute">id</span>
																		<span>=</span>
																		<span class="attribute-value">"example"</span>
																		<span> </span>
																		<span class="attribute">displayName</span>
																		<span>=</span>
																		<span class="attribute-value">"Example Meta Data"</span>
																		<span class="tag">&gt;</span>
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>  </span>
																</li>
																<li class="">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">description</span>
																		<span class="tag">&gt;</span>
																		<span>Example Meta Data</span>
																		<span class="tag">
																				<span class="tag-name">description</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="alt">
																		<span>  </span>
																</li>
																<li class="">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">uri</span>
																		<span class="tag">&gt;</span>
																		<span>http://compass/example</span>
																		<span class="tag">
																				<span class="tag-name">uri</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="alt">
																		<span>  </span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">alias</span>
																		<span> </span>
																		<span class="attribute">id</span>
																		<span>=</span>
																		<span class="attribute-value">"phrase"</span>
																		<span> </span>
																		<span class="attribute">displayName</span>
																		<span>=</span>
																		<span class="attribute-value">"Phrase"</span>
																		<span class="tag">&gt;</span>
																		<span>  </span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">description</span>
																		<span class="tag">&gt;</span>
																		<span>Phrase alias</span>
																		<span class="tag">
																				<span class="tag-name">description</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">uri</span>
																		<span class="tag">&gt;</span>
																		<span>http://compass/example/phrase</span>
																		<span class="tag">
																				<span class="tag-name">uri</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">name</span>
																		<span class="tag">&gt;</span>
																		<span>phrase</span>
																		<span class="tag">
																				<span class="tag-name">name</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">
																				<span class="tag-name">alias</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">meta-data</span>
																		<span> </span>
																		<span class="attribute">id</span>
																		<span>=</span>
																		<span class="attribute-value">"author"</span>
																		<span> </span>
																		<span class="attribute">displayName</span>
																		<span>=</span>
																		<span class="attribute-value">"Author"</span>
																		<span class="tag">&gt;</span>
																		<span>  </span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">description</span>
																		<span class="tag">&gt;</span>
																		<span>Author alias</span>
																		<span class="tag">
																				<span class="tag-name">description</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">uri</span>
																		<span class="tag">&gt;</span>
																		<span>http://compass/example/author</span>
																		<span class="tag">
																				<span class="tag-name">uri</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">name</span>
																		<span class="tag">&gt;</span>
																		<span>author</span>
																		<span class="tag">
																				<span class="tag-name">name</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">
																				<span class="tag-name">meta-data</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">meta-data</span>
																		<span> </span>
																		<span class="attribute">id</span>
																		<span>=</span>
																		<span class="attribute-value">"text"</span>
																		<span> </span>
																		<span class="attribute">displayName</span>
																		<span>=</span>
																		<span class="attribute-value">"Text"</span>
																		<span class="tag">&gt;</span>
																		<span>  </span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">description</span>
																		<span class="tag">&gt;</span>
																		<span>Text alias</span>
																		<span class="tag">
																				<span class="tag-name">description</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">uri</span>
																		<span class="tag">&gt;</span>
																		<span>http://compass/example/text</span>
																		<span class="tag">
																				<span class="tag-name">uri</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">&lt;</span>
																		<span class="tag-name">name</span>
																		<span class="tag">&gt;</span>
																		<span>text</span>
																		<span class="tag">
																				<span class="tag-name">name</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">
																				<span class="tag-name">meta-data</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">
																				<span class="tag-name">meta-data-group</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
																<li class="">
																		<span>  </span>
																</li>
																<li class="alt">
																		<span>
																		</span>
																		<span class="tag">
																				<span class="tag-name">compass-core-meta-data</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</span>
																</li>
														</ol>
												</div>
										</div>
										<p class="postText">Phrase.java</p>
										<font size="+0">
												<code>
														<div class="code_title">java 代码</div>
														<div class="postText">
																<div class="dp-highlighter">
																		<div class="bar">
																		</div>
																		<ol class="dp-j">
																				<li class="alt">
																						<span>
																								<span class="keyword">package</span>
																								<span> org.compassframework.sample.example;   </span>
																						</span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span>
																						</span>
																						<span class="keyword">public</span>
																						<span> </span>
																						<span class="keyword">class</span>
																						<span> Phrase {   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">private</span>
																						<span> String author;   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">private</span>
																						<span> String text;   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">private</span>
																						<span> Long id;   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">public</span>
																						<span> Phrase() {   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> }   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">public</span>
																						<span> String getAuthor() {   </span>
																				</li>
																				<li class="">
																						<span>     </span>
																						<span class="keyword">return</span>
																						<span> author;   </span>
																				</li>
																				<li class="alt">
																						<span> }   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">public</span>
																						<span> </span>
																						<span class="keyword">void</span>
																						<span> setAuthor(String author) {   </span>
																				</li>
																				<li class="">
																						<span>     </span>
																						<span class="keyword">this</span>
																						<span>.author = author;   </span>
																				</li>
																				<li class="alt">
																						<span> }   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">public</span>
																						<span> String getText() {   </span>
																				</li>
																				<li class="">
																						<span>     </span>
																						<span class="keyword">return</span>
																						<span> text;   </span>
																				</li>
																				<li class="alt">
																						<span> }   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">public</span>
																						<span> </span>
																						<span class="keyword">void</span>
																						<span> setText(String text) {   </span>
																				</li>
																				<li class="">
																						<span>     </span>
																						<span class="keyword">this</span>
																						<span>.text = text;   </span>
																				</li>
																				<li class="alt">
																						<span> }   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">public</span>
																						<span> Long getId() {   </span>
																				</li>
																				<li class="">
																						<span>     </span>
																						<span class="keyword">return</span>
																						<span> id;   </span>
																				</li>
																				<li class="alt">
																						<span> }   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">public</span>
																						<span> </span>
																						<span class="keyword">void</span>
																						<span> setId(Long id) {   </span>
																				</li>
																				<li class="">
																						<span>     </span>
																						<span class="keyword">this</span>
																						<span>.id = id;   </span>
																				</li>
																				<li class="alt">
																						<span> }   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span> </span>
																						<span class="keyword">public</span>
																						<span> String toString() {   </span>
																				</li>
																				<li class="">
																						<span>  </span>
																				</li>
																				<li class="alt">
																						<span>     </span>
																						<span class="keyword">return</span>
																						<span> text;   </span>
																				</li>
																				<li class="">
																						<span> }   </span>
																				</li>
																				<li class="alt">
																						<span>  </span>
																				</li>
																				<li class="">
																						<span>}    </span>
																				</li>
																		</ol>
																</div>
														</div>
														<div class="postText">Phrase.cpm.xml<code><br /></code></div>
														<p> </p>
												</code>
										</font>
										<code>
												<font style="BACKGROUND-COLOR: #ff1493">
														<div class="code_title">xml 代码</div>
														<div class="dp-highlighter">
																<div class="bar">
																</div>
																<ol class="dp-xml">
																		<li class="alt">
																				<span>
																						<span class="tag">&lt;!--sp--&gt;<span class="tag-name">xml</span><span> </span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span class="tag">?&gt;</span><span>    </span></span>
																				</span>
																		</li>
																		<li class="">
																				<span>&lt;!--CTYPE compass-core-mapping PUBLIC    &lt;/sp--&gt;</span>
																		</li>
																		<li class="alt">
																				<span>"-//Compass/Compass Core Mapping DTD 1.0//EN"    </span>
																		</li>
																		<li class="">
																				<span>"http://static.compassframework.org/dtd/compass-core-mapping-1.0.dtd"</span>
																				<span class="tag">&gt;</span>
																				<span>    </span>
																		</li>
																		<li class="alt">
																				<span>
																				</span>
																				<span class="tag">&lt;</span>
																				<span class="tag-name">compass-core-mapping</span>
																				<span> </span>
																				<span class="attribute">package</span>
																				<span>=</span>
																				<span class="attribute-value">"org.compassframework.sample.example"</span>
																				<span class="tag">&gt;</span>
																				<span>    </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">&lt;</span>
																				<span class="tag-name">class</span>
																				<span> </span>
																				<span class="attribute">name</span>
																				<span>=</span>
																				<span class="attribute-value">"Phrase"</span>
																				<span> </span>
																				<span class="attribute">alias</span>
																				<span>=</span>
																				<span class="attribute-value">"${example.phrase}"</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">&lt;</span>
																				<span class="tag-name">id</span>
																				<span> </span>
																				<span class="attribute">name</span>
																				<span>=</span>
																				<span class="attribute-value">"id"</span>
																				<span> </span>
																				<span class="tag">/&gt;</span>
																				<span>  </span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">&lt;</span>
																				<span class="tag-name">property</span>
																				<span> </span>
																				<span class="attribute">name</span>
																				<span>=</span>
																				<span class="attribute-value">"author"</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">&lt;</span>
																				<span class="tag-name">meta-data</span>
																				<span class="tag">&gt;</span>
																				<span>${example.author}</span>
																				<span class="tag">
																						<span class="tag-name">meta-data</span>
																						<span class="tag">&gt;</span>
																						<span>  </span>
																				</span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">
																						<span class="tag-name">property</span>
																						<span class="tag">&gt;</span>
																						<span>  </span>
																				</span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">&lt;</span>
																				<span class="tag-name">property</span>
																				<span> </span>
																				<span class="attribute">name</span>
																				<span>=</span>
																				<span class="attribute-value">"text"</span>
																				<span class="tag">&gt;</span>
																				<span>  </span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">&lt;</span>
																				<span class="tag-name">meta-data</span>
																				<span class="tag">&gt;</span>
																				<span>${example.text}</span>
																				<span class="tag">
																						<span class="tag-name">meta-data</span>
																						<span class="tag">&gt;</span>
																						<span>  </span>
																				</span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">
																						<span class="tag-name">property</span>
																						<span class="tag">&gt;</span>
																						<span>  </span>
																				</span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">
																						<span class="tag-name">class</span>
																						<span class="tag">&gt;</span>
																						<span>  </span>
																				</span>
																		</li>
																		<li class="alt">
																				<span>  </span>
																		</li>
																		<li class="">
																				<span>
																				</span>
																				<span class="tag">
																						<span class="tag-name">compass-core-mapping</span>
																						<span class="tag">&gt;</span>
																						<span>  </span>
																				</span>
																		</li>
																</ol>
														</div>CompassExample.java</font>
										</code>
										<br />
										<div class="code_title">java 代码</div>
										<div class="dp-highlighter">
												<div class="bar">
												</div>
												<ol class="dp-j">
														<li class="alt">
																<span>
																		<span class="keyword">package</span>
																		<span> org.compassframework.sample.example;   </span>
																</span>
														</li>
														<li class="">
																<span>  </span>
														</li>
														<li class="alt">
																<span>
																</span>
																<span class="keyword">import</span>
																<span> org.apache.log4j.Logger;   </span>
														</li>
														<li class="">
																<span>  </span>
														</li>
														<li class="alt">
																<span>
																</span>
																<span class="keyword">import</span>
																<span> org.compassframework.core.Compass;   </span>
														</li>
														<li class="">
																<span>
																</span>
																<span class="keyword">import</span>
																<span> org.compassframework.core.Compass;   </span>
														</li>
														<li class="alt">
																<span>
																</span>
																<span class="keyword">import</span>
																<span> org.compassframework.core.CompassSession;   </span>
														</li>
														<li class="">
																<span>
																</span>
																<span class="keyword">import</span>
																<span> org.compassframework.core.CompassTransaction;   </span>
														</li>
														<li class="alt">
																<span>
																</span>
																<span class="keyword">import</span>
																<span> org.compassframework.core.config.CompassConfiguration;   </span>
														</li>
														<li class="">
																<span>  </span>
														</li>
														<li class="alt">
																<span>
																</span>
																<span class="keyword">public</span>
																<span> </span>
																<span class="keyword">class</span>
																<span> CompassExample {   </span>
														</li>
														<li class="">
																<span>  </span>
														</li>
														<li class="alt">
																<span> </span>
																<span class="keyword">private</span>
																<span> </span>
																<span class="keyword">static</span>
																<span> </span>
																<span class="keyword">final</span>
																<span> Logger logger = Logger.getLogger(CompassExample.</span>
																<span class="keyword">class</span>
																<span>);   </span>
														</li>
														<li class="">
																<span>    </span>
														</li>
														<li class="alt">
																<span> </span>
																<span class="keyword">private</span>
																<span> compasscompass;   </span>
														</li>
														<li class="">
																<span>    </span>
														</li>
														<li class="alt">
																<span> </span>
																<span class="keyword">public</span>
																<span> </span>
																<span class="keyword">static</span>
																<span> </span>
																<span class="keyword">void</span>
																<span> main(String[] args){   </span>
														</li>
														<li class="">
																<span>     </span>
																<span class="keyword">new</span>
																<span> CompassExample().process();   </span>
														</li>
														<li class="alt">
																<span> }   </span>
														</li>
														<li class="">
																<span>    </span>
														</li>
														<li class="alt">
																<span> </span>
																<span class="keyword">private</span>
																<span> </span>
																<span class="keyword">void</span>
																<span> process(){   </span>
														</li>
														<li class="">
																<span>     CompassConfiguration config = </span>
																<span class="keyword">new</span>
																<span> CompassConfiguration();   </span>
														</li>
														<li class="alt">
																<span>     config.configure(</span>
																<span class="string">"org/compassframework/sample/example/compass.cfg.xml"</span>
																<span>);   </span>
														</li>
														<li class="">
																<span>     config.addClass(Phrase.</span>
																<span class="keyword">class</span>
																<span>);   </span>
														</li>
														<li class="alt">
																<span>     compass = config.buildCompass();   </span>
														</li>
														<li class="">
																<span>     compass.getSearchEngineIndexManager().deleteIndex();   </span>
														</li>
														<li class="alt">
																<span>     compass.getSearchEngineIndexManager().createIndex();   </span>
														</li>
														<li class="">
																<span>     </span>
														</li>
														<li class="alt">
																<span>     createIndex();   </span>
														</li>
														<li class="">
																<span>     search(</span>
																<span class="string">"mule AND crazy"</span>
																<span>);   </span>
														</li>
														<li class="alt">
																<span>     search(</span>
																<span class="string">"Marisol OR Ramon"</span>
																<span>);   </span>
														</li>
														<li class="">
																<span> }   </span>
														</li>
														<li class="alt">
																<span>    </span>
														</li>
														<li class="">
																<span> </span>
																<span class="keyword">private</span>
																<span> </span>
																<span class="keyword">void</span>
																<span> createIndex(){   </span>
														</li>
														<li class="alt">
																<span>  CompassSession session = compass.openSession();   </span>
														</li>
														<li class="">
																<span>     CompassTransaction tx = session.beginTransaction();   </span>
														</li>
														<li class="alt">
																<span>     Phrase phrase = </span>
																<span class="keyword">new</span>
																<span> Phrase();   </span>
														</li>
														<li class="">
																<span>     phrase.setAuthor(</span>
																<span class="string">"Joe"</span>
																<span>);   </span>
														</li>
														<li class="alt">
																<span>     phrase.setText(</span>
																<span class="string">"I don't think it's nice you laughing. "</span>
																<span> +    </span>
														</li>
														<li class="">
																<span>            </span>
																<span class="string">"You see my mule don't like people laughing. "</span>
																<span> +    </span>
														</li>
														<li class="alt">
																<span>            </span>
																<span class="string">"He gets the crazy idea you're laughing at him. "</span>
																<span> +    </span>
														</li>
														<li class="">
																<span>            </span>
																<span class="string">"Now if you apologize like I know you're going to, "</span>
																<span> +    </span>
														</li>
														<li class="alt">
																<span>            </span>
																<span class="string">"I might convince him that you really didn't mean it..."</span>
																<span>);   </span>
														</li>
														<li class="">
																<span>     phrase.setId(</span>
																<span class="keyword">new</span>
																<span> Long(</span>
																<span class="number">1</span>
																<span>));   </span>
														</li>
														<li class="alt">
																<span>     session.save(phrase);   </span>
														</li>
														<li class="">
																<span>     tx.commit();   </span>
														</li>
														<li class="alt">
																<span>     session.close();   </span>
														</li>
														<li class="">
																<span> }   </span>
														</li>
														<li class="alt">
																<span>    </span>
														</li>
														<li class="">
																<span> </span>
																<span class="keyword">private</span>
																<span> </span>
																<span class="keyword">void</span>
																<span> search(String query){   </span>
														</li>
														<li class="alt">
																<span>     CompassSession session = compass.openSession();   </span>
														</li>
														<li class="">
																<span>     CompassTransaction tx = session.beginTransaction();   </span>
														</li>
														<li class="alt">
																<span>     Compass hits = session.find(query);   </span>
														</li>
														<li class="">
																<span>     </span>
																<span class="keyword">if</span>
																<span> (logger.isDebugEnabled()) {   </span>
														</li>
														<li class="alt">
																<span>        logger.debug(</span>
																<span class="string">"search() - Found "</span>
																<span> + hits.getLength()+</span>
																<span class="string">" hits for \""</span>
																<span>+query+</span>
																<span class="string">"\""</span>
																<span>);   </span>
														</li>
														<li class="">
																<span>     }   </span>
														</li>
														<li class="alt">
																<span>     </span>
																<span class="keyword">for</span>
																<span> (</span>
																<span class="keyword">int</span>
																<span> i = </span>
																<span class="number">0</span>
																<span>; i &lt; hits.getLength(); i++) {   </span>
														</li>
														<li class="">
																<span>        print(hits, i);   </span>
														</li>
														<li class="alt">
																<span>     }   </span>
														</li>
														<li class="">
																<span>     hits.close();   </span>
														</li>
														<li class="alt">
																<span>     tx.commit();   </span>
														</li>
														<li class="">
																<span>     session.close();   </span>
														</li>
														<li class="alt">
																<span>     compass.close();   </span>
														</li>
														<li class="">
																<span> }   </span>
														</li>
														<li class="alt">
																<span>    </span>
														</li>
														<li class="">
																<span> </span>
																<span class="keyword">private</span>
																<span> </span>
																<span class="keyword">void</span>
																<span> print(Compass hits, </span>
																<span class="keyword">int</span>
																<span> hitNumber) {   </span>
														</li>
														<li class="alt">
																<span>     Phrase value = (Phrase)hits.data(hitNumber);   </span>
														</li>
														<li class="">
																<span>     </span>
																<span class="keyword">if</span>
																<span> (logger.isDebugEnabled()) {   </span>
														</li>
														<li class="alt">
																<span>         logger.debug(</span>
																<span class="string">"print() - Phrase by "</span>
																<span> + value.getAuthor() + </span>
																<span class="string">": "</span>
																<span>  </span>
														</li>
														<li class="">
																<span>             + value.getText());   </span>
														</li>
														<li class="alt">
																<span>     }   </span>
														</li>
														<li class="">
																<span> }   </span>
														</li>
														<li class="alt">
																<span>  </span>
														</li>
														<li class="">
																<span>}   </span>
														</li>
														<li class="alt">
																<span>  </span>
														</li>
												</ol>
										</div>
										<p> </p>
										<p>
												<font size="+0">为了保证能打印出我们的测试，需要加入<font face="Courier New">log4j.properties</font> ：<br /></font>
												<font size="+0">
														<code>log4j.rootLogger=ERROR, stdout <br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender <br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n <br />log4j.logger.org.compassframework.sample.example=DEBUG </code>
														<br />
														<br />下面是打印出来的测试结果：<br /></font>
												<code>
														<font size="+0">search() - Found 1 hits for "mule AND crazy" <br />print() - Phrase by Joe: I don't think it's nice you laughing...<br />search() - Found 0 hits for "Marisol OR Ramon"</font>
												</code>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/96564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2007-01-29 18:12 <a href="http://www.blogjava.net/zhangzhong1018/articles/96564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Compass</title><link>http://www.blogjava.net/zhangzhong1018/articles/96563.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Mon, 29 Jan 2007 10:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/96563.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/96563.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/96563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/96563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/96563.html</trackback:ping><description><![CDATA[
		<table width="100%">
				<tbody>
						<tr>
								<td>
										<p>下面阐述Compass的一些名词：</p>
										<p>1：Resource，Compass对Lucene的Document的抽象，与Alias联系在一起。</p>
										<p>2：Property，Compass对Lucene的Field的抽象。通过Compass Converter framework将不是String类型的对象转换为可以索引的Property。</p>
										<p>3：RSEM：Resource/Search Engine Mapping，资源搜索引擎影射。</p>
										<p>4：Lucene采用IndexReader、Searcher、IndexWriter三个类完成索引搜索的功能。而Compass只有一个简单的接口，能够通过该接口实现所有的操作。</p>
										<p>5：事务索引和集成：lucene是非事务性的。无法和事务型的系统进行结合。Compass提供两种提交事务：read_committed 和 serializable。</p>
										<p>6：快速更新：lucene中，执行更新必须先删除旧的Document，然后再新建一个Document。由于Compass支持事务索引，因此每个要保存的Resource都必须有一个唯一标识。这样更新的效率会更高。</p>
										<p>7： All 支持：在lucene中，没有办法对一个Document的所有的字段进行搜索，要对所有字段进行搜索，必须创建一个包含所有field的一个 "all"field。compass默认地建立一个"all"属性，并且该"all"属性充当默认的搜索Field，当然，"all"property 可以设置成enabled或disabled、重命名或者不充当默认的搜索Property，也可以排除all中的某些属性。</p>
										<p>8：索引分块，</p>
										<p>来源:http://bbs.xml.org.cn/blog/more.asp?name=lhwork&amp;id=18505</p>
										<p>作者：<a href="/hellboys/" target="_blank"> 地狱男爵</a></p>
										<p>compass官方网站: <a href="http://www.compassframework.org/" target="_blank">http://www.compassframework.org/</a></p>
										<p>Compass是一流的JAVA搜索框架，可以快速修饰你的应用，使其具备Searchable的能力。</p>
										<p>在没有Compass，单纯用Lucene的环境里，一般做法是定期遍历数据库，编码将里面的内容转为索引。</p>
										<p>而Compass通过与 Hibernate和 Spring的结合，简单的为Domain Object提供了到Lucene引擎的映射，而且索引库能够随Domain Object同步更新(Data Mirror)。</p>
										<p> </p>
										<p>1 <a href="http://www.springside.org.cn/docs/reference/Compass1.htm">Quick Start</a></p>
										<p>2 <a href="http://www.springside.org.cn/docs/reference/Compass3.htm">对象/搜索引擎映射(OSEM)</a></p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/96563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2007-01-29 18:11 <a href="http://www.blogjava.net/zhangzhong1018/articles/96563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocoon xsp </title><link>http://www.blogjava.net/zhangzhong1018/articles/96114.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Fri, 26 Jan 2007 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/96114.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/96114.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/96114.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/96114.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/96114.html</trackback:ping><description><![CDATA[
		<p>XSP (eXtensible Server Page )作为Cocoon的一个重要的组成部分可以为Cocoon的pipeline生成XML文件。XSP文件本身是XML文件，遵循XML的规范，但是支持在XML文件中包含程序代码。XSP借助<a href="http://jakarta.apache.org/bsf">Bean Scripting Framework</a>支持多种语言，包括Java，Javascript，Python 等。</p>
		<p>XSP文件的根元素为&lt;page&gt;，通常使用xsp名字空间（&lt;xsp:page&gt;）。<br />一个简单的例子如：<br /><a id="more-612"></a><br /><code>1: &lt;?xml version="1.0"?&gt;<br />2: &lt;?cocoon-process type=”xsp”?&gt;<br />3: <br />4: &lt;xsp:page<br />5: language=”java”<br />6: xmlns:xsp=”http://apache.org/xsp”&gt;<br />7: <br />8: &lt;date&gt;<br />9: &lt;xsp:expr&gt;new java.util.Date().toString()&lt;/xsp:expr&gt;<br />10: &lt;/date&gt;<br />11: &lt;/xsp:page&gt;</code></p>
		<p>2004年出版的Professional XML Development with Apache Tools: Xerces, Xalan, FOP, Cocoon, Axis, Xindice一书称2行是必须的，但是我在Cocoon 2.1.9下测试发现，其中的第2行声明可以去掉。</p>
		<p>下面看一个在XSP里定义一个函数的例子：</p>
		<p>
				<code>1: &lt;?xml version="1.0"?&gt;<br />2: &lt;?cocoon-process type=”xsp”?&gt;<br />3: <br />4: &lt;xsp:page<br />5: language=”java”<br />6: xmlns:xsp=”http://apache.org/xsp”&gt;<br />7: <br />8: &lt;xsp:structure&gt;<br />9: &lt;xsp:include&gt;java.util.Date&lt;/xsp:include&gt;<br />10: &lt;/xsp:structure&gt;<br />11: <br />12: &lt;xsp:logic&gt;<br />13: String getDate() {<br />14: Date d = new Date();<br />15: return d.toString();<br />16: }<br />17: &lt;/xsp:logic&gt; <br />18: <br />19: &lt;date&gt;<br />20: &lt;xsp:expr&gt;getDate()&lt;/xsp:expr&gt;<br />21: &lt;/date&gt;<br />22: &lt;/xsp:page&gt;<br /></code>
		</p>
		<p>可以看到，定义函数的代码被放在了&lt;xsp:logic&gt;元素里，另外使用&lt;xsp:structure&gt;和其子元素&lt;xsp:include&gt;元素可以导入Java的类。</p>
		<p>完整的XSP元素列表如下：</p>
		<ul>
				<li>
						<p>&lt;<strong>?cocoon-process?</strong>&gt; This processing instruction (PI) tells Cocoon how to process this file. You may have multiple cocoon-process PIs because Cocoon can process an XSP page in two different ways. It can process the document as an XSP file, causing the language code to be executed. To indicate this style of processing, specify “xsp” as the value of the type pseudo-attribute. Cocoon can also use an XSL stylesheet to transform the document. This can occur either before or after the XSP processing. The processing order is determined by the order in which the PIs appear in the document. To use a stylesheet with an XSP document, specify “xslt” as the value of the type pseudo-attribute. If you use a stylesheet with the document, you need to supply an XML stylesheet processing instruction that tells where to find the stylesheet. (See the next item.)</p>
				</li>
				<li>
						<p>&lt;<strong>?xml-stylesheet?</strong>&gt; This PI is defined by the W3C’s Associating Style Sheets with XML Documents recommendation. Associating a stylesheet is easy; you supply two pseudo-attributes. The href pseudo-attribute contains the URI for the stylesheet, and the type pseudo-attribute contains the MIME type of the stylesheet, which should be “text/xsl” for XSLT stylesheets.</p>
				</li>
				<li>
						<p>&lt;<strong>xsp:page</strong>&gt; The root element of an XSP page is &lt;xsp:page&gt;. It takes a language attribute that allows you to specify the programming language being used in the XSP. You’ll probably also define some namespace prefixes on this element. The minimum would be for you to define the xsp prefix. The &lt;xsp:page&gt; must contain at least one user-defined element that’s used as the root element of the XSP result.</p>
				</li>
				<li>
						<p>&lt;<strong>xsp:structure</strong>&gt; This element is a container for &lt;xsp:include&gt; elements. </p>
				</li>
				<li>
						<p>&lt;<strong>xsp:include</strong>&gt; XSP uses the &lt;xsp:include&gt; element to import type definitions that are needed by the rest of the XSP. In Java, these are specified either as fully qualified classnames or in wildcarded package style, like java.util.*.</p>
				</li>
				<li>
						<p>&lt;<strong>xsp:logic</strong>&gt; The implementation of the logic of an XSP should be the content of the &lt;xsp:logic&gt; element. For Java-based XSPs, this includes member fields and methods.</p>
				</li>
				<li>
						<p>&lt;<strong>xsp:expr</strong>&gt; An &lt;xsp:expr&gt; element invokes logic in the &lt;xsp:logic&gt; to return a string valued expression. In Java, this is through method calls, field accesses, or string literals. Java string literals that appear as the content of an &lt;xsp:expr&gt; tag must be inside double quotes (”").</p>
				</li>
				<li>
						<p>&lt;<strong>xsp:element</strong>&gt; This element allows you to dynamically create an element in the output XML. The &lt;xsp:element&gt; element takes a name attribute whose value is the name of the element to be created. You can nest these elements to create element subtrees dynamically. You can also insert literal XML elements and character data as part of the content of this element.</p>
				</li>
				<li>
						<p>&lt;<strong>xsp:attribute</strong>&gt; The &lt;xsp:attribute&gt; element should appear as the child of either an &lt;xsp:element&gt; element or a literal XML element. It allows you to dynamically create an attribute by supplying a name attribute for the name of the new attribute. The value of the new attribute is the content of the &lt;xsp:attribute&gt; element.</p>
				</li>
				<li>
						<p>&lt;<strong>xsp:comment</strong>&gt; To create a comment in the XSP output, use the &lt;xsp:comment&gt; element and make the content of the element the text of your comment.</p>
				</li>
				<li>
						<p>&lt;<strong>xsp:pi</strong>&gt; The &lt;xsp:pi&gt; element allows you to create processing instructions. You supply a target attribute that defines the PI target name. If you wish to create pseudo-attributes, you do so via &lt;xsp:expr&gt; elements in the content of the &lt;xsp:pi&gt; element. So, to create a PI that looks like &lt;?xml-stylesheet href=”sheet.xsl” type=”text/xsl”?&gt;, your &lt;xsp:pi&gt; element would look like this:</p>
						<pre>&lt;xsp:pi target="xml-stylesheet"&gt;    &lt;xsp:expr&gt;"href=\"sheet.xsl\" type=\"text/xsl\""&lt;/xsp:expr&gt;  &lt;/xsp:pi&gt;</pre>
				</li>
				<li>&lt;<strong>xsp:content</strong>&gt; You can use the &lt;xsp:content&gt; element inside an &lt;xsp:logic&gt; element to insert the Java code for an XSP fragment at that point on the program. This is particularly useful for inserting an XSP fragment that is to be output as the body of a loop. </li>
		</ul>
		<ul>
				<li>xsp:page — XSP 文档的根元素，它必须只包含一个用户元素 
</li>
				<li>xsp:structure、xsp:include — 允许将附加的 Java 类导入到 XSP 的已编译版本中 
</li>
				<li>xsp:logic — 允许在 XSP 的已编译版本中包含附加的编程代码块；这可以包含成员变量、方法或应用程序逻辑 
</li>
				<li>xsp:expr — 允许对 Java 表达式求值，并将它们的值添加到文档 
</li>
				<li>xsp:element — 允许 XSP 动态创建元素；这些元素可以用任意名称创建，并且可以与任何名称空间和前缀关联 
</li>
				<li>xsp:attribute — 允许将属性动态地添加到元素；这些属性可以用任意名称和值创建，并且可以与任何名称空间关联 
</li>
				<li>xsp:comment — 允许将注释添加到已生成的文档 
</li>
				<li>xsp:pi — 允许动态创建处理指令，并将之添加到已生成的文档 
</li>
				<li>xsp:parameter — 允许为元素或属性生成名称 </li>
		</ul>
		<p>
				<a id="more-620">
				</a>
		</p>
		<p>通过使用 xsp:element，还可以动态地创建元素，如：</p>
		<p>&lt;xsp:element&gt;<br />&lt;xsp:param name="name"&gt;&lt;xsp:expr&gt;"myElementName"&lt;/xsp:expr&gt;&lt;/xsp:param&gt;<br />Element content<br />&lt;/xsp:element&gt;</p>
		<p>这个示例显示了用动态生成名称创建元素涉及使用 xsp:element 和 xsp:param 元素。xsp:param定义了一个参数，在本例中是元素的名称，其值是一个用于计算元素名称的表达式。</p>
		<p>上面的代码将生成 XML 输出</p>
		<p>
				<code>&lt;myElementName&gt;Element content&lt;/myElementName&gt; </code>
		</p>
		<p>用这种方式创建的元素还可以与一个特定的名称空间和前缀关联，如下例所示。请注意：这两个名称空间和前缀参数都是必需的；否则将产生错误。</p>
		<p>
				<code>&lt;xsp:element prefix="my" uri="http://www.examples.org"&gt;<br />&lt;xsp:param name="name"&gt;&lt;xsp:expr&gt;"myElementName"&lt;/xsp:expr&gt;&lt;/xsp:param&gt;<br />Element content<br />&lt;/xsp:element&gt;</code>
		</p>
		<p>这个示例生成了以下 XML 输出：</p>
		<p>&lt;my:myElementName xmlns:my="http://www.examples.org"&gt;Element content&lt;/my:myElementName&gt; </p>
		<p>如同元素一样，可以在 XSP 页面中动态创建属性。xsp:attribute 元素的工作原理类似于 xsp:element，它允许动态创建属性的名称及其值：</p>
		<p>&lt;xsp:element&gt;<br />&lt;xsp:param name="name"&gt;&lt;xsp:expr&gt;"myElementName"&lt;/xsp:expr&gt;&lt;/xsp:param&gt;<br />&lt;xsp:attribute name="myAttribute"&gt;myAttributeValue&lt;/xsp:attribute&gt;<br />Element content<br />&lt;/xsp:element&gt;</p>
		<p>这个属性的名称定义在 name 属性内，尽管是用与 xsp:element 类似的方法定义的，但它还能通过使用 xsp:param 子元素来定义。属性值被指定成元素内容。这可以是一个简单文本值或更有效地由 xsp:expr 元素生成。</p>
		<p>而 xsp:attribute 标记不必与 xsp:element 结合使用。它可以被放置在任何用户元素内，而且可以用相同的方法添加属性。例如，可以通过使用调用定义在 XSP 页面别处的方法的表达式来动态创建 image 元素的 URL。</p>
		<p>&lt;image&gt;<br />&lt;xsp:attribute name="href"&gt;&lt;xsp:expr&gt;calculateImageURL()&lt;/xsp:expr&gt;&lt;/xsp:attribute&gt;<br />&lt;/image&gt; </p>
		<p>如果生成的属性与特定的名称空间关联，那么这可以通过使用附加的 prefix 和 uri 属性或 xsp:param 元素来表示，它类似于用于 xsp:element 的方法。同样，如果只定义了其中的一个，则是一个错误。 </p>
		<p>
				<strong>创建注释和处理指令</strong>
		</p>
		<p>xsp:comment 和 xsp:pi 元素用于创建注释和处理指令。</p>
		<p>创建注释十分简单。任何作为 xsp:comment 元素的子元素而提供的文本都变成了 XML 注释：</p>
		<p>
				<code>&lt;xsp:comment&gt;This is a comment&lt;/xsp:comment&gt;</code>
		</p>
		<p>然后这个注释变成：</p>
		<p>
				<code>&lt;!-- This is a comment --&gt;</code>
		</p>
		<p>创建处理指令类似于创建动态元素或属性。xsp:pi 元素应该有一个标识处理指令目标的嵌套参数。照例对 xsp:pi 元素的剩余内容求值。这里是一个简单示例：</p>
		<p>
				<code>&lt;xsp:pi target="myApplication"&gt;<br />&lt;xsp:expr&gt;"param1=value, param2=value, generatorTimestamp=" +<br />System.currentTimeMillis()&lt;/xsp:expr&gt;<br />&lt;/xsp:pi&gt; </code>
		</p>
		<p>输出如下：</p>
		<p>
				<code>&lt;?myApplication param1=value, param2=value, generatorTimestamp=1017407796870?&gt;</code>
		</p>
		<p>还可以通过在 xsp:param 元素内创建处理指令的目标来自动生成它，如同以下示例演示的那样：</p>
		<p>
				<code>&lt;xsp:pi&gt;<br />&lt;xsp:param name="target"&gt;&lt;xsp:expr&gt;"myApplication"&lt;/xsp:expr&gt;&lt;/xsp:param&gt;<br />&lt;xsp:expr&gt;"param1=value, param2=value, generatorTimestamp=" +<br />System.currentTimeMillis()&lt;/xsp:expr&gt;<br />&lt;/xsp:pi&gt;<br /></code>
		</p>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/96114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2007-01-26 12:02 <a href="http://www.blogjava.net/zhangzhong1018/articles/96114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate Q&amp;A (often)</title><link>http://www.blogjava.net/zhangzhong1018/articles/78307.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Tue, 31 Oct 2006 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/78307.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/78307.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/78307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/78307.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/78307.html</trackback:ping><description><![CDATA[
		<p>　　１、到底在哪用cascade="..."？<br />　　<br />　　cascade属性并不是多对多关系一定要用的，有了它只是让我们在插入或删除对像时更方便一些，<br />    只要在cascade的源头上插入或是删除，所有cascade的关系就会被自己动的插入或是删除。<br />    便是为了能正确的cascade，unsaved-value是个很重要的属性。<br />    Hibernate通过这个属性来判断一个对象应该save还是update，如果这个对象的id是unsaved-value的话，<br />    那说明这个对象不是persistence object要save（insert)；如果id是非unsaved-value的话，<br />    那说明这个对象是persistence object（数据库中已存在），只要update就行了。saveOrUpdate方法用的也是这个机制。<br />　　<br />　　２、到底在哪用inverse="ture"?<br />　　<br />　　inverse属性默认是false的，就是说关系的两端都来维护关系。这个意思就是说，<br />    如有一个Student, Teacher和TeacherStudent表，Student和Teacher是多对多对多关系，<br />    这个关系由TeacherStudent这个表来表现。那么什么时候插入或删除TeacherStudent表中的记录来维护关系呢？<br />    在用hibernate时，我们不会显示的对TeacherStudent表做操作。对TeacherStudent的操作是hibernate帮我们做的。<br />    hibernate就是看hbm文件中指定的是"谁"维护关系，那个在插入或删除"谁"时，就会处发对关系表的操作。<br />    前提是"谁"这个对象已经知道这个关系了，就是说关系另一头的对象已经set或是add到"谁"这个对象里来了。<br />    前面说过inverse默认是false，就是关系的两端都维护关系，对其中任一个操作都会处发对表系表的操作。<br />    当在关系的一头，如Student中的bag或set中用了inverse＝"true"时，那就代表关系是由另一关维护的（Teacher）。<br />    就是说当这插入Student时，不会操作TeacherStudent表，即使Student已经知道了关系。<br />    只有当Teacher插入或删除时才会处发对关系表的操作。所以，当关系的两头都用inverse="true"是不对的，<br />    就会导致任何操作都不处发对关系表的操作。当两端都是inverse="false"或是default值是，<br />    在代码对关系显示的维护也是不对的，会导致在关系表中插入两次关系。<br />　　<br />　　在一对多关系中inverse就更有意义了。在多对多中，在哪端inverse="true"效果差不多（在效率上）。<br />    但是在一对多中，如果要一方维护关系，就会使在插入或是删除"一"方时去update"多"方的每一个与这个"一"的对象有关系的对象。<br />    而如果让"多"方面维护关系时就不会有update操作，因为关系就是在多方的对象中的，直指插入或是删除多方对象就行了。<br />    当然这时也要遍历"多"方的每一个对象显示的操作修关系的变化体现到DB中。不管怎样说，还是让"多"方维护关系更直观一些。<br />　　<br />　　３、cascade和inverse有什么区别？<br />　　<br />　　可以这样理解，cascade定义的是关系两端对象到对象的级联关系；而inverse定义的是关系和对象的级联关系。<br />　　<br />　　４、net.sf.hibernate.ObjectDeletedException: deleted object would be re-saved by <br />     cascade (remove deleted object from associations): 2, of class: Xxxxx</p>
		<p>　　这个问题出现在要删除关系的一头时。如，要删除一个已经和Student有关系的Teacher。当tx.commit();<br />    时才会抛出这个异常。这时一个在关系另一头的Student对象中的Set或是List中把这个Teacher对象显示的remove掉，<br />    再session.delete(这个teacher);。这是为了防止在Student端有cascade时把这个Teacher对象再存回DB。<br />    所以，这个异常的只有在Student的关系定义中有cascade="..."，而且没有像上面说的显示的解除关系时才会出现。<br />    所以防止出现这个异常的方法就是：1，在Student端不用cascade；2，或是用cascade的话，就显示的删除对像中的关系。<br />    3，在Teacher端要用cascade<br />　　<br />　　５、net.sf.hibernate.HibernateException: identifier of an instance of my.MyObject altered from N to N<br />　　<br />　　这个异常其时不是多对多中常遇到的，但是这个异常的提示不make sense，所以提一下，<br />    是因为id的java对象中的type和hbm文件中定义的不一样，如：java中用long，而hbm中用type="integer"，<br />    并且generator用的是identity时就会出现</p>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/78307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2006-10-31 16:16 <a href="http://www.blogjava.net/zhangzhong1018/articles/78307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate summarize</title><link>http://www.blogjava.net/zhangzhong1018/articles/78306.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Tue, 31 Oct 2006 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/78306.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/78306.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/78306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/78306.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/78306.html</trackback:ping><description><![CDATA[　1.两种配置文件：<br />　　A.hibernate.cfg.xml和B.hibernate.properties<br />　　<br />　　A中可含映射文件的配置，而B中hard codes加映射文件。<br />　　<br />　　A.Configuration config=new Configuration().config();<br />　　B. Configuration config=new Configuration();<br />　　config.addClass(TUser.class);<br />　　<br />　　2.你不必一定用hibernate.cfg.xml或hibernate.properties这两文件名，你也不一定非得把配置文件放在Classes下，　　File file=new File("c:\\sample\\myhibernate.xml");　　Configuration config=new Configuration().config(file);<br />　　<br />　　3. session.Flush() 强制数据库立即同步，当用事务时，不必用flush,事务提交自动调用flush在session关闭时也会调用flush<br />　　<br />　　4. Hibernate总是使用对象类型作为字段类型<br />　　<br />　　5. XDoclet专门建立了hibernate doclet,就是在java代码上加上一些java docTag，后来再让XDoclet分析该java代码，生成映射文件;<br />　　<br />　　6.HQL子句本身大小写无关，但是其中出现的类名和属性名必须注意大小写区分。<br />　　<br />　　7.关系：　 Constrained : 约束，表明主控表的主键上是否存在一个外键（foreigh key）对其进行约束。<br />　　<br />　　property-ref:关联类中用于与主控类相关联的属性名，默认为关联类的主键属性名<br />　　<br />　　单向一对多需在一方配置，双向一对多需在双方进行配置<br />　　<br />　　8.lazy=false:被动方的记录由hibernate负责记取，之后存放在主控方指定的Collection类型属性中<br />　　<br />　　9. java.util.Set或net.sof.hibernate.collecton.Bag类型的Collection<br />　　<br />　　10.重要：inverse:用于标识双向关联中的被动方一端。<br />　　<br />　　inverse=false的一方（主控方）负责维护关联关系.默认值：false<br />　　<br />　　11.batch-size:采用延迟加载特征时，一次读入的数据数昨。<br />　　<br />　　12.一对多通过主控方更新（主控方为一方时）<br />　　<br />　　user.getAddresses().add(addr);<br />　　<br />　　session.save(user);//通过主控对象级联更新<br />　　<br />　　13.在one-to-many 关系中，将many 一方设为主动方（inverse=false）将有助性能的改善。在一方设置关系时，inverse=true,即将主控权交给多方，　　这样多方可主动从一方获得foreign key,然后一次insert即可完工。<br />　　<br />　　addr.setUser(user);//设置关联的TUser对象<br />　　<br />　　user.getAddresses().add(addr);<br />　　<br />　　session.save(user);//级联更新<br />　　<br />　　14.只有设为主控方的一方才关心（访问）对方的属性，被动方是不关心对方的属性的。<br />　　<br />　　15.one-to-many与many-to-one节点的配置属性不同：<br />　　<br />　　一对多关系多了lazy和inverse两个属性多对多节点属性：<br />　　<br />　　column:中间映射表中，关联目标表的关联字段<br />　　<br />　　class:类名，关联目标类<br />　　<br />　　outer-join:是否使用外联接<br />　　<br />　　注意:access是设置属性值的读取方式。<br />　　<br />　　column是设置关联字段。<br />　　<br />　　16.多对多，注意两方都要设置inverse和lazy,cascade只能设为insert-update<br />　　<br />　　多对多关系中，由于关联关系是两张表相互引用，因此在保存关系状态时必须对双方同时保存。<br />　　<br />　　group1.getRoles().add(role1);　　role1.getGroups().add(group1);<br />　　<br />　　session.save(role1);　　session.save(group1);<br />　　<br />　　17.关于vo和po　　vo经过hibernate容量处理，就变成了po(该vo的引用将被容器保存，并且在session关闭时flush,因此po如果再传到其它地方改变了，就危险了)　　　 vo和po相互转换：BeanUtils.copyProperties(anotherUser,user);<br />　　<br />　　18.对于save操作而言，如果对象已经与Session相关联（即已经被加入Session的实体容器中），则无需进行具体的操作。因为之后的Session.flush过程中，Hibernate 会对此实体容器中的对象进行遍历，查找出发生变化的实体，生成并执行相应的update 语句。<br />　　<br />　　19.如果我们采用了延迟加载机制，但希望在一些情况下，实现非延迟加 载时的功能，也就是说，我们希望在Session关闭后，依然允许操作user的addresses 属性 Hibernate.initialize方法可以通过强制加载关联对象实现这一功能： 这也正是我们为什么在编写POJO时，必须用JDK Collection接口（如Set,Map）, 而非特定的JDK Collection实现类（如HashSet、HashMap）申明Collection属性的 原因。<br />　　<br />　　20.事务：从sessionFactory获得session,其自动提交属性就已经关闭(AutoCommit=false),此时若执行了jdbc操作，如果不显式调用session.BeginTransaction(),是不会执行事务操作的。<br />　　<br />　　jdbc transaction:基于同一个session(就是同一个connection)的事务;<br />　　<br />　　jta　transaction:跨session（跨connection）事务.<br />　　<br />　　对于jta事务，有三种实现方法：<br />　　<br />　　A。UserTransaction tx=new InitialContext().lookup("...");<br />　　tx.commit();<br />　　<br />　　B. 使用hibernate封装的方法：(不推荐)<br />　　<br />　　Transaction tx=session.beginTransaction();<br />　　tx.commit();<br />　　C. 使用ejb之sessionBean的事务技持方法，你只要在把需要在发布描述符中，把需要jta事务的方法声明为require即可<br />　　<br />　　21.悲观锁，乐观锁：　　乐观锁一般通过version来实现，注意version节点必须出现在id后。<br />　　<br />　　22.Hibernate中，可以通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围。<br />　　<br />　　Query接口中也提供了与其一致的方法，hibernate主要在dialect类中实现在这个功能。<br />　　<br />　　23.cache<br />　　<hibernate-configuration><br />　　<session-factory> ……<br />　　<property name="hibernate.cache.provider_class"><br />　　net.sf.ehcache.hibernate.Provider　 </property><br />　　<br />　　还需对ecache本身进配置<br />　　<ehcache><diskstore path="java.io.tmpdir" /><br />　　<defaultcache 内存不足时，是否启用磁盘缓存="" overflowtodisk="true" 缓存数据的生存时间="" timetoliveseconds="120" 缓存数据钝化时间="" timetoidleseconds="120" cache中数据是否为常量="" eternal="false" cache中最大允许保存的数据数量="" maxelementsinmemory="10000" />　 </ehcache><br />　　<br />　　之后在映射文件中指定各个映射实体的cache策略<br />　　<class name=" org.hibernate.sample.TUser" ....=""><br />　　<cache usage="read-write" /><br />　　....<br />　　<set name="addresses" ....=""><br />　　<cache usage="read-only" /><br />　　....<br />　　</set></class><br />　　<br />　　***************************************************** Query.list()跟Query.iterate()的不同： 对于query.list()总是通过一条sql语句获取所有记录,然后将其读出，填入pojo返回; 但是query.iterate()，则是首先通过一条Select SQL 获取所有符合查询条件的记录的 id，再对这个id 集合进行循环操作，通过单独的Select SQL 取出每个id 所对应的记 录，之后填入POJO中返回。<br />　　<br />　　也就是说，对于list 操作，需要一条SQL 完成。而对于iterate 操作，需要n+1 条SQL。，list方法将不会从Cache中读取数据。iterator却会。<br />　　<br />　　24.ThreadLocal:它会为每个线程维护一个私有的变量空间。实际上， 其实现原理是在JVM 中维护一个Map，这个Map的key 就是当前的线程对象，而value则是 线程通过ThreadLocal.set方法保存的对象实例。当线程调用ThreadLocal.get方法时， ThreadLocal会根据当前线程对象的引用，取出Map中对应的对象返回。<br />　　<br />　　这样，ThreadLocal通过以各个线程对象的引用作为区分，从而将不同线程的变量隔离开来。<br />　　<br />　　25.Hibernate官方开发手册标准示例:<br />　　<br />　　public class HibernateUtil { private static SessionFactory sessionFactory;<br />　　static { try { // Create the SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();<br />　　} catch (HibernateException ex) { throw new RuntimeException( "Configuration problem: " + ex.getMessage(), ex );<br />　　} } public static final ThreadLocal session = new ThreadLocal();<br />　　public static Session currentSession() throws HibernateException { Session s = (Session) session.get();<br />　　// Open a new Session, if this Thread has none yet if (s == null) { s = sessionFactory.openSession();<br />　　session.set(s);<br />　　} return s;<br />　　} public static void closeSession() throws HibernateException { Session s = (Session) session.get();<br />　　session.set(null);<br />　　if (s != null) s.close();<br />　　} }<br />　　<br />　　26.通过filter实现session的重用：<br />　　<br />　　public class PersistenceFilter implements Filter { protected static ThreadLocal hibernateHolder = new ThreadLocal();<br />　　public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { hibernateHolder.set(getSession());<br />　　try { …… chain.doFilter(request, response);<br />　　…… } finally { Session sess = (Session)hibernateHolder.get();<br />　　if (sess != null) { hibernateHolder.set(null);<br />　　try { sess.close(); } catch (HibernateException ex) { throw new ServletException(ex);<br />　　} } } } ……}<b div="">&lt;&gt; <br /></b></session-factory></hibernate-configuration><img src ="http://www.blogjava.net/zhangzhong1018/aggbug/78306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2006-10-31 16:14 <a href="http://www.blogjava.net/zhangzhong1018/articles/78306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate many-to-many case</title><link>http://www.blogjava.net/zhangzhong1018/articles/78297.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Tue, 31 Oct 2006 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/78297.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/78297.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/78297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/78297.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/78297.html</trackback:ping><description><![CDATA[
		<p>
				<font size="&quot;2&quot;">SQL(MY SQL):<br />create table tgroup (<br />  group_id int not null auto_increment,<br />  name varchar(16) not null default ´´,<br />  primary key  (group_id)<br />) type=innodb;</font>
		</p>
		<p>
				<font size="&quot;2&quot;">create table trole (<br />  role_id int not null auto_increment,<br />  name varchar(16) not null default ´´,  <br />  primary key  (role_id)<br />) type=innodb;</font>
		</p>
		<p>
				<font size="&quot;2&quot;">create table tgroup_role (<br />  group_id int not null,<br />  role_id int not null,<br />  primary key(group_id, role_id),<br />  index (group_id),<br />  foreign key (group_id) references tgroup(group_id),<br />  index (role_id),<br />  foreign key (role_id) references trole(role_id)<br />) type=innodb;</font>
		</p>
		<p>
				<font size="&quot;2&quot;">Group 类：<br />package ivan.hibernate.many2many;<br />public class Group {<br />   private int id;<br />   private String name;<br />   private Set roles = new HashSet();<br />   ...<br />}</font>
		</p>
		<p>
				<font size="&quot;2&quot;">Group.hbm.xml：<br />&lt;hibernate-mapping&gt;<br />    &lt;class name="ivan.hibernate.many2many.Group" table="tgroup"&gt;<br />        &lt;id name="id" column="group_id" unsaved-value="0"&gt;<br />            &lt;generator class="increment"/&gt;<br />        &lt;/id&gt;<br />        &lt;property name="name" type="string"/&gt;       <br />        &lt;set name="roles"<br />             table="tgroup_role"<br />             <strong>cascade="save-update"&gt;</strong>             <br />             &lt;key column="group_id"/&gt;<br />             &lt;many-to-many class="ivan.hibernate.many2many.Role"<br />                           column="role_id"/&gt;<br />       &lt;/set&gt;<br />    &lt;/class&gt;<br />&lt;/hibernate-mapping&gt;</font>
		</p>
		<p>
				<font size="&quot;2&quot;">Role 类：<br />package ivan.hibernate.many2many;<br />public class Role {<br />   private int id;<br />   private String name;<br />   private Set groups = new HashSet();<br />   ...<br />}</font>
		</p>
		<p>
				<font size="&quot;2&quot;">Role.hbm.xml：<br />&lt;hibernate-mapping&gt;<br />    &lt;class name="ivan.hibernate.many2many.Role" table="trole"&gt;<br />        &lt;id name="id" column="role_id" unsaved-value="0"&gt;<br />            &lt;generator class="increment"/&gt;<br />        &lt;/id&gt;<br />        &lt;property name="name" type="string"/&gt;       <br />        &lt;set name="groups"<br />             table="tgroup_role"<br />             </font>
				<font size="&quot;2&quot;">
						<strong>inverse="true"<br /></strong>             <strong>cascade="save-update"&gt;</strong>             <br />             &lt;key column="role_id"/&gt;<br />             &lt;many-to-many class="ivan.hibernate.many2many.Group"<br />                           column="group_id"/&gt;<br />  &lt;/set&gt;<br />    &lt;/class&gt;<br />&lt;/hibernate-mapping&gt;</font>
		</p>
		<p>
				<font size="&quot;2&quot;">hibernate.cfg.xml 同前面的例子差不多。</font>
		</p>
		<p>
				<font size="&quot;2&quot;">public class Test {<br /> <br /> public static void main(String[] args) throws HibernateException {<br />     <br />  Role role1 = new Role(); <br />  role1.setName("Role1");<br />  Role role2 = new Role();<br />  role2.setName("Role2");<br />  Role role3 = new Role();<br />  role3.setName("Role3");<br />  Group group1 = new Group();<br />  group1.setName("group1");<br />  Group group2 = new Group();<br />  group2.setName("group2");<br />  Group group3 = new Group();<br />  group3.setName("group3");<br />  group1.getRoles().add(role1);<br />  group1.getRoles().add(role2);<br />  group2.getRoles().add(role2);<br />  group2.getRoles().add(role3);<br />  group3.getRoles().add(role1);<br />  group3.getRoles().add(role3);<br />  role1.getGroups().add(group1);<br />  role1.getGroups().add(group3);<br />  role2.getGroups().add(group1);<br />  role2.getGroups().add(group2);<br />  role3.getGroups().add(group2);<br />  role3.getGroups().add(group3);<br /> <br />  SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();<br />  Session session = sessionFactory.openSession();<br />  Transaction tx= session.beginTransaction();<br />  session.save(role1);<br />  session.save(role2);<br />  session.save(role3);<br />  session.save(group1);<br />  session.save(group2);<br />  session.save(group3);<br />  tx.commit();<br />  session.close();<br />  sessionFactory.close();<br /> }<br />}</font>
		</p>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/78297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2006-10-31 15:47 <a href="http://www.blogjava.net/zhangzhong1018/articles/78297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用cocoon call webservice 生成 html，excel </title><link>http://www.blogjava.net/zhangzhong1018/articles/75830.html</link><dc:creator>天边一片伴月星</dc:creator><author>天边一片伴月星</author><pubDate>Wed, 18 Oct 2006 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhangzhong1018/articles/75830.html</guid><wfw:comment>http://www.blogjava.net/zhangzhong1018/comments/75830.html</wfw:comment><comments>http://www.blogjava.net/zhangzhong1018/articles/75830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangzhong1018/comments/commentRss/75830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangzhong1018/services/trackbacks/75830.html</trackback:ping><description><![CDATA[
		<p>xsp 代码<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;</p>
		<p>&lt;xsp:page language="java"<br />  xmlns:xsp="<a href="http://apache.org/xsp">http://apache.org/xsp</a>"<br />  xmlns:xsp-request="<a href="http://apache.org/xsp/request/2.0">http://apache.org/xsp/request/2.0</a>"<br />  xmlns:xscript="<a href="http://apache.org/xsp/xscript/1.0">http://apache.org/xsp/xscript/1.0</a>"<br />  xmlns:soap="<a href="http://apache.org/xsp/soap/3.0">http://apache.org/xsp/soap/3.0</a>" &gt;<br />  <br />  &lt;page&gt;<br />      &lt;content&gt;<br />      &lt;xsp:logic&gt;</p>
		<p>       String cFCType= request.getParameter("cFCType");<br />       String cPFrom= request.getParameter("cPFrom");<br /> &lt;para&gt;<br />        &lt;xsp:expr&gt;iStartYear&lt;/xsp:expr&gt;<br /> &lt;/para&gt;<br /> &lt;para&gt;<br />   &lt;soap:call url="<a href="http://gpaukwsa.gpe-hkg.com:8080/wsa/wsa1">http://gpaukwsa.gpe-hkg.com:8080/wsa/wsa1</a>"&gt;<br />     &lt;ns1:getcurrforecast xmlns:ns1="urn:www.gpe.com:forecast:forecast"&gt;<br />     &lt;soap:enc/&gt;<br />      &lt;cFCType xsi:type="xsd:string" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xmlns:xsd="<a href="http://www.w3.org/2001/XMLSchema&quot;&gt;&lt;xsp:expr&gt;cFCType&lt;/xsp:expr&gt;&lt;/cFCType">http://www.w3.org/2001/XMLSchema"&gt;&lt;xsp:expr&gt;cFCType&lt;/xsp:expr&gt;&lt;/cFCType</a>&gt;<br />      &lt;cPFrom xsi:type="xsd:string" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xmlns:xsd="<a href="http://www.w3.org/2001/XMLSchema&quot;&gt;&lt;xsp:expr&gt;cPFrom&lt;/xsp:expr&gt;&lt;/cPFrom">http://www.w3.org/2001/XMLSchema"&gt;&lt;xsp:expr&gt;cPFrom&lt;/xsp:expr&gt;&lt;/cPFrom</a>&gt;<br />     &lt;/ns1:getcurrforecast&gt;<br />   &lt;/soap:call&gt;<br /> &lt;/para&gt;</p>
		<p>      &lt;/xsp:logic&gt;<br />      &lt;/content&gt;<br />  &lt;/page&gt;<br />  <br />&lt;/xsp:page&gt;<br /><br />xml2html 代码</p>
		<p>&lt;?xml version="1.0"?&gt;<br />&lt;xsl:stylesheet version="1.0" <br />     xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform">http://www.w3.org/1999/XSL/Transform</a>"<br />     xmlns:sql="<a href="http://apache.org/cocoon/SQL/2.0">http://apache.org/cocoon/SQL/2.0</a>"&gt;<br />&lt;xsl:output method="html"/&gt;</p>
		<p>&lt;xsl:template match="/"&gt;<br />&lt;xsl:variable name="s" select="number(//fp_id_12)"/&gt;<br />&lt;table border="0" width="100%" height="50"&gt;<br />&lt;tr&gt;<br />&lt;td width="30%" align="left"&gt;<br />&lt;img border="0" src="<a href="https://www.gpacoustics.com/ctrl/ukweb/forecast/images/uklogo.jpg">https://www.gpacoustics.com/ctrl/ukweb/forecast/images/uklogo.jpg</a>" width="120" height="60"&gt;&lt;/img&gt;<br />&lt;/td&gt;<br />&lt;td width="40%" align="center" style="font-size: 30pt"&gt;&lt;b&gt;&lt;u&gt;Forecast Report&lt;/u&gt;&lt;/b&gt;&lt;/td&gt;<br />&lt;td width="30%" align="right" style="font-size: 14pt"&gt;<br />&lt;SCRIPT&gt;<br />document.write(Date());<br />&lt;/SCRIPT&gt;<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;table border="0" bgcolor="#66CCFF" width="100%" style="border: 1px #66CCFF" cellspacing="1" cellpadding="1"&gt;<br /> &lt;tr bgcolor="#66CCFF"&gt;<br />   &lt;th style="font-size: 9pt"&gt;&lt;nobr&gt;Part No&lt;/nobr&gt;&lt;/th&gt;<br />   &lt;th style="font-size: 9pt"&gt;&lt;nobr&gt;Description&lt;/nobr&gt;&lt;/th&gt;<br /> &lt;/tr&gt;<br /> &lt;xsl:for-each select="//Item"&gt;<br />  &lt;tr bgcolor="#FFFFFF"&gt;<br />  &lt;td style="font-size: 9pt"&gt;&lt;nobr&gt;&lt;xsl:value-of select="product_code"/&gt;&lt;/nobr&gt;&lt;/td&gt;<br />  &lt;td style="font-size: 9pt"&gt;&lt;nobr&gt;&lt;xsl:value-of select="description"/&gt;&lt;/nobr&gt;&lt;/td&gt;<br /> &lt;/xsl:for-each&gt;<br />&lt;/table&gt;</p>
		<p>&lt;/xsl:template&gt;</p>
		<p>&lt;/xsl:stylesheet&gt;<br /><br />xml2xls 代码<br />&lt;?xml version="1.0"?&gt;<br />&lt;xsl:stylesheet version="1.0" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform">http://www.w3.org/1999/XSL/Transform</a>"<br />                              xmlns:sql="<a href="http://apache.org/cocoon/SQL/2.0">http://apache.org/cocoon/SQL/2.0</a>"<br />                             xmlns:gmr="<a href="http://www.gnome.org/gnumeric/v7">http://www.gnome.org/gnumeric/v7</a>" &gt;<br />  &lt;xsl:output method="xml" /&gt;<br />  &lt;xsl:template match="/"&gt;<br /> &lt;gmr:Workbook xmlns:gmr="<a href="http://www.gnome.org/gnumeric/v7">http://www.gnome.org/gnumeric/v7</a>"&gt;<br />      &lt;gmr:SheetNameIndex&gt;<br />        &lt;gmr:SheetName&gt;Sheet 1&lt;/gmr:SheetName&gt;<br />      &lt;/gmr:SheetNameIndex&gt;<br />      &lt;gmr:Sheets&gt;<br />        &lt;gmr:Sheet&gt;<br />          &lt;gmr:Name&gt;Sheet 1&lt;/gmr:Name&gt;</p>
		<p>          &lt;gmr:Styles&gt;<br />            &lt;gmr:StyleRegion startRow="0" endRow="0" startCol="0" endCol="99"&gt;<br />               &lt;gmr:Style HAlign="8" VAlign="4" WrapText="0" Orient="1" <br />                         Shade="0" Indent="0" Locked="1" Hidden="0" <br />                         Fore="0:0:0" Back="FFFF:FFFF:FFFF" <br />                         PatternColor="0:0:0" Format="General"&gt;<br />                &lt;gmr:Font Unit="10" Bold="1" Italic="0" Underline="0" StrikeThrough="0"&gt;<br />                  Helvetica<br />                &lt;/gmr:Font&gt;<br />              &lt;/gmr:Style&gt;<br />            &lt;/gmr:StyleRegion&gt;<br />          &lt;/gmr:Styles&gt;</p>
		<p>          &lt;gmr:Cells&gt;<br />       &lt;xsl:call-template name="headerrow"/&gt;<br />            &lt;xsl:apply-templates select="//Item"/&gt;<br />          &lt;/gmr:Cells&gt;<br />        &lt;/gmr:Sheet&gt;<br />      &lt;/gmr:Sheets&gt;<br />    &lt;/gmr:Workbook&gt;<br />&lt;/xsl:template&gt;<br />&lt;xsl:template name="headerrow"&gt;<br />      &lt;gmr:Cell Row="0" Col="0" ValueType="60"&gt;Part No&lt;/gmr:Cell&gt;<br />  &lt;gmr:Cell Row="0" Col="1" ValueType="60"&gt;Description&lt;/gmr:Cell&gt;<br />&lt;/xsl:template&gt;<br />&lt;xsl:template match="Item"&gt;<br />    &lt;xsl:variable name="row" select="position()"/&gt;<br />    &lt;gmr:Cell Row="{$row}" Col="0" ValueType="60"&gt;<br />      &lt;xsl:value-of select="product_code"/&gt;<br />    &lt;/gmr:Cell&gt;<br />    &lt;gmr:Cell Row="{$row}" Col="1" ValueType="60"&gt;<br />      &lt;xsl:value-of select="description"/&gt;<br />    &lt;/gmr:Cell&gt;<br />&lt;/xsl:template&gt;<br />&lt;/xsl:stylesheet&gt;</p>
<img src ="http://www.blogjava.net/zhangzhong1018/aggbug/75830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangzhong1018/" target="_blank">天边一片伴月星</a> 2006-10-18 10:11 <a href="http://www.blogjava.net/zhangzhong1018/articles/75830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>