<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Shining Ray &#187; Firebird</title>
	<atom:link href="http://shiningray.cn/tag/firebird/feed" rel="self" type="application/rss+xml" />
	<link>http://shiningray.cn</link>
	<description>一缕阳光</description>
	<lastBuildDate>Tue, 07 Sep 2010 20:58:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>从Trails和Firebird开始</title>
		<link>http://shiningray.cn/trails-and-firebird.html</link>
		<comments>http://shiningray.cn/trails-and-firebird.html#comments</comments>
		<pubDate>Tue, 11 Oct 2005 07:47:12 +0000</pubDate>
		<dc:creator>ShiningRay</dc:creator>
				<category><![CDATA[介绍]]></category>
		<category><![CDATA[翻译]]></category>
		<category><![CDATA[Firebird]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Tapestry]]></category>
		<category><![CDATA[Trails]]></category>

		<guid isPermaLink="false">http://shiningray.cn/?p=154</guid>
		<description><![CDATA[作者：Chris翻译：ShiningRay @ Nirvana Studio 0. 前言 在Trails的首页上有一段Trails的指导视频，它比本文说得更为详细。你可以看看它，另外根据Firebird设置一节中的内容，设置一下和Firebird相关的东西。 1. 什么是Trails？ Trails是一个领域驱动开发框架，它使用了Hibernate、Spring和Tapestry。其中，Hibernate 被用作数据访问层，Tapestry用来给用户显示数据。而Spring 则是把Hibernate和Tapestry连接在一起。 Trails自带了几乎所以必需的jar文件&#8212;&#8212;你只需要安装一下Firebird的数据库驱动，它可以在 http://firebirdsql.sf.net上下载。 1.1 Hibernate Hibernate是一个O/RM工具。O/RM的意思是：对象关系映射。O/RM可以让你把 java 对象映射到后台数据库中。Hibernate使用了XDoclet来指明映射信息所需的信息，以便在数据库中存储复杂的对象。而XDoclet使用了javadoc注释来告诉Hibernate如何映射对象。例如： [code lang="java"]/** * @hibernate.class table="PERSON" */ public class Person { } [/code] 这段代码会告诉Hibernate要将一个指定的对象（在这里是Person）映射到PERSON表。 Hibernate 的主页是：www.hibernate.org. 1.2 Tapestry Tapestry 是（简而言之）一个Web框架。更确切地说，Taspetry是一个基于组件的Web框架，它将表示和逻辑清晰地分离开来了。 在Tapestry中，一个页面和一个.html文件相关，这个文件负责这个页面的外观，和一个Java类，它负责对.html文件提供数据，还有一个. page或者是一个.jwc文件（这由你是要作为一个真正的页面还是一个单独的组件），这两个负责把前两个层次连接起来。 组件是通过ognl语言来访问的，形式如： &#60;a href="#" jwcid="@PageLink" page="myPage"&#62;Goto MyPage&#60;/a&#62; jwcid 指明了使用的组件&#8212;&#8212;这里是一个PageLink，它是一个HTML表现中的&#60;a&#62;&#60;/a&#62;标签的一个组件。page属性指明了你要链接的页面的名称。 Tapestry 的主页在jakarta.apache.org/tapestry 2. 安装Trails。 首先从trails.dev.java.net下载Trails. 当前的版本是0.5.1。先把下载的文件解压缩（在https://trails.dev.java.net上有一个很棒的演示，教你如何利用Trails来写应用程序）。 解压缩trails，并进入新建的文件夹。更改build.properties文件以匹配你的tomcat路径， [...]]]></description>
			<content:encoded><![CDATA[<p>作者：Chris<br />翻译：<a href="http://shiningray.cn">ShiningRay</a> @ <a href="http://www.nirvanastudio.org/">Nirvana Studio</a></p>
<h2>0. 前言</h2>
<p>在Trails的首页上有一段Trails的指导视频，它比本文说得更为详细。你可以看看它，另外根据<a href="#settings">Firebird设置</a>一节中的内容，设置一下和Firebird相关的东西。</p>
<h2>1. 什么是Trails？</h2>
<p><a href="https://trails.dev.java.net/">Trails</a>是一个领域驱动开发框架，它使用了Hibernate、Spring和Tapestry。其中，Hibernate 被用作数据访问层，Tapestry用来给用户显示数据。而Spring 则是把Hibernate和Tapestry连接在一起。</p>
<p>Trails自带了几乎所以必需的jar文件&mdash;&mdash;你只需要安装一下Firebird的数据库驱动，它可以在 <a href="http://firebirdsql.sf.net">http://firebirdsql.sf.net</a>上下载。</p>
<h3>1.1 Hibernate</h3>
<p>Hibernate是一个O/RM工具。O/RM的意思是：对象关系映射。O/RM可以让你把 java 对象映射到后台数据库中。Hibernate使用了XDoclet来指明映射信息所需的信息，以便在数据库中存储复杂的对象。而XDoclet使用了javadoc注释来告诉Hibernate如何映射对象。例如：
</p>
<p>[code lang="java"]/**<br />
 * @hibernate.class table="PERSON"<br />
 */</p>
<p>public class Person {<br />
}<br />
[/code]</p>
<p>这段代码会告诉Hibernate要将一个指定的对象（在这里是Person）映射到PERSON表。</p>
<p>Hibernate 的主页是：<a href="http://www.hibernate.org/">www.hibernate.org</a>.</p>
<h3>1.2 Tapestry</h3>
<p>Tapestry 是（简而言之）一个Web框架。更确切地说，Taspetry是一个基于组件的Web框架，它将表示和逻辑清晰地分离开来了。</p>
<p>在Tapestry中，一个页面和一个.html文件相关，这个文件负责这个页面的外观，和一个Java类，它负责对.html文件提供数据，还有一个.<br />
page或者是一个.jwc文件（这由你是要作为一个真正的页面还是一个单独的组件），这两个负责把前两个层次连接起来。</p>
<p>组件是通过ognl语言来访问的，形式如：</p>
<pre>&lt;a href="#" jwcid="@PageLink" page="myPage"&gt;Goto MyPage&lt;/a&gt;<br/></pre>
<p>
jwcid 指明了使用的组件&mdash;&mdash;这里是一个PageLink，它是一个HTML表现中的&lt;a&gt;&lt;/a&gt;标签的一个组件。page属性指明了你要链接的页面的名称。</p>
<p>Tapestry 的主页在<a href="http://jakarta.apache.org/tapestry">jakarta.apache.org/tapestry</a></p>
<h2>2. 安装Trails。</h2>
<p>首先从<a href="https://trails.dev.java.net/servlets/ProjectDocumentList">trails.dev.java.net</a>下载Trails.</p>
<p>当前的版本是0.5.1。先把下载的文件解压缩（在<a href="https://trails.dev.java.net">https://trails.dev.java.net</a>上有一个很棒的演示，教你如何利用Trails来写应用程序）。</p>
<p>解压缩trails，并进入新建的文件夹。更改build.properties文件以匹配你的tomcat路径，<br />
        然后做以下这些事情：
</p>
<p>通过运行下面的指令来创建trail.jar（我在我的机器上必须这样做）</p>
<pre>#&gt; ant jar<br/></pre>
<h2>3. 写一个新的应用程序</h2>
<h3>3.1 创建一个新的trail应用:</h3>
<pre>#&gt; ant create-project<br/></pre>
<p><img alt="" src="/wp-content/uploads/2006/04/ant_create_project.png"/></p>
<p>这是在问你，把工程的根目录放在哪里（在MacOS X上我输入的是/Users/chris/Desktop/projects&mdash;&mdash;Windows用户可能要输入诸如c:\path\to\new\project的路径）</p>
<p>输入工程名称</p>
<p>然后，一个目录包括所有必须的jar文件就被创建好了。</p>
<h3>3.2 启动 </h3>
<h3>3.3 创建一个新的 &#8220;Java Project&#8221;</h3>
<ul>
<li>输入工程名称</li>
<li>选择 &#8220;Create project at external location&#8221;（在外部位置创建工程） 并指向新创建的文件夹。</li>
</ul>
<p><img alt="" src="/wp-content/uploads/2006/04/new_java_project.png"/></p>
<ul>
<li>点击 &#8220;next&#8221;</li>
<li>点击 &#8220;add folders&#8221;</li>
<li>选择 &#8220;src&#8221;，然后点击OK </li>
</ul>
<p><img alt="" src="/wp-content/uploads/2006/04/new_java_project_2.png"/></p>
<ul>
<li> 点击 &#8220;finish&#8221;</li>
</ul>
<p>新创建的工程就会被导入到Eclipse中。</p>
<h2><a name="settings">4. 设置</a></h2>
<h3>4.1 改变tomcat的主目录</h3>
<ul>
<li>打开Eclipse中的open build.properties 文件并将tomcat.home改称你的tomcat的目录。</li>
</ul>
<h3>4.2 更改数据库驱动:</h3>
<ul>
<li>打开文件 context/WEB-INF/hibernate.properties 并把其中的设置改为：:</li>
</ul>
<pre>hibernate.dialect=net.sf.hibernate.dialect.FirebirdDialect<br/><br/>hibernate.show_sql=true<br/>hibernate.hbm2ddl.auto=update<br/>hibernate.connection.driver_class=org.firebirdsql.jdbc.FBDriver<br/>hibernate.connection.url=jdbc:firebirdsql:127.0.0.1:myapplication<br/>hibernate.connection.username=sysdba<br/>hibernate.connection.password=masterkey<br/></pre>
<h3>4.3 在主机上创建一个新数据库（这里是127.0.0.1）</h3>
<pre>#&gt;isql -user sysdba -password masterkey<br/>#&gt;create database '127.0.0.1:/path/to/mydatabase.fdb';<br/>#&gt;commit;<br/>#&gt;exit;<br/></pre>
<p> 并且在 FIREBIRD_HOME/aliases.conf 中添加一个别名，这样写：</p>
<pre>myapplication = /path/to/mydatabase.fdb<br/></pre>
<p>在生产系统中，你还要为以后要连接的用户更改用户名和密码 :-)</p>
<h3>4.4 安装Firebird数据库驱动</h3>
<p>从<a href="http://firebird.sourceforge.net/index.php?op=files&amp;id=jaybird">firebird.sf.net</a>下载Firebird的JCA-JDBC驱动，解压缩并把jar文件安装到CATALINE_HOME/common/lib下（详细内容参见 <a href="http://firebird.sourceforge.net/index.php?op=devel&amp;sub=jdbc&amp;id=faq">JayBird FAQ</a>）。</p>
<h2>5. 开始编码</h2>
<h3>5.1 创建一个领域对象（Domain Object）</h3>
<p>领域对象可以简单地说成是POJO（Plain Old Java Objects），它是Hibernate用来在数据库中存放数据的。</p>
<ul>
<li>在Eclipse中选择src文件夹并点击 File -&gt; New -&gt; Class（文件-&gt;新建-&gt;类）</li>
<li>输入一个包名（de.test.data）</li>
<li>在Name输入框中输入类名：Person </li>
<li>点击 &#8220;finish&#8221;</li>
</ul>
<p><img alt="" src="/wp-content/uploads/2006/04/create_class.png"/></p>
<p>成功新建并打开了一个类。</p>
<h3>5.2 告诉Hibernate要使用的表格：</h3>
<p>把表格名称作为XDoclet的hibernate.classabove标签添加到类的说明中。XDoclet任务以 @ 符号开始，后面跟着一个名空间（在这里是hibernate）和一个动作，指明要做什么（更多信息参见<a href="http://hibernate.sf.net/">hibernate.sf.net</a>）。</p>
<p>XDoclet标签 @hibernate.class table=&#8221;PERSON&#8221; 将告诉Hibernate把这个对象中的数据存储在一个叫做PERSON的表中。</p>
<p><img alt="" src="/wp-content/uploads/2006/04/create_class_add_table_tag.png"/></p>
<p>表格的名称无需和类名相匹配&mdash;&mdash;你也可以指定一个MY_PERSON作为名称 :-)。</p>
<h3>5.3 创建属性：</h3>
<ul>
<li>先输入以下内容：</li>
</ul>
<pre>public class Person {<br/>  private Integer PersonID;<br/>  private String Name;<br/>  private String SurName;<br/>  private LSalutation Salutaion;<br/><br/>}<br/></pre>
<ul>
<li>在&ldquo;Outline&rdquo;（大纲）中选择PersonID并右键点击它。</li>
<li>选择Source -&gt; Generate Getters and Setters</li>
<li>两个都选中并点击OK </li>
</ul>
<p><img alt="" src="/wp-content/uploads/2006/04/create_getter_and_setter.png"/></p>
<p>现在已经有了getter和setter例程，而且已经添加了注释。然后我们添加下面的注释：</p>
<pre>     * @hibernate.id generator-class="sequence" column="PERSON_ID"<br/>     * @hibernate.generator-param name="sequence" value="SQ_PERSON_ID" </pre>
<p><img alt="" src="/wp-content/uploads/2006/04/create_id.png"/></p>
<p>这将告诉Hibernate使用表格的PERSON_ID列来存储表格的主键，同时通过使用一个生成器来自动新建这个字段的值。<br />
键将由SQ_PERSON_ID生成器来生成。</p>
<p>在大纲中选择name并且右键点击它（选择 source<br />
-&gt; generate getters and setters，选择Name和SurName然后点OK :-) )</p>
<p><br/><br />
这次，我们不再需要主键&mdash;&mdash;我们仅仅需要一个字段来存放姓名。所以我们继续并添加以下javadoc注释：<br />
<br/></p>
<p>[code lang="java"]    /**<br />
     * @hibernate.property column="LAST_NAME" not-null="true"<br />
     */<br />
    public String getName() {<br />
        return Name;<br />
    }<br />
[/code]</p>
<p>以及surname属性</p>
<pre>    /**<br/>     * @return Liefert den surName zurueck.<br/>     * @hibernate.property<br/>     */<br/>    public String getSurName() {<br/>        return SurName;<br/>    }<br/>    /**<br/>     * @param surName The surName to set.<br/>     */<br/>    public void setSurName(String surName) {<br/>        SurName = surName;<br/>    }<br/></pre>
<p>由名称属性而来的getter上的列是必须出现的，因为我们要覆盖默认的行为。Hibernate会假设一个叫&ldquo;NAME&rdquo;的字段&mdash;&mdash;但这在Firebird中是一个关键字，所以我们必须另外选择一个名称。</p>
<p>记住：Hibernate标记必须总是设置在getter上&mdash;&mdash;而不是setter。</p>
<p>如果需要，我们可以通过在Hibernate的XDoclet标记中添加not-null=&#8221;true&#8221;属性来设置一个null值&mdash;&mdash;默认值为false。</p>
<h3>5.4 创建查询表</h3>
<p>现在提示有一个错误&mdash;&mdash;是LSalutation。</p>
<p>这时把你的鼠标移到LSaltutation上并且按下Ctrl+1（在Apple Macintosh上你要按Command + 1）。然后会出现以下对话框：&nbsp;</p>
<p><img alt="" src="/wp-content/uploads/2006/04/create_lookup_object.png"/></p>
<p>输入要创建的文件的包名，点击&ldquo;finish&rdquo;，然后做以下几步动作：</p>
<ul>
<li>给他一个ID</li>
<li>个它一个名称</li>
<li>生成getter和setter </li>
<li>并且指明给表格设置的类名，以及ID和属性字段</li>
</ul>
<pre>package de.test.data;<br/><br/>/**<br/> * @author chris<br/> *<br/> * @hibernate.class table="SALUTATION"<br/> */<br/>public class LSalutation {<br/>    private Integer SalutaionID;  <br/>    private String Salutation;<br/>    /**<br/>     * @return Liefert den salutaionID zurueck.<br/>     * @hibernate.id generator-class="sequence" column="SALUTATION_ID"<br/>     * @hibernate.generator-param name="sequence" value="SQ_SALUTATION_ID"<br/>     */<br/>    public Integer getSalutaionID() {<br/>        return SalutaionID;<br/>    }<br/>    /**<br/>     * @param salutaionID The salutaionID to set.<br/>     */<br/>    public void setSalutaionID(Integer salutaionID) {<br/>        SalutaionID = salutaionID;<br/>    }<br/>    /**<br/>     * @return Liefert den salutation zurueck.<br/>     * @hibernate.property not-null="true"<br/>     */<br/>    public String getSalutation() {<br/>        return Salutation;<br/>    }<br/>    /**<br/>     * @param salutation The salutation to set.<br/>     */<br/>    public void setSalutation(String salutation) {<br/>        Salutation = salutation;<br/>    }<br/>}<br/><br/></pre>
<p>现在，又是另一个对象可以被Hibernate映射了。对于Hibernate，这已经可以用了，但对于Trails，还少个东西：</p>
<ul>
<li>一个 equals() 和一个 toString() 方法</li>
</ul>
<p>toString() 方法是用来在列表视图中能正确显示属性，而equals方法是用来标示对象的。所以只要添加以下代码到LSalutation类中：</p>
<pre>	public boolean equals(Object obj){<br/>		return<sup>1</sup>;<br/>	}<br/><br/>	public String toString(){<br/>		return getSalutation();<br/>	}<br/></pre>
<p>返回到Person.java中并且为Saltuation属性创建getter和setter。</p>
<p>由于我们要给salutations使用另一个表中的数据，所以这里我们要用另一个属性。所以这里我们要用一个多对一的关系。也就是，我们要把javadoc注释改成：</p>
<pre>    /**<br/>     * @return Liefert den salutaion zurueck.<br/>     * @hibernate.many-to-one column="SALUTATION_ID"<br/>     */<br/>    public LSalutation getSalutaion() {<br/>        return Salutaion;<br/>    }<br/></pre>
<p>现在Hibernate已经了解如何引用salutation类了。</p>
<p>这就是我们要写的全部代码了。 :-)</p>
<h2>6. 构建应用程序：</h2>
<p>打开build.xml文件，右件点击war目标并选择 ant -&gt; build</p>
<p>这将调用ant来构建.war文件（Trails的指南说，使用deploy目标可以部署程序&mdash;&mdash;这不能在我的机器上运行）。然后我把project.war文件复制到TOMCAT_HOME/webapps中去。</p>
<h2>7. 访问应用程序：</h2>
<p>打开浏览器并输入127.0.0.1:8080/project_name</p>
<p>现在，享受一下浏览和输入数据的乐趣吧 :-)</p>
<p>无任何担保&mdash;&mdash;Chris</p>
<ol class="footnotes"><li id="footnote_0_154" class="footnote">LSalutation)obj).getSalutationId().equals(getSalutationId(</li></ol>]]></content:encoded>
			<wfw:commentRss>http://shiningray.cn/trails-and-firebird.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
