<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>JavaEye论坛最新讨论</title>
    <description>JavaEye论坛最新讨论 - Java编程，Ruby编程，微软.net，AJAX，敏捷软件开发，综合软件技术</description>
    <link>http://www.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>一个简单的无需数据库映射的对象的存储设计问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xqstation.javaeye.com">xqstation</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251805" style="color:red;">http://www.javaeye.com/topic/251805</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          各位好，不知道这个标题表述明白了没有。用个简单的例子：<br />有User与Role对象，由于系统设计比较小，可能只有为2-3个Role。而又不想在数据库里添加这么一个表来存储。<br />比如，在数据库中想仅使用1,2,3来分别代表权限。<br />那么究竟是如何设计才是合理的？以下为本人想的：<br /><br /><strong>方式1：</strong><br /><pre name="code" class="java">
public class User{
  private int id;
  private String name;
  private int role;
}

public interface Role{
  public final static int ADMIN = 1;
  public final static int MEMBER = 2;
  public final static int VISTOR = 3;
}
</pre><br /><br /><strong>方式2：</strong><br /><pre name="code" class="java">
public class User{
  private int id;
  private String name;
  private Role role;
}

public class Role{
  private int id;
  private String name;
}

public class RoleFactory{
  public Role createAdmin(){}
  public Role createMember(){}
  public Role createVistor(){}
}
</pre><br /><br /><strong>方式2</strong>从User的角度看似乎面向对象一点，但是后面的代码就难看了。<br />并且，用方式2的似乎无法通过类似Hibernate这样框架来创建实例。<br />因为user表中存储的就是一个字段。而这个字段值如：1，我所希望其对应的name是Admin。<br /><br />而如果将Role存储起来，却只有3行记录就觉得很浪费。并且如果被某好心人将name改成了Administrator那就变成了非正常情况了。<br /><br />不知道哪位有类似的经验可否介绍一下。可能是我思路就不对，实在是想不明白，想用google查，却想不出这种问题的关键字。谢谢了。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251805" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 14:05:57 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251805</link>
        <guid>http://www.javaeye.com/topic/251805</guid>
      </item>
          <item>
        <title>想换个工作了，简历也没法晒，只能大概介绍一下情况了，望各位给些建议。</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zpple.javaeye.com">zpple</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251141" style="color:red;">http://www.javaeye.com/topic/251141</a>&nbsp;
          发表时间: 2008年10月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          个人大概的简介：本科毕业1年多，毕业之前学过比较多东西，专业是电子商务的，选这个专业的时候是想跟马云大哥混来着，后来这个事情就给忘记了，然后就学了CCNA,HCNE,SCJP等等一系列东西，有网络，有J2EE，有LINUX，有软件工程，有项目管理等等等等，然后毕业之后进入Z**，在这里投入到了一个SOA项目，属于国内头一个比较大型的SOA项目吧，是给中国挪动集团做得，是全国范围31省的大项目，合同金额为KW以上，使用JAVA和ORACLE各个套件进行开发，但是来只做了2个月开发，就开始做概要设计，停止了从代码中学东西的机会。不过这一年觉得很充实，因为国内没有SOA成功的案例（大型的），所以项目一直处于相对混乱的状态，但是却因此而接触了编码、设计、架构、项目经理、需求分析、测试、部署等等一系列工作。感觉一年的成长是突飞猛进的，同时在这一年多的时间突然发现自己不太适合做程序员的工作，而对项目管理产生了很浓厚的兴趣，本来自己沟通能力也比较强，所以经理、大经理和产品总监都在倾向于用我来做各方面的接口工作。我来做到了，也得到认可了，而自己却迷茫了，我们项目经理要离开项目，推荐我来做项目经理，但是公司的领导很多，他们觉得我太年轻，没有做PM的资本。其实也对，这么大的一个公司，还有国企背景，觉得这种事情是不可能发生的，O(∩_∩)O，不过对经理的推荐还是表示十分的感谢。现在项目也差不多完成了，正在做上线方面的工作。然后也想换个工作了，想换个小点的公司去做一个PM，想知道各位前辈能不能给我一些指导性的意见，看看以后的路怎么走最合适，:-D
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251141" style="color:red;">已有 <strong>31</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Oct 2008 11:12:48 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251141</link>
        <guid>http://www.javaeye.com/topic/251141</guid>
      </item>
          <item>
        <title>拿到了阿里巴巴的Offer</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://oditszapc.javaeye.com">OditsZapc</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251605" style="color:red;">http://www.javaeye.com/topic/251605</a>&nbsp;
          发表时间: 2008年10月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天拿到了阿里巴巴java软件研发工程师Offer。是通过校园招聘会。<br />试用期6个月，是不是太长了点？
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251605" style="color:red;">已有 <strong>38</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Oct 2008 14:21:03 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251605</link>
        <guid>http://www.javaeye.com/topic/251605</guid>
      </item>
          <item>
        <title>现在的公司到底需要什么样的人，我到底还缺什么呢？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://marshallzhu.javaeye.com">marshallzhu</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251462" style="color:red;">http://www.javaeye.com/topic/251462</a>&nbsp;
          发表时间: 2008年10月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p>最近一直都在找工作。可是，非常的不顺利。投出很多份简历，只有一次电话面试，一次面试，其他的都毫无音讯。</p>
<p>所以，一直在想，我到底缺什么呢？<br /><br />刚毕业的时候找工作，遇到很大的困难，虽然自我感觉技术还不错，可是，因为学历的问题，落得个四处碰壁。好容易找到个工作，就这么一干有十年了。<br /><br />那个时候就想，恩，学历是弱势，我要提高学历。结果，十年后的今天，再去找工作，却发现硕士学位依然毫无用处。<br /><br />那我缺技术？<br />恩，想想，我的技术特长，好像确实没有什么特别突出的，什么都会点，什么也都不算差。<br />&nbsp; * 网络上，尽管没有CCIE那么强，可也经常和CCNP一起讨论问题；</p>
<p>&nbsp; * OS上，虽然不是FreeBSD的Contributor，但是架个服务，拿源码过来根据需要改改（之前就发现过一个ipfw在bridge上的bug），还都没有问题；</p>
<p>&nbsp; * 编程语言，真还学过不少，很早之前用MASM写TSR程序，到现在用Ruby当做Script用，对各种语言都还算熟悉；</p>
<p>&nbsp; * 项目经历上呢，也有不少，只是都是中小型的；</p>
<p>&nbsp; * 管理上，也还算有些经验。</p>
<p><br />所以，总觉得技术上不会缺太多吧。</p>
<p>&nbsp;</p>
<p>那么，是因为我对SSH不熟？</p>
<p>可是，Java &lt;&gt; SSH 的啊，Seam刚出来的时候，我就在项目中用过的啊。SSH，我想如果真的要用的话，1、2个月就应该熟悉了吧。</p>
<p>&nbsp;</p>
<p>那么，我缺一锤定音的软件来证明自己？</p>
<p>比如，3、5年前，写过一个不成型的编译器，想将PHP编译成JVM Bytecode，最后因为精力问题，只做到处理简单的语句和简单的类就结束了。我就在想，当时是不是坚持下去，写出个jPHP，再去找工作，就能得到别人的认可了？可是，可是，如果真的是这样的话，那么找的也不是月薪6000元人民币的工作了吧，可是，可是，就算是这样，就真的能找到工作了？</p>
<p>可是，这也不过是在简历当中，多一句话而已。我现在面临的问题是，连电话面试的机会都没有，也就是说在HR那里，看一眼就删除了。</p>
<p>（简历，已经请有HR经验的人看过了，说没有结构上和表述上的问题）</p>
<p>&nbsp;</p>
<p>那到底缺什么呢？</p>
<p>&nbsp;</p>
<p><img src="/images/smiles/icon_cool.gif" alt="" /> <img src="/images/smiles/icon_sad.gif" alt="" /></p>
<p>&nbsp;</p>
<p>迷茫。。。。</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251462" style="color:red;">已有 <strong>14</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Oct 2008 21:29:59 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251462</link>
        <guid>http://www.javaeye.com/topic/251462</guid>
      </item>
          <item>
        <title>定时执行任务的三种方法</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://z-peng0809-sina-com.javaeye.com">蜡笔小猪</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251803" style="color:red;">http://www.javaeye.com/topic/251803</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1）java.util.Timer <br /><br />　　这个方法应该是最常用的，不过这个方法需要手工启动你的任务： <br /><br />　　Timer timer=new Timer(); <br /><br />　　timer.schedule(new ListByDayTimerTask(),10000,86400000); <br /><br />　　这里的ListByDayTimerTask类必须extends TimerTask里面的run()方法。 <br /><br />　　2）ServletContextListener <br /><br />　　这个方法在web容器环境比较方便，这样，在web server启动后就可以 <br /><br />　　自动运行该任务，不需要手工操作。 <br /><br />　　将ListByDayListener implements ServletContextListener接口，在 <br /><br />　　contextInitialized方法中加入启动Timer的代码，在contextDestroyed <br /><br />　　方法中加入cancel该Timer的代码；然后在web.xml中，加入listener: <br /><br />　　&lt;listener> <br /><br />　　&lt;listener-class>com.qq.customer.ListByDayListener&lt;/listener-class> <br /><br />　　&lt;/listener> <br /><br />　　3)org.springframework.scheduling.timer.ScheduledTimerTask <br /><br />　　如果你用spring，那么你不需要写Timer类了，在schedulingContext-timer <br /><br />　　.xml中加入下面的内容就可以了： <br /><br />　　&lt;?xml version="1.0" encoding="UTF-8"?> <br /><br />　　&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <br /><br />　　&lt;beans> <br /><br />　　&lt;bean id="timer" class="org.springframework.scheduling.timer.TimerFactoryBean"> <br /><br />　　&lt;property name="scheduledTimerTasks"> <br /><br />　　&lt;list> <br /><br />　　&lt;ref local="MyTimeTask1"/> <br /><br />　　&lt;/list> <br /><br />　　&lt;/property> <br /><br />　　&lt;/bean> <br /><br />　　&lt;bean id="MyTimeTask" class="com.qq.timer.ListByDayTimerTask"/> <br /><br />　　&lt;bean id="MyTimeTask1" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <br /><br />　　&lt;property name="timerTask"> <br /><br />　　&lt;ref bean="MyTimeTask"/> <br /><br />　　&lt;/property> <br /><br />　　&lt;property name="delay"> <br /><br />　　&lt;value>10000&lt;/value> <br /><br />　　&lt;/property> <br /><br />　　&lt;property name="period"> <br /><br />　　&lt;value>86400000&lt;/value> <br /><br />　　&lt;/property> <br /><br />　　&lt;/bean> <br /><br />　　&lt;/beans>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251803" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 13:50:01 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251803</link>
        <guid>http://www.javaeye.com/topic/251803</guid>
      </item>
          <item>
        <title>全自动的使用ANT编译，打包EJB项目，并且部署到Websphere服务器上面。</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://buaalijie.javaeye.com">buaalijie</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251795" style="color:red;">http://www.javaeye.com/topic/251795</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          全自动的使用ANT编译，打包EJB项目，并且部署到Websphere服务器上面。<br /><br />题外话，刚发现JAVAEYE没有EJB和WebSphere的板块，有点小郁闷。<img src="/images/smiles/icon_sad.gif"/><br /><br /><br />首先我们可以在build.properties上面定义在编译部署过程中使用到的变量。<br /><br />包括项目名，项目路径，部署路径等等<br /><br /><pre name="code" class="xml">app.name=XXXXX
dist.home=C:/antoutput
encoding=UTF-8
project.home=C:/CVSROOT/src/XXXXX
deploy.path=C:/Program Files/IBM/SDP70/runtimes/base_v61/profiles/AppSrvWSFP01/installedApps/D1N4GGBXNode02Cell

.
.
.
.</pre>然后是项目的CLASS_PATH。<br /><br /><pre name="code" class="xml">project.class.path=

XXX1_LIB=XXXXXXXX1
XXX2_LIB=XXXXXXXX2
XXX1_LIB.dir=${project.home}/${XXX1_LIB}
XXX2_LIB.dir=${project.home}/${XXX2_LIB}</pre><br /><br />然后是Websphere相关的Lib的路径<br /><br /><pre name="code" class="xml">websphere.base_v61.runtime.dir=C:/Program Files/ibm/SDP70/runtimes/base_v61

websphere.runtime.lib.dir=${websphere.base_v61.runtime.dir}/lib
websphere.runtime.plugins.lib.dir=${websphere.base_v61.runtime.dir}/plugins
websphere.runtimes.webservice.lib.dir=${websphere.base_v61.runtime.dir}/runtimes</pre><br /><br />在这些变量设置好了之后，我们就可以开始编译了。<br /><br />在build.xml里面，<br /><br />引用build.properties里面设置好的变量。<br /><pre name="code" class="xml">&lt;property file="build.properties" /></pre>设置CLASS_PATH<br /><br /><pre name="code" class="xml">&lt;path id="XXX1_LIB.classpath">
	&lt;fileset dir="${XXX1_LIB.dir}">
		&lt;include name="**/*.jar" />
	&lt;/fileset>
&lt;/path>
&lt;path id="XXX2_LIB.classpath">
	&lt;fileset dir="${XXX2_LIB.dir}">
		&lt;include name="**/*.jar" />
	&lt;/fileset>
&lt;/path>
&lt;path id="project.class.path">
	&lt;pathelement path="${project.class.path}" />
&lt;/path>
&lt;path id="websphere.runtime.classpath">
	&lt;fileset dir="${websphere.runtime.lib.dir}">
		&lt;include name="**/*.jar" />
	&lt;/fileset>
	&lt;fileset dir="${websphere.runtime.plugins.lib.dir}">
		&lt;include name="**/*.jar" />
	&lt;/fileset>
	&lt;fileset dir="${websphere.runtimes.webservice.lib.dir}">
		&lt;include name="**/*.jar" />
	&lt;/fileset>
&lt;/path></pre><br />然后进行必要的文件目录的初始化。<br /><br /><pre name="code" class="xml">&lt;target name="clean">
	&lt;delete dir="${dist.home}" />
    .
    .
    .
    .
    
&lt;/target>
&lt;target name="init">
	&lt;mkdir dir="${dist.home}" />
    .
    .
    .
    .
    .
&lt;/target></pre><br />从cvs上面下载更新代码<br /><pre name="code" class="xml">
    &lt;target name="deleteCvsHome">
		&lt;delete dir="C:/cvstest" />
	&lt;/target>
	&lt;target name="cvsCheckout">
		&lt;mkdir dir="C:/cvstest" />
		&lt;property name="cvsroot" value=":pserver:user:passwd@IP:/cvsroot/data/XXX" />
		&lt;property name="projectName" value="XXXXXXXXXXX" />
		&lt;tstamp>
			&lt;format property="today" pattern="yyyy-MM-dd hh:mm:ss" />
		&lt;/tstamp>
		&lt;echo message="${today}" />
		&lt;cvs cvsRoot="${cvsroot}" dest="C:/cvstest" package="${projectName}" />
	&lt;/target>
	&lt;target name="cvsUpdate">
        &lt;property name="cvsroot" value=":pserver:user:passwd@IP:/cvsroot/data/XXX" />
        &lt;property name="projectName" value="XXXXXXXXXXX" />
        &lt;tstamp>
            &lt;format property="today" pattern="yyyy-MM-dd hh:mm:ss" />
        &lt;/tstamp>
		&lt;echo message="${today}" />
		&lt;cvs cvsRoot="${cvsroot}" command="update" dest="C:/cvstest" package="${projectName}" />
	&lt;/target></pre><br />编译,注意配置好项目目的依赖关系就好了<br /><br /><pre name="code" class="xml">&lt;target name="buildxxxxDto" depends="init">
	&lt;mkdir dir="${xxxx.dto.classes}" />
	&lt;javac srcdir="${xxxx.dto.src}" destdir="${xxxx.dto.classes}" encoding="${encoding}" debug="true" deprecation="true" nowarn="false">
		&lt;classpath refid="project.class.path" />
		&lt;classpath refid="websphere.runtime.classpath" />
		&lt;classpath refid="XXX1_LIB.classpath" />
		&lt;classpath refid="XXX2_LIB.classpath" />
	&lt;/javac>
&lt;/target>


&lt;target name="buildxxxxEjbClient" depends="init,buildxxxxDto">
	&lt;mkdir dir="${xxxx.ejbclient.classes}" />
	&lt;javac srcdir="${xxxx.ejbclient.src}" destdir="${xxxx.ejbclient.classes}" encoding="${encoding}" debug="true" deprecation="true" nowarn="false">
		&lt;classpath refid="project.class.path" />
		&lt;classpath refid="websphere.runtime.classpath" />
		&lt;classpath refid="XXX1_LIB.classpath" />
		&lt;classpath refid="XXX2_LIB.classpath" />
	&lt;/javac>
	&lt;copy todir="${xxxx.ejbclient.classes}">
		&lt;fileset dir="${xxxx.ejbclient.resources}">
			&lt;include name="**/*.properties" />
			&lt;include name="**/*.xml" />
		&lt;/fileset>
	&lt;/copy>
&lt;/target>
&lt;target name="buildxxxxEjb" depends="init,buildxxxxDto,buildxxxxEjbClient">
	&lt;mkdir dir="${xxxx.ejb.classes}" />
	&lt;javac srcdir="${xxxx.ejb.src}" destdir="${xxxx.ejb.classes}" encoding="${encoding}" debug="true" deprecation="true" nowarn="false">
		&lt;classpath refid="project.class.path" />
		&lt;classpath refid="websphere.runtime.classpath" />
		&lt;classpath refid="XXX1_LIB.classpath" />
		&lt;classpath refid="XXX2_LIB.classpath" />
	&lt;/javac>
&lt;/target>

&lt;target name="buildxxxxSrvBizImpl" depends="init,buildxxxxEjbClient">
	&lt;mkdir dir="${xxxx.srv.classes}" />
	&lt;javac srcdir="${xxxx.srv.src}" destdir="${xxxx.srv.classes}" encoding="${encoding}" debug="true" deprecation="true" nowarn="false">
		&lt;classpath refid="project.class.path" />
		&lt;classpath refid="websphere.runtime.classpath" />
		&lt;classpath refid="XXX1_LIB.classpath" />
		&lt;classpath refid="XXX2_LIB.classpath" />
	&lt;/javac>
	&lt;copy todir="${xxxx.srv.classes}">
		&lt;fileset dir="${xxxx.srv.resources}">
			&lt;include name="**/*.properties" />
			&lt;include name="**/*.xml" />
		&lt;/fileset>
	&lt;/copy>
&lt;/target>

&lt;target name="buildxxxxweb" depends="init,buildxxxxEjbClient">
	&lt;mkdir dir="${xxxx.web.classes}" />
	&lt;javac srcdir="${xxxx.web.src}" destdir="${xxxx.web.classes}" encoding="${encoding}" debug="true" deprecation="true" nowarn="false">
		&lt;classpath refid="project.class.path" />
		&lt;classpath refid="websphere.runtime.classpath" />
		&lt;classpath refid="XXX1_LIB.classpath" />
		&lt;classpath refid="XXX2_LIB.classpath" />
	&lt;/javac>
	&lt;copy todir="${xxxx.web.classes}">
		&lt;fileset dir="${xxxx.web.resources}">
			&lt;include name="**/*.properties" />
			&lt;include name="**/*.xml" />
		&lt;/fileset>
	&lt;/copy>
	&lt;copy todir="${xxxx.web.content}">
		&lt;fileset dir="${project.home}/xxxx_WEB/WebContent">
			&lt;exclude name="WEB-INF/classes/**/*.*" />
		&lt;/fileset>
	&lt;/copy>
&lt;/target></pre><br />打包<br /><br /><pre name="code" class="xml">&lt;target name="jarxxxxDto" depends="buildxxxxDto">
	&lt;jar destfile="${dist.home}/XXXXXXXXXX/xxxx_SrvDTO.jar"
		basedir="${xxxx.dto.classes}"
		manifest="${xxxx.dto.src}/META-INF/MANIFEST.MF">
		&lt;fileset dir="${xxxx.dto.src}">
			&lt;include name="**/*.java" />
		&lt;/fileset>
	&lt;/jar>
&lt;/target>

&lt;target name="jarxxxxsrv" depends="buildxxxxSrvBizImpl">
	&lt;jar destfile="${dist.home}/XXXXXXXXXX/xxxx_SrvBizImpl.jar"
		basedir="${xxxx.srv.classes}"
		manifest="${xxxx.srv.src}/META-INF/MANIFEST.MF">
		&lt;fileset dir="${xxxx.srv.src}">
			&lt;include name="**/*.java" />
		&lt;/fileset>
	&lt;/jar>
&lt;/target>

&lt;target name="jarxxxxejb" depends="buildxxxxEjb">
	&lt;jar destfile="${dist.home}/XXXXXXXXXX/xxxx_EJB.jar"
		basedir="${xxxx.ejb.classes}"
		manifest="${xxxx.ejb.src}/META-INF/MANIFEST.MF">
		&lt;metainf dir="${xxxx.ejb.src}/META-INF">
			&lt;include name="**/*.*" />
		&lt;/metainf>
		&lt;fileset dir="${xxxx.ejb.src}">
			&lt;include name="**/*.java" />
		&lt;/fileset>
	&lt;/jar>
&lt;/target>

&lt;target name="jarxxxxejbclient" depends="buildxxxxEjbClient">
	&lt;jar destfile="${dist.home}/XXXXXXXXXX/xxxx_EJB_Client.jar"
		basedir="${xxxx.ejbclient.classes}"
		manifest="${xxxx.ejbclient.src}/META-INF/MANIFEST.MF">
		&lt;fileset dir="${xxxx.ejbclient.src}">
			&lt;include name="**/*.java" />
		&lt;/fileset>
	&lt;/jar>
&lt;/target></pre><br /><br />然后把打好的jar包还有web项目的文件都放到同一个目录的正确的位置，准备打成ear包<br /><pre name="code" class="xml">

&lt;target name="forEar" depends="clean,init,buildAll,jarAll">
	&lt;copy todir="${dist.home}/XXXXXXXXXX">
		&lt;fileset dir="${jcm.ear}">
			&lt;include name="**/*.properties" />
			&lt;include name="**/*.xml" />
			&lt;include name="**/*.MF" />
			&lt;include name="**/*.dtd" />
			&lt;include name="**/.compatibility" />
			&lt;exclude name=".settings/**/*.*" />
		&lt;/fileset>
		&lt;fileset dir="${dist.home}">
			&lt;include name="xxxx_WEB.war/**/*.*" />
		&lt;/fileset>
		&lt;fileset dir="${XXX1_LIB.dir}">
			&lt;include name="asm-2.2.1.jar" />
            .
            .
            .
            .
            .
		&lt;/fileset>
		&lt;fileset dir="${XXX2_LIB.dir}">
			&lt;include name="log4j-1.2.14.jar" />
            .
            .
            .
            .
            .
		&lt;/fileset>
	&lt;/copy>
&lt;/target></pre>打ear包<br /><br /><pre name="code" class="xml">&lt;target name="createEar" depends="forEar">
	&lt;delete dir="${dist.home}/XXXXXXXXXX/temp" />
	&lt;delete dir="${dist.home}/temp" />
	&lt;mkdir dir="${dist.home}/XXXXXXXXXX/temp" />
	&lt;mkdir dir="${dist.home}/temp" />
	&lt;war destfile="${dist.home}/XXXXXXXXXX/temp/xxxx_WEB.war" webxml="${dist.home}/XXXXXXXXXX/xxxx_WEB.war/WEB-INF/web.xml">
		&lt;fileset dir="${dist.home}/XXXXXXXXXX/xxxx_WEB.war/">
			&lt;include name="**/*.*" />
			&lt;exclude name="WEB-INF/web.xml" />
		&lt;/fileset>
	&lt;/war>
	&lt;ear destfile="${dist.home}/temp/XXXXXXXXXX" appxml="${dist.home}/XXXXXXXXXX/META-INF/application.xml">
		&lt;fileset dir="${dist.home}/XXXXXXXXXX">
			&lt;include name="**/*.jar" />
			&lt;include name="**/*.xml" />
			&lt;include name="**/*.properties" />
			&lt;include name="**/*.xsl" />
			&lt;exclude name="xxxx_WEB.war/**/*.*" />
			&lt;exclude name="**/application.xml" />
		&lt;/fileset>
		&lt;fileset dir="${dist.home}/XXXXXXXXXX/temp">
			&lt;include name="*.war" />
		&lt;/fileset>
	&lt;/ear>
&lt;/target></pre><br /><br />然后就需要部署到websphere服务器上面去了。<br /><br />先要利用websphere的部署工具生成服务器的部署代码<br /><br /><pre name="code" class="xml">&lt;target name="ForDeploy">
	&lt;exec dir="C:\Program Files\IBM\SDP70\runtimes\base_v61\bin" executable="cmd">
		&lt;arg line="/c ejbdeploy.bat -complianceLevel 5.0 C:/antoutput/temp/XXXXXXX.ear C:/antoutput/temp C:/anttest/XXXXXXXX.ear" />
	&lt;/exec>
&lt;/target></pre><br /><br />这个完成了之后，我们就得到了一个可以直接部署到服务器上面的ear文件<br /><br />然后，我们可以利用websphere提供的命令完成很多的工作。<br /><br />停止服务器<br /><pre name="code" class="xml">&lt;target name="stopServer">
	&lt;exec dir="C:\Program Files\IBM\SDP70\runtimes\base_v61\bin" executable="cmd">
		&lt;arg line="/c stopServer.bat server1 -profileName AppSrv01" />
	&lt;/exec>
&lt;/target></pre>启动服务器<br /><pre name="code" class="java">&lt;target name="startServer">
	&lt;exec dir="C:\Program Files\IBM\SDP70\runtimes\base_v61\bin" executable="cmd">
		&lt;arg line="/c startServer.bat server1 -profileName AppSrv01" />
	&lt;/exec>
&lt;/target></pre><br /><br />部署EAR<br /><pre name="code" class="xml">&lt;target name="installEar">
	&lt;exec dir="C:\Program Files\IBM\SDP70\runtimes\base_v61\bin" executable="cmd">
		&lt;arg line="/c wsadmin.bat -process server1 -profileName AppSrvWSFP01 -f reDeploy.jacl" />
	&lt;/exec>
&lt;/target></pre><br />reDeploy.jacl<br /><br /><pre name="code" class="xml">#这是我们要发布的应用的存放路径
set EARDIR C:/antoutput/temp/XXXXX.ear
#这是我们要发布的应用的名称
set APPNAME XXXXX
set NODE [$AdminControl getNode]
puts "--                      stoping App                            --"
set APPMANAGER [$AdminControl queryNames type=ApplicationManager,node=D1N4GGBXNode02,process=server1,*]
$AdminControl invoke $APPMANAGER stopApplication XXXXX
puts "--                      stoped  App                            --"
puts "--                      uninstalling  App                      --"
$AdminApp uninstall XXXXX
puts "--                      uninstalled  App                       --"
puts "--                      saveing config                         --"
$AdminConfig save
puts "--                      saved config                           --"
puts "--                       Installing App                        --"
$AdminApp install $EARDIR {-appname XXXXX}
puts "--                       Installed  App                        --"
puts "--                      saveing config                         --"
$AdminConfig save
puts "--                      saved config                           --"
puts "--                      starting app                           --"
set APPMANAGER [$AdminControl queryNames type=ApplicationManager,node=D1N4GGBXNode02,process=server1,*]
$AdminControl invoke $APPMANAGER startApplication XXXXX
puts "--                      started app                           --"</pre>这样的一套ant文件和jacl文件完成以后，我们就可以设定为定时任务。然后服务器就可以每天定时进行自动部署了。<br /><br /><br />当然，其实在部署的时候，如果你的项目还在BUG修正的时期，可能需要修改了bug然后到测试环境很快的验证一下，上面的工作全部都做完大概要花上30分钟，很不划算，我们可以<br />跳过打EAR包的过程，直接将编译后的文件和相关的修改过jar包COPY到部署后的目录，重启服务器就好了，这个也可以做成target，稍微修改一下上面的ant代码，省略几个步骤<br />就可以了。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251795" style="color:red;">已有 <strong>0</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 13:20:44 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251795</link>
        <guid>http://www.javaeye.com/topic/251795</guid>
      </item>
          <item>
        <title>易保面试题目</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liliugen.javaeye.com">liliugen</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250871" style="color:red;">http://www.javaeye.com/topic/250871</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.你平时都知道怎么写过高效率的SQL<br />2.<br />SPRING 的事务处理你们放在哪一层处理<br />3.两个DAO进行交互，一个DAO失败了是不是另外一个也失败，那这样怎么办啊·<br />4.JSF什么个框架·<br />5.STRUTS&nbsp; 里面ACTIONSERVLET在容器里面是不是就一个？<br /><br />6 如果你说是5的答案一个，就问，那么多人访问你的应用，那么多线程就一个ActionServlet，安全吗？
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250871" style="color:red;">已有 <strong>37</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 17:56:41 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250871</link>
        <guid>http://www.javaeye.com/topic/250871</guid>
      </item>
          <item>
        <title>Myeclipse 6.0.1 + eclipse3.3.1高速下载</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jerryqiu007.javaeye.com">jerryqiu007</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251432" style="color:red;">http://www.javaeye.com/topic/251432</a>&nbsp;
          发表时间: 2008年10月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>MyEclipse_6.0.1GA_E3.3.1_FullStackInstaller.exe<br />URL:&nbsp;<a href="http://downloads.myeclipseide.com/downloads/products/eworkbench/6.0.1GA/MyEclipse_6.0.1GA_E3.3.1_FullStackInstaller.exe"><span style="color: #3468a4;">http://downloads.myeclipseide.com/downloads/products/eworkbench/6.0.1GA/MyEclipse_6.0.1GA_E3.3.1_FullStackInstaller.exe</span></a><br />Size: 244.81 MB<br /><br /><br />MyEclipse_6.0.1GA_E3.3.1_Installer.exe<br />URL:&nbsp;<a href="http://downloads.myeclipseide.com/downloads/products/eworkbench/6.0.1GA/MyEclipse_6.0.1GA_E3.3.1_Installer.exe"><span style="color: #3468a4;">http://downloads.myeclipseide.com/downloads/products/eworkbench/6.0.1GA/MyEclipse_6.0.1GA_E3.3.1_Installer.exe</span></a><br />Size: 176.33 MB<br /><br /><br />eclipse-SDK-3.3.1-win32.zip<br />URL:&nbsp;<a href="http://download.actuatechina.com/eclipse/eclipse/downloads/drops/R-3.3.1-200709211145/eclipse-SDK-3.3.1-win32.zip"><span style="color: #3468a4;">http://download.actuatechina.com/eclipse/eclipse/downloads/drops/R-3.3.1-200709211145/eclipse-SDK-3.3.1-win32.zip</span></a></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251432" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Oct 2008 19:08:40 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251432</link>
        <guid>http://www.javaeye.com/topic/251432</guid>
      </item>
          <item>
        <title>如何Tomcat下中文乱码问题？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhuzhsh.javaeye.com">zhuzhsh</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251743" style="color:red;">http://www.javaeye.com/topic/251743</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>现在将常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;"><strong>1）JSP页面中显示中文乱码</strong></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在JSP文件中使用page命令指定响应结果的MIME类型，如&lt;%@ page language="java" contentType="text/html;charset=gb2312" %&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="text-decoration: underline;">2）表单提交乱码</span></strong>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 表单提交时（post和Get方法），使用request.getParameter方法得到乱码，这是因为tomcat处理提交的参数时默认的是iso-8859-1，表单提交get和post处理乱码问题不同，下面分别说明。<br />&nbsp;&nbsp;&nbsp; (1)POST处理<br />&nbsp;&nbsp; &nbsp;对post提交的表单通过编写一个过滤器的方法来解决，过滤器在用户提交的数据被处理之前被调用，可以在这里改变参数的编码方式，过滤器的代码如下：</p>
<pre name="code" class="java">package example.util;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class SetCharacterEncodingFilter implements Filter {
    
       protected String encoding = null;
    
       protected FilterConfig filterConfig = null;
    
       protected boolean ignore = true;
    
  
     public void destroy() {
    
      this.encoding = null;
      this.filterConfig = null;
    
     }
    
     public void doFilter(ServletRequest request, ServletResponse response,
      <strong><span style="color: #ff0000;"> FilterChain chain) throws IOException, ServletException {
    
          if (ignore || (request.getCharacterEncoding() == null)) {
       String encoding = selectEncoding(request);
       if (encoding != null) {
        request.setCharacterEncoding(encoding);
       }
      }</span>
</strong>    
      // Pass control on to the next filter
      chain.doFilter(request, response);
    
     }
    public void init(FilterConfig filterConfig) throws ServletException {
    
      this.filterConfig = filterConfig;
      this.encoding = filterConfig.getInitParameter("encoding");
      String value = filterConfig.getInitParameter("ignore");
      if (value == null) {
       this.ignore = true;
      } else if (value.equalsIgnoreCase("true")) {
       this.ignore = true;
      } else if (value.equalsIgnoreCase("yes")) {
       this.ignore = true;
      } else {
       this.ignore = false;
      }
    
     }
    
     protected String selectEncoding(ServletRequest request) {
    
      return (this.encoding);
    
     }
    
    }
</pre>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 文中红色的代码即为处理乱码的代码。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; web.xml文件加入过滤器</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;filter&gt;
    &lt;filter-name&gt;Encoding&lt;/filter-name&gt;
    &lt;filter-class&gt;
            example.util.SetCharacterEncodingFilter
     &lt;/filter-class&gt;
    &lt;init-param&gt;
   &lt;param-name&gt;encoding&lt;/param-name&gt;
   &lt;param-value&gt;gbk&lt;/param-value&gt;
   &lt;!--gbk或者gb2312或者utf-8--&gt;
  &lt;/init-param&gt;
  &lt;init-param&gt;
   &lt;param-name&gt;ignore&lt;/param-name&gt;
   &lt;param-value&gt;true&lt;/param-value&gt;
  &lt;/init-param&gt;
 &lt;/filter&gt;</pre>
<pre name="code" class="xml">&lt;filter-mapping&gt;
  &lt;filter-name&gt;Encoding&lt;/filter-name&gt;
  &lt;servlet-name&gt;/*&lt;/servlet-name&gt;
 &lt;/filter-mapping&gt;</pre>
<p>&nbsp;</p>
<p>(2) Get方法的处理<br />&nbsp;tomcat对post和get的处理方法不一样，所以过滤器不能解决get的乱码问题，它需要在其他地方设置。<br />&nbsp;打开&lt;tomcat_home&gt;\conf目录下server.xml文件，找到对8080端口进行服务的Connector组件的设置部分，给这个组件添加一个属性：URIEncoding="GBK"。修改后的Connector设置为：<br />&nbsp;&nbsp;</p>
<pre name="code" class="java">&lt;Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" <span style="color: #ff0000;">URIEncoding="GBK"</span> /&gt;</pre>
<p><br />&nbsp; * 注意修改后重新启动tomcat才能起作用。</p>
<p>&nbsp;<a href="http://www.diybl.com/course/3_program/java/javajs/2008219/100298.html"></a></p>
<p><a href="http://www.diybl.com/course/3_program/java/javajs/2008219/100298.html"></a>&nbsp;</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251743" style="color:red;">已有 <strong>2</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 10:03:50 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251743</link>
        <guid>http://www.javaeye.com/topic/251743</guid>
      </item>
          <item>
        <title>使用Weblogic出现问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fantlam.javaeye.com">fantlam</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251777" style="color:red;">http://www.javaeye.com/topic/251777</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我之前做的项目在Tomcat下使用没有任何问题,用的技术是spring+hibernate+struts<br />但移植到weblogic的时候就有问题 有些JSP页面解析出错.<br />今天自己做了一个简单的SSH项目测试,在tomcat下没有报错<br />而到了weblogic下的有错<br />难道是版本问题吗 是用tomcat5.5 weblogic9.2&nbsp; 现在要用weblogic做服务器做项目,请各位指点<br />2008-10-12 11:01:30,125 ERROR [org.springframework.web.context.ContextLoader] - Context initialization failed<br />org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br />java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br />	at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)<br />	at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:173)<br />	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)<br />	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)<br />	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)<br />	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)<br />	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)<br />	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)<br />	at org.hibernate.impl.SessionFactoryImpl.&lt;clinit>(SessionFactoryImpl.java:321)<br />	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1005)<br />	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:825)<br />	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:751)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1091)<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:396)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)<br />	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)<br />	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)<br />	at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)<br />	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)<br />	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)<br />	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)<br />	at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:375)<br />	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)<br />	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)<br />	at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:83)<br />	at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1591)<br />	at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2734)<br />	at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:892)<br />	at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:336)<br />	at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:204)<br />	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)<br />	at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:60)<br />	at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)<br />	at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:117)<br />	at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:204)<br />	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)<br />	at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:60)<br />	at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:26)<br />	at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:641)<br />	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)<br />	at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:229)<br />	at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:154)<br />	at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80)<br />	at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:565)<br />	at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:136)<br />	at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:104)<br />	at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:320)<br />	at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:815)<br />	at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1222)<br />	at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:433)<br />	at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:161)<br />	at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:181)<br />	at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:12)<br />	at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:67)<br />	at weblogic.work.ServerWorkManagerImpl$WorkAdapterImpl.run(ServerWorkManagerImpl.java:518)<br />	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)<br />	at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)<br />&lt;2008-10-12 上午11时01分30秒 CST> &lt;Warning> &lt;HTTP> &lt;BEA-101162> &lt;User defined listener org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V.<br />org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br />	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:403)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)<br />	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)<br />	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)<br />	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)<br />	Truncated. see log file for complete stacktrace<br />java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br />	at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)<br />	at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:173)<br />	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)<br />	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)<br />	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)<br />	Truncated. see log file for complete stacktrace<br />> <br />&lt;2008-10-12 上午11时01分32秒 CST> &lt;Error> &lt;Deployer> &lt;BEA-149265> &lt;Failure occured in the execution of deployment request with ID '1223780468671' for task '0'. Error is: 'weblogic.application.ModuleException: '<br />weblogic.application.ModuleException: <br />	at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:894)<br />	at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:336)<br />	at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:204)<br />	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)<br />	at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:60)<br />	Truncated. see log file for complete stacktrace<br />java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br />	at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)<br />	at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:173)<br />	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)<br />	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)<br />	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)<br />	Truncated. see log file for complete stacktrace<br />> <br />&lt;2008-10-12 上午11时01分32秒 CST> &lt;Error> &lt;Deployer> &lt;BEA-149202> &lt;Encountered an exception while attempting to commit the 1 task for the application '_appsdir_TestWeb_dir'.> <br />&lt;2008-10-12 上午11时01分32秒 CST> &lt;Warning> &lt;Deployer> &lt;BEA-149004> &lt;Failures were detected while initiating deploy task for application '_appsdir_TestWeb_dir'.> <br />&lt;2008-10-12 上午11时01分32秒 CST> &lt;Warning> &lt;Deployer> &lt;BEA-149078> &lt;Stack trace for message 149004<br />weblogic.application.ModuleException: <br />	at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:894)<br />	at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:336)<br />	at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:204)<br />	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)<br />	at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:60)<br />	Truncated. see log file for complete stacktrace<br />java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br />	at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)<br />	at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:173)<br />	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)<br />	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)<br />	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)<br />	Truncated. see log file for complete stacktrace<br />> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Warning> &lt;Server> &lt;BEA-002611> &lt;Hostname "microsof-c6l145", maps to multiple IP addresses: 202.192.165.143, 192.168.255.1, 192.168.57.1> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Notice> &lt;Server> &lt;BEA-002613> &lt;Channel "Default[3]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, http.> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Notice> &lt;Server> &lt;BEA-002613> &lt;Channel "Default[1]" is now listening on 192.168.255.1:7001 for protocols iiop, t3, ldap, http.> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Warning> &lt;Server> &lt;BEA-002611> &lt;Hostname "MICROSOF-C6L145", maps to multiple IP addresses: 202.192.165.143, 192.168.255.1, 192.168.57.1> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Notice> &lt;Server> &lt;BEA-002613> &lt;Channel "Default[2]" is now listening on 192.168.57.1:7001 for protocols iiop, t3, ldap, http.> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Notice> &lt;Server> &lt;BEA-002613> &lt;Channel "Default" is now listening on 202.192.165.143:7001 for protocols iiop, t3, ldap, http.> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Notice> &lt;WebLogicServer> &lt;BEA-000331> &lt;Started WebLogic Admin Server "AdminServer" for domain "base_domain" running in Development Mode> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Notice> &lt;WebLogicServer> &lt;BEA-000365> &lt;Server state changed to RUNNING> <br />&lt;2008-10-12 上午11时01分34秒 CST> &lt;Notice> &lt;WebLogicServer> &lt;BEA-000360> &lt;Server started in RUNNING mode>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251777" style="color:red;">已有 <strong>3</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 11:15:00 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251777</link>
        <guid>http://www.javaeye.com/topic/251777</guid>
      </item>
          <item>
        <title>hibernate:事务处理,缓存,以及性能优化.</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://daydaystudy.javaeye.com">逆风逛飙</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251607" style="color:red;">http://www.javaeye.com/topic/251607</a>&nbsp;
          发表时间: 2008年10月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          事务基本概念:<br />事务是并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位,例如,银行转账工作,从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行.所以,应该把它们看成一个事务.事务是数据库维护一致性的单位,在每个事务结束时,都能保持数据一致性.<br />基本特征:<br />&nbsp; 原子性(Atomic):<br />事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败.<br />&nbsp; 一致性(Consistencey):<br />只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态.<br />&nbsp; 隔离性(Isolation):<br />事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性.同时,并行事务的修改必须与其他并行事务的修改相互独立.<br />&nbsp; 持久性(Durability):事务结束后,事务处理的结果必须能够得到固化.<br />数据库肯定是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况.<br />更好新丢失:<br />&nbsp; 两个事务都同时更新一行数据,但是第二个事务去中途失败退出,导致对数据的两个修改都失效了.这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来.<br />脏读取:<br />&nbsp; 一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够提交.这是相当危险的,因为很可能所有的操作都被回滚.<br />不可重得读取:<br />&nbsp; 一个事务对同一行数据重复读取两次,但是却得到了不同的结果.例如,在两次读取的中签,有另外一个事务对该行数据进行了修改,并提交.<br />两次更新问题:<br />&nbsp; 无法重复读取的特例,有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交.这就会造成第一次写操作失效.<br />虚读:<br />&nbsp; 事务在操作过程中进行两次查询,第二次查询的结果包含了一次查询中未出现的数据(这里并不要求两次查询的Sql语句相同).这是因为在两次查询过程中有另外一个事务插入数据造成的.
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251607" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Oct 2008 14:44:58 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251607</link>
        <guid>http://www.javaeye.com/topic/251607</guid>
      </item>
          <item>
        <title>运行在tomcat服务器中的后台定时线程是否可以可靠定时的运行？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jef.javaeye.com">jef</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251644" style="color:red;">http://www.javaeye.com/topic/251644</a>&nbsp;
          发表时间: 2008年10月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          需求是这样的，我们要做一个票务网站，售票数据需要暂时的锁定，出于效率考虑，肯定是将售票数据放到内存中先锁定一段时间了。<br /><br />为了解除对售票数据的锁定大概有两种方法，第一种方法是对用户每一次请求都去内存中检查是否有失效的票务数据，有失效的数据则释放锁定（这个效率不太高吧。），第二种是启动一个后台线程，定时去内存中检查是否有失效的票务数据然后解除锁定。<br /><br />如果考虑到服务器压力的话，肯定是启用后台定时线程清理失效数据的方式比较好，相对第一种方法可以减少很多次内存数据的检查。但是有个问题是，记得很早前做过一个webservice的压力测试，发现当用户的并发数上去之后，tomcat很有可能会优先执行前台的http线程，而后台的自定义线程则被挂起暂缓执行。就算是调高后台线程的优先级也不管用。<br /><br />由于之前也没有继续深入研究下去，所以想问一下大家就是如何保证运行在tomcat服务器下开发的一个后台线程在有大并发压力下一定定时运行，有这样的实现吗？或者面对此种需求时候是否有其他简单，高效解决方案。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251644" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Oct 2008 17:45:27 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251644</link>
        <guid>http://www.javaeye.com/topic/251644</guid>
      </item>
          <item>
        <title>关于成立OA开源项目的答复</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhu-chen001.javaeye.com">zhu_chen001</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251783" style="color:red;">http://www.javaeye.com/topic/251783</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          大家的疑问：<br />1.我对OA认识不多，但感觉要做出一个好的OA系统不容易。市场上已经有一些现成的OA产品，center-oa可能有些什么特点，让它能吸引用户？要知道仅仅靠免费是无法吸引企业用户的<br /><br />2.你打算怎样收集项目的需求？是你自己有做过OA的经验吗？如果团队中的大多数成员都没有OA都经验（我看在JavaEye上讨论OA的比较少），对项目的协作有什么影响？<br /><br />3.你提到“主要用OSGI R4和spring2.5.5、eclipse，主要使用java，不排斥流行的动态语言 ”，个人感觉是从新手到老鸟都可以加入，我估计有一些朋友是抱着练手的想法的。如果团队成员的技术水平差异较大，你有没有什么比较好的办法控制代码质量？<br /><br />4.个人感觉开发这样一个系统可能不是短期能做好的，有没有预计过有一天项目会死掉？因为大家主要是业余时间来做它，实际上非常考验大家的耐心。开发过程中很可能出现进度参差不齐、代码质量不一、沟通效率低下、热情消退等情况，对这些有没有心理准备呢？ <br /><br />答复：<br />OA系统系统的需求的确不好收集，但是国内的几个OA系统我看过了，就是起步，不具备很强的竞争能力，与国外的差距较大（Notes），我们的产生就是出于这样的背景<br /><br />本人只有一些OA的经验，做过一个和OA靠边的项目（呵呵...），就是想涉及这个领域<br /><br />本次的涉及的技术较为超前，OSGI的成功案例不多，所以技术上的要求较高，所有进入项目的人员对技术要求是第一位的，不是任何人都可以参加的，我们需要做一个顶好的项目，不是一个普通的项目。<br /><br />代码质量的控制，如果有充足的人员参加，会组织一个专家组，对于成员的代码进行评估。<br /><br />项目的周期较长，我估计需要一年的时间才能看到我们第一个版本的出现，过程是漫长的。而且初期肯定不具备盈利的能力，项目的本身不是以营利为目标的，这个必须要让所有的组员清晰。至于后期是否盈利，主要看项目的发展。<br />盈利不是这个项目的核心目标，前面我说过了，项目的核心目标是让更多的企业（主要是国内的）获得更好的信息服务，从而减少企业的成本，增加企业的竞争能力。等有了广大的企业客户后，项目的前景是可观的。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251783" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 11:40:45 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251783</link>
        <guid>http://www.javaeye.com/topic/251783</guid>
      </item>
          <item>
        <title>现在招聘网站也搞竟价吗?</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://japi.javaeye.com">east_java</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251776" style="color:red;">http://www.javaeye.com/topic/251776</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          要毕业了.<br /><br />开始到各个招聘网站去搜索职位.<br /><br />在搜索JAVA的时候,结果第一页几乎都是培训机构招培训生的.<br /><br />很是无语.<br /><br />招聘网站是寻求职位的地方,怎么变成像是培训机构附属单位一样.
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251776" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 11:13:22 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251776</link>
        <guid>http://www.javaeye.com/topic/251776</guid>
      </item>
          <item>
        <title>在java应用程序中加入发送邮件的功能</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://staratsky.javaeye.com">mfcai</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251720" style="color:red;">http://www.javaeye.com/topic/251720</a>&nbsp;
          发表时间: 2008年10月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          javaMai 为建立邮件和消息服务提供了框架,因而应用程序可以发送和接收邮件.JavaMail API 是一个用于阅读、编写和发送电子消息的可选包（标准扩展），可以用来建立基于标准的电子邮件客户机，它配置了各种因特网邮件协，包括SMTP 、POP 、IMAP和 MIME ，还包括相关的NNTP 、S/MIME 及其它协议。<br />&nbsp;&nbsp; 通常开发JavaMail 程序通常需要mail.jar 和 activation.jar 两个架包。mail.jar包含mailapi.jar、pop3.jar 和 smtp.jar。mailapi.jar包含核心的API 类, pop3.jar 和 smtp.jar为各自的邮件协议包含实现方法. activation.jar处理 MIME (多用途因特网邮件扩展)类型。<br /><br />&nbsp;&nbsp; 核心JavaMail API 由七个类组成：Session 、Message 、Address 、Authenticator 、Transport 、Store 及 Folder ，它们都来自javax.mail 、即JavaMail API 顶级包。可以用这些类完成大量常见的电子邮件任务，包括发送消息、检索消息、删除消息、认证、回复消息、转发消息、管理附件、处理基于HTML文件格式的消息以及搜索或过滤邮件列表。<br />这里只具体说明一下发送邮件的JavaMail类：<br />1.Session<br />　　这个Session类代表JavaMail 中的一个邮件session. 每一个基于 JavaMail的应用程序至少有一个session但是可以有任意多的session。<br />&nbsp;&nbsp;&nbsp;&nbsp; 在这个例子中, Session对象需要知道用来处理邮件的SMTP 服务器。JavaMail需要Properties来创建一个session对象<br />　　Session sendMailSession;<br />&nbsp;&nbsp;&nbsp; Properties props = new Properties ();<br />　　props.put("mail.smtp.host", "smtp.sina.com.cn");//可以换上你的smtp主机名。<br />　　sendMailSession = Session.getInstance(props, null);<br />2.Transport<br />　　Transport 是用来发送信息的.<br />　　用法：Transport transport;<br />　　transport = sendMailSession.getTransport("smtp");<br />　　用JavaMail Session对象的getTransport 方法来初始化Transport。传过去的字符串申明了对象所要使用的协议，如"smtp"。这是因为JavaMail以境内置了很多协议的实现方法。<br />　　注意: JavaMail并不是绝对支持每一个协议，目前支持IMAP、 SMTP和 POP3。<br />3.Message<br />　　Message对象将存储我们实际发送的电子邮件信息，Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。<br />　　使用方法：Message newMessage = new MimeMessage(sendMailSession);<br />4.MimeMessage<br />&nbsp;&nbsp;&nbsp; 实现Message接口，以显示Mime风格的消息<br />5.InternetAddress<br />&nbsp;&nbsp;&nbsp; 存储电子邮件中关于“from”、“to”域的信息<br /><br /> <br />用JavaMail发送电子邮件的过程比较简单，大致分为以下5个步骤：<br />1.创建Properties 对象，设置邮件服务器属性：mail.smtp.host ，即指定你的SMTP服务器。<br />2.建立一个邮件会话<br />3.创建你的邮件信息对象，该对象包含了你的邮件的全部内容，包括发送人，接受人，标题，正文，附件等内容<br />4.完成发送前的服务器验证<br />5.发送邮件<br /><br /> <br /><br />以下是代码，在这里发送人和接收人都是用的新浪邮箱，没有加入发送附件的功能<br /><pre name="code" class="java">package test;
import java.io.*;
import java.text.*;
import java.util.*;
port javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;

public class SimpleSender {
 
 public static void main(String args[]) {
  try {
   String smtpServer = "smtp.sina.com.cn";
   String to = "test1@sina.com.cn";
   String from = "test2@sina.com.cn";
   String subject = "hello";
   String body = "";
   send(smtpServer, to, from, subject, body);
  } catch (Exception ex) {
   System.out.println("Usage: java test.SimpleSender"
     + " smtpServer toAddress fromAddress subjectText bodyText");
  }

 }

 public static void send(String smtpServer, String to, String from,
   String subject, String body) {
  try {
    Properties props = System.getProperties();
    props.put("mail.smtp.host", smtpServer);
    props.put("mail.smtp.auth","true");  
    Authenticator  sa = new SmtpAuth(from, "");
           Session session = Session.getDefaultInstance(props,sa);
           InternetAddress     fromadress   =   new   InternetAddress(from);  
           javax.mail.internet.InternetAddress   toadress=   new   javax.mail.internet.InternetAddress   (to);  
           javax.mail.internet.MimeMessage     mymessage   =   new   javax.mail.internet.MimeMessage   (session);  
           mymessage.setFrom(fromadress);  
           mymessage.setRecipient(Message.RecipientType.TO   ,toadress);  
           mymessage.setSentDate(new   java.util.Date());  
           mymessage.addHeader("header","test")   ;  
           mymessage.setSubject(subject)   ;  
           mymessage.setText("hello")   ;  
           Transport   tt=session.getTransport("smtp");  
           tt.send(mymessage);  
  } catch (Exception ex) {
   System.out.println(ex.toString());
  }
  
 }
}  </pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251720" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Oct 2008 00:22:22 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251720</link>
        <guid>http://www.javaeye.com/topic/251720</guid>
      </item>
          <item>
        <title>Adobe Air 应用实践： 乐道“乐宝”</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://koalant.javaeye.com">koalant</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/249121" style="color:red;">http://www.javaeye.com/topic/249121</a>&nbsp;
          发表时间: 2008年10月05日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.likenote.com/air/index.html" target="_blank"><img src="http://www.likenote.com/air/test.jpg" /></a><br /><br />乐道“乐宝”网站： <a href="http://www.likenote.com/air/index.html" target="_blank">http://www.likenote.com/air/index.html</a><br /><br />开发“乐宝”心得参看：<a href=" http://blog.csdn.net/koalant/archive/2008/10/05/3016839.aspx" target="_blank"> http://blog.csdn.net/koalant/archive/2008/10/05/3016839.aspx</a><br /><br /><a href="http://www.likenote.com/air/images/cap1.jpg" target="_blank"><img src="http://www.likenote.com/air/images/cap1.jpg" /></a><br /><br /> <br /><br />“乐宝”是采用 Adobe Air 技术开发的一个桌面应用。访问 <a href="http://www.likenote.com/air/index.html" target="_blank">http://www.likenote.com/air/index.html</a>, 点击“乐宝”图片，会弹出安装程序，按照提示将“乐宝”安装到系统中，桌面上会显示一个"likenote"图标。“乐宝”支持 Windows, Mac OS 两种操作系统，未来将支持 linux 。第一次安装需要先安装 Adobe Air Runtime 环境，所以 在线安装下载比较慢。“乐宝”程序本身只有400多K。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/249121" style="color:red;">已有 <strong>5</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 05 Oct 2008 19:11:34 +0800</pubDate>
        <link>http://www.javaeye.com/topic/249121</link>
        <guid>http://www.javaeye.com/topic/249121</guid>
      </item>
          <item>
        <title>让你的 Ibatis2 也支持Annotation</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cnoss.javaeye.com">cnoss</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251047" style="color:red;">http://www.javaeye.com/topic/251047</a>&nbsp;
          发表时间: 2008年10月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong><span style="color: Blue">在支持xml配置方式的基础上增加了对annotation的支持，用户可以根据自己的喜好来选择或者两种方式并存。</span></strong><br /><br />详情请大家看：<a href="http://www.rest4g.org/viewthread.php?tid=12&amp;extra=page%3D1" target="_blank">http://www.rest4g.org/viewthread.php?tid=12&amp;extra=page%3D1</a><br /><br />代码示例如下：<br />Account.java<pre name="code" class="java">
package org.jrest4guice.persistence.ibatis;
public class Account {
  private int id;
  private String firstName;
  private String lastName;
  private String emailAddress;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getEmailAddress() {
    return emailAddress;
  }

  public void setEmailAddress(String emailAddress) {
    this.emailAddress = emailAddress;
  }

}
</pre>AccountService.java<pre name="code" class="java">
package org.jrest4guice.persistence.ibatis;

import java.sql.SQLException;
import java.util.List;

import org.jrest4guice.persistence.ibatis.annotations.Delete;
import org.jrest4guice.persistence.ibatis.annotations.IbatisDao;
import org.jrest4guice.persistence.ibatis.annotations.Insert;
import org.jrest4guice.persistence.ibatis.annotations.Result;
import org.jrest4guice.persistence.ibatis.annotations.ResultMap;
import org.jrest4guice.persistence.ibatis.annotations.Select;
import org.jrest4guice.persistence.ibatis.annotations.Update;
import org.jrest4guice.transaction.annotations.Transactional;
import org.jrest4guice.transaction.annotations.TransactionalType;

import com.google.inject.Inject;
import com.ibatis.sqlmap.client.SqlMapClient;

@IbatisDao
@SuppressWarnings("unchecked")
@Transactional
@ResultMap(id = "accountResultMap", result = {
		@Result(property = "id", column = "id"),
		@Result(property = "firstName", column = "firstName"),
		@Result(property = "lastName", column = "lastName"),
		@Result(property = "emailAddress", column = "emailAddress") }, resultClass = Account.class)
@Cachemodel(id = "account-cache", flushInterval = "24", flushOnExecute = {
		"insertAccount", "updateAccount", "deleteAccount" }, type = "LRU", 
		property = { @Property(name = "size", value = "100") })
public class AccountService {
	@Inject
	private SqlMapClient sqlMapper;

	@Select(id = "selectAllAccounts", sql = "select * from ACCOUNT", 
			resltMap = "accountResultMap", cacheModel = "account-cache")
	@Transactional(type = TransactionalType.READOLNY)
	public List&lt;Account> findAll() throws SQLException {
		return sqlMapper.queryForList("selectAllAccounts");
	}

	@Select(sql = "select id ,firstName,lastName,emailAddress from "
			+ "ACCOUNT where id = #id#")
	@Transactional(type = TransactionalType.READOLNY)
	public Account getAccountById(int id) throws SQLException {
		return (Account) sqlMapper.queryForObject("getAccountById", id);
	}

	@Insert(id = "insertAccount", sql = "insert into ACCOUNT (id,firstName,"
			+ "lastName,emailAddress) values (#id#, #firstName#, #lastName#, "
			+ "#emailAddress#)")
	public void createAccount(Account account) throws SQLException {
		sqlMapper.insert("insertAccount", account);
	}

	@Update(sql = "update ACCOUNT set firstName = #firstName#,lastName = "
			+ "#lastName#,emailAddress = #emailAddress# where id = #id#")
	public void updateAccount(Account account) throws SQLException {
		sqlMapper.update("updateAccount", account);
	}

	@Delete(id = "deleteAccount", sql = "delete from ACCOUNT where id = #id#")
	public void deleteAccount(int id) throws SQLException {
		sqlMapper.delete("deleteAccount", id);
	}

	@Select(id = "queryAccounts", 
		sql = "select * from ACCOUNT "
			+ "&lt;dynamic prepend=\"where\">"
			+ " &lt;isNotNull prepend=\"and\" property=\"firstName\">"
			+ "    firstName = #firstName#" 
			+ " &lt;/isNotNull>"
			+ " &lt;isNotNull prepend=\"and\" property=\"lastName\">"
			+ "    lastName = #lastName#" 
			+ " &lt;/isNotNull>"
			+ " &lt;isNotNull prepend=\"and\" property=\"emailAddress\">"
			+ "    emailAddress = #emailAddress#" 
			+ " &lt;/isNotNull>"
			+ "&lt;/dynamic> " 
			+ "order by lastName", resltMap = "accountResultMap", 
			cacheModel = "account-cache")
	@Transactional(type = TransactionalType.READOLNY)
	/**
	 * 动态SQL查询
	 */
	public List&lt;Account> queryAccounts(Account account) throws SQLException {
		return sqlMapper.queryForList("queryAccounts",account);
	}
}
</pre>AccountServiceTest.java<pre name="code" class="java">
package org.jrest4guice.persistence.ibatis;

import java.sql.SQLException;
import java.util.List;

import junit.framework.Assert;

import org.jrest4guice.guice.GuiceContext;
import org.jrest4guice.guice.PersistenceGuiceContext;
import org.junit.BeforeClass;
import org.junit.Test;

public class AccountServiceTest {
	private static AccountService service;

	@BeforeClass
	public static void setUp() throws Exception {
		// 初始化JRest4Guice
		PersistenceGuiceContext.getInstance().useIbatis(
				"org.jrest4guice.persistence.ibatis").init();
		// 获取服务
		service = GuiceContext.getInstance().getBean(AccountService.class);
	}

	@Test
	public void doTest() {
		List&lt;Account> accounts;
		try {
			Account account = new Account();
			account.setFirstName("张");
			account.setLastName("学友");
			account.setEmailAddress("jackey@rest4g.org");
			// 添加
			service.createAccount(account);

			account = new Account();
			account.setFirstName("刘");
			account.setLastName("学友");
			account.setEmailAddress("test@rest4g.org");
			// 添加
			service.createAccount(account);
			
			//查询（按lastName）
			Account queryCondition = new Account();
			queryCondition.setLastName("学友");
			accounts = service.queryAccounts(queryCondition);
			Assert.assertEquals(2, accounts.size());
			
			//查询（按firstName和lastName）
			queryCondition.setFirstName("张");
			accounts = service.queryAccounts(queryCondition);
			Assert.assertEquals(1, accounts.size());

			// 修改
			account = accounts.get(0);
			account.setFirstName("何");
			service.updateAccount(account);
			account = service.getAccountById(account.getId());
			Assert.assertNotNull(account);
			Assert.assertEquals("何", account.getFirstName());

			//查询所有
			accounts = service.findAll();
			Assert.assertEquals(2, accounts.size());

			// 删除
			for (Account ac : accounts){
				service.deleteAccount(ac.getId());
			}
			
			//断言删除的结果
			accounts = service.findAll();
			Assert.assertEquals(0, accounts.size());
		} catch (SQLException e) {
			Assert.fail(e.getLocalizedMessage());
		}
	}
}
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251047" style="color:red;">已有 <strong>41</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Oct 2008 07:17:02 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251047</link>
        <guid>http://www.javaeye.com/topic/251047</guid>
      </item>
          <item>
        <title>理解渐进增强（Progressive Enhancement）</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lifesinger.javaeye.com">lifesinger</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250687" style="color:red;">http://www.javaeye.com/topic/250687</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="post-content">
<p>原文：<a href="http://www.alistapart.com/articles/understandingprogressiveenhancement">Understanding Progressive Enhancement</a><br />
作者：<a href="http://www.alistapart.com/authors/g/aarongustafson">Aaron Gustafson</a><br />
翻译：<a href="http://lifesinger.org/">http://lifesinger.org/</a></p>
<p><img class="alignright size-full wp-image-302" title="progressive-enhancement" src="http://lifesinger.org/blog/wp-content/uploads/2008/10/progressive-enhancement.jpg" height="452" alt="" style="float: right;" width="270" /><br />
从1994年开始，Web开发社区就敲响了<a href="http://en.wikipedia.org/wiki/Graceful_degradation">优雅降级（Graceful Degradation）</a>的
鼓声。这个概念来自工程世界，其核心理念是给最新最强大的浏览器全套餐式的体验，而给那些不幸还在使用Netscape
4的可怜人们只留些残羹冷炙般的基本功能。毫无疑问，这发挥了作用。但是它并不很符合Tim
Berners-Lee（译注：万维网之父）关于普遍可访问性网络（Universally Accessible Web）的原始愿景。</p>
<p>大约10年后，一些聪明的家伙开始质疑优雅降级，发现它在很多层面上有不足之处。他们将精力集中在内容可用性（Content
Availability）、总体可访问性（Overall
Accessibility）和移动设备浏览器的能力上，寻找到了一条Web开发的新途径&mdash;&mdash;此方法将内容作为关注焦点，而不只是对旧设备的支持嘴上说说
却没有实际行动。</p>
<p>在2003年的<a href="http://sxsw.com/">SXSW</a>会议（译注：一个关于电影、音乐和交互的会议）中，Steve Champeon和Nick Finck做了一个名为 &ldquo;<a href="http://www.hesketh.com/publications/inclusive_web_design_for_the_future/">面向未来的全方位Web开发</a>&rdquo; 的演讲。这样，他们揭示了这种Web开发新方法的蓝图。Steve还给它取了个名称：渐进增强（<a href="http://en.wikipedia.org/wiki/Progressive_enhancement">Progressive Enhancement</a>）。</p>
<p>&nbsp;</p>
<h3>这里有个（微妙的）差别</h3>
<p>如果你挠着头想弄清楚优雅降级和渐进增强的区别，我告诉你，这是一个关于视角的问题。优雅降级和渐进增强都考虑一个网页在各种设备的各种浏览器上如何良好运转。两者区别的关键在于它们各自关注的焦点，以及这种关注对工作流程的影响。</p>
<p>&nbsp;</p>
<h4>优雅降级的视角</h4>
<p>优雅降级关注于在最先进/最全能的浏览器上构建网站。在被认为&ldquo;老的&rdquo;或能力不足的浏览器中的测试，经常要等到开发周期的最后一个环节才进行，并且通常限制在主流浏览器（如IE、Mozzila等）的前一个发布版本中。</p>
<p>在这种模式下，老的浏览器只可能提供差强人意（poor, but passable）的体验。或许会做些小补丁来适应某个特定浏览器，但这些浏览器毕竟不是关注的焦点，除了修正重大的错误，也不会再费多大的神了。</p>
<p>&nbsp;</p>
<h4>渐进增强的视角</h4>
<p>渐进增强关注于内容。请注意区别：我甚至都没提及浏览器。</p>
<p>内容是我们最初创建网站的原因。有些网站传播内容，有些收集内容，有些请求内容，有些操作内容，有些网站以上所有功能都有，然而它们都需要内容。这就是渐进增加成为一种更适合的模式的关键所在。这也是Yahoo!迅速采纳这种模式并用它创建了<a href="http://developer.yahoo.com/yui/articles/gbs/">分级浏览器支持（Graded Browser Support）</a>策略的原因。</p>
<p>&nbsp;</p>
<h3>它是怎样运作的</h3>
<p>进入渐进增强的思维方法很简单：只要从内容开始往外想。内容形成坚实的基石，在此之上你才能添加样式和交互。如果你爱吃糖果，可以将它想像成一颗M&amp;M花生巧克力：<br />
<img class="alignnone size-full wp-image-300" title="m-m" src="http://lifesinger.org/blog/wp-content/uploads/2008/10/m-m.png" height="231" alt="" width="500" /><br />
（图示：渐进增强的巧克力层）</p>
<p>从你的内容花生开始，将其标记为富含语义的(X)HTML. 接着给内容裹上一层富含奶油的CSS. 最后，添加JavaScript作为糖果硬壳，这就做成了一颗可口无比的美味（并使得它不会在你手里融化）。</p>
<p>如果你非常熟悉Web标准化运动的口号&mdash;&mdash;分离、分离、分离&mdash;&mdash;这个类比就相当清楚了。基于Web标准的开发经常被比作<a href="http://www.flickr.com/photos/aarongustafson/83123599/">夹心蛋糕</a>（或者，可以更富想像力地比作为<a href="http://www.stuffandnonsense.co.uk/archives/web_standards_trifle.html">松糕</a>（译注：一种多层蛋糕，可以夹水果、奶油、沙司等））。</p>
<p>我更倾向拿M&amp;M花生巧克力来类比，因为它的外层把内容完全包裹住了，这和我们的样式与脚本将内容包裹起来几乎是一样的。</p>
<p>如果你允许我的食物类比论再多讲一点（希望不会让你感觉饥饿），我将解释为什么这种方式更好以及在这种模式下各层之间是如何交互的。</p>
<p>&nbsp;</p>
<h4>花生仁</h4>
<p>有些人喜欢花生。实际上，有人喜欢花生胜过M&amp;M花生巧克力。类似地，有些家伙（以及像搜索引擎爬虫这类东西）只想要内容。</p>
<p>还有些人无福消受花生上的巧克力和糖果层（例如糖尿病患者）。和他们类似，移动设备或老浏览器用户可能无法看到你漂亮的设计，或者与你流畅的AJAX驱动的界面交互。</p>
<p>确保你的标记能够将所包裹的内容的细节最大限度地传达出来，这对于给这些用户提供基本体验至关重要。</p>
<p>&nbsp;</p>
<h4>巧克力外衣</h4>
<p>接下来，你可以将内容小心地浸入芳香美味的CSS暖浴中了。不过在你跳进糖果硬壳之前，还有些额外的考虑。</p>
<p>有的人爱吃巧克力裹着的花生。这些人就像中级用户，他们的浏览器有比较好的CSS支持，但可能没有很好的JavaScript支持。或者，可能在他
们工作的公司里，IT安全人员对JavaScript极其病态性地恐惧。对他们来说，JavaScript就可能完全被禁用了。</p>
<p>无论是倾向于爱吃<a href="http://en.wikipedia.org/wiki/Chocolate-coated_peanut">巧克力花生</a>（译注：一种直接用巧克力覆盖的花生，没有外层硬壳，类似于有内容和CSS但没有JavaScript支持的网站）还是被限制只能吃<a href="http://en.wikipedia.org/wiki/Chocolate-coated_peanut">巧克力花生</a>，这些人都应该得到满足。这里有几种渐进增强的方式可以将样式应用于内容，这将是本系列第二篇文章的话题。</p>
<p>&nbsp;</p>
<h4>糖果硬壳</h4>
<p>最后，你可以将JavaScript添加到内容和样式的混合体中了。JavaScript提供了富交互的可能性，同时具有操作内容层和展现层并与其交互的能力，这实际上使得JavaScript成为了把网站带入&ldquo;体验&rdquo;高度的一味配料。</p>
<p>我不确定糖果硬壳到底是怎样添加到M&amp;M花生巧克力上的（我猜是另一种什么浸蘸过程吧），但是，你脑中想着渐进增强的话，在你的网站上加入
基于JavaScript的功能和交互就轻而易举了。另外，就如M&amp;M花生巧克力有各种各样颜色一样，依据所运行的浏览器和设备的能
力，JavaScript的体验也可以各不相同。</p>
<p>正如你可能知道的那样，这种类型的开发叫做无侵入式（Unobtrusive）JavaScript. 我将在本系列的第三篇和最后一篇文章中讲述这些技巧和实践。</p>
<p>&nbsp;</p>
<h3>都放在一起</h3>
<p>一旦理解了渐进增强的理念并开始在实践中使用，那么用渐进增强进行开发就非常简单了。也许比做糖果还简单。本系列接下来的两篇文章将帮助你使用CSS和JavaScript来磨练你的渐进增强技巧，并向你展示怎样把哲学转换成代码。</p>
<p>&nbsp;</p>
<p>~~~~~~</p>
<h3>译注：</h3>
<ol>
<li>Graceful Degradation有译为预留退路、平稳退化的，但我觉得这两个翻译没有表达原意，不如直接翻译成优雅降级的好。</li>
<li>Unobtrusive有译为不唐突的、分离的、低调的，在Web开发领域，我觉得翻译成&ldquo;无侵入的&rdquo;最能表达原意。</li>
</ol>
<p>2008年10月8日 射雕&amp;安吉 译于杭州<br />
2008年10月9日 审校</p>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250687" style="color:red;">已有 <strong>8</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 12:48:34 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250687</link>
        <guid>http://www.javaeye.com/topic/250687</guid>
      </item>
          <item>
        <title>jquery、mootools、prototype侵入性分析</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bellstar.javaeye.com">bellstar</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251422" style="color:red;">http://www.javaeye.com/topic/251422</a>&nbsp;
          发表时间: 2008年10月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong><span style="text-decoration: underline;">prototype v1.5</span></strong><br />&gt;&gt;&gt; $Harbour.importJS("/javascripts/org/prototype/v1_5/prototype.js")<br />&gt;&gt;&gt; $Harbour.check()<br />" 相对上一个版本<strong><em>window</em></strong>［bodyload］，新增加的成员有26个包括:<br /> ObjectRange,Position,$F,Field,Form,$$,Selector,Insertion,Toggle,_nativeExtensions,$,<br /> Ajax,$R,$H,Hash,$w,$A,Enumerable,$continue,$break,Template,PeriodicalExecuter,Try,<br /> Abstract,Class,Prototype <br /> 相对上一个版本<em><strong>window</strong></em>［bodyload］，被修改的成员有0个包括: <br /> <br /> 相对上一个版本<em><strong>String</strong></em>［bodyload］，新增加的成员有19个包括: gsub,scan,truncate,strip,stripTags,stripScripts,extractScripts,evalScripts,escapeHTML,<br /> unescapeHTML,toQueryParams,toArray,succ,camelize,capitalize,underscore,dasherize,<br /> inspect,parseQuery <br /> <br /> 相对上一个版本<em><strong>Array</strong></em>［bodyload］，新增加的成员有36个包括: each,eachSlice,all,any,collect,detect,findAll,grep,include,inGroupsOf,inject,invoke,<br /> max,min,partition,pluck,reject,sortBy,toArray,zip,size,inspect,find,select,member,<br /> entries,_reverse,_each,clear,first,last,compact,flatten,without,uniq,clone <br /> <br /> 相对上一个版本<em><strong>Number</strong></em>［bodyload］，新增加的成员有3个包括: toColorPart,succ,times <br /> 相对上一个版本<em><strong>Function</strong></em>［bodyload］，新增加的成员有2个包括: bind,bindAsEventListener <br /> 相对上一个版本<em><strong>document</strong></em>［bodyload］，被修改的成员有2个包括: implementation,getElementsByClassName"<br /> <br /><span style="text-decoration: underline;"><strong>jquery v1.1.2 </strong></span><br />&gt;&gt;&gt; $Harbour.importJS("/javascripts/org/jquery/v1_1_2/jquery.js")<br />&gt;&gt;&gt; $Harbour.check()<br />"相对上一个版本<em><strong>window</strong></em>［bodyload］，新增加的成员有4个包括: <br />$events,undefined,$,jQuery <br />相对上一个版本<em><strong>window</strong></em>［bodyload］，被修改的成员有1个包括: onload <br /><br /><span style="text-decoration: underline;"><strong>mootools v1.2</strong></span><br />"相对上一个版本<em><strong>window</strong></em>［bodyload］，新增加的成员有66个包括: getLeft,getTop,getScrollWidth,getScrollHeight,getScrollLeft,getScrollTop,getWidth,<br />getHeight,getCoordinates,getPosition,getScrollSize,getScroll,getSize,cloneEvents,<br />fireEvent,removeEvents,addEvents,removeEvent,addEvent,eliminate,store,retrieve,<br />removeListener,addListener,getWindow,getDocument,$$,$,$family,uid,Request,Fx,Swiff,Cookie,JSON,Selectors,Elements,IFrame,Options,Events,<br />Chain,Class,$uid,$exec,Browser,$each,$A,$H,Hash,$type,$try,$time,$splat,$random,<br />$pick,$merge,$unlink,$extend,$lambda,$arguments,$empty,$defined,$clear,$chk,Native,<br />MooTools, <br />相对上一个版本<em><strong>String</strong></em>［bodyload］，新增加的成员有16个包括: $family,test,contains,trim,clean,camelCase,hyphenate,capitalize,escapeRegExp,toInt,<br />toFloat,hexToRgb,rgbToHex,stripScripts,substitute,toJSON <br />相对上一个版本<em><strong>Array</strong></em>［bodyload］，新增加的成员有17个包括: $family,each,clean,associate,link,contains,extend,getLast,getRandom,include,combine,<br />erase,empty,flatten,hexToRgb,rgbToHex,toJSON 相对上一个版本Date［bodyload］，<br />相对上一个版本<em><strong>Number</strong></em>［bodyload］，新增加的成员有24个包括: $family,limit,round,times,toFloat,toInt,each,abs,acos,asin,atan,atan2,ceil,cos,exp,<br />floor,log,max,min,pow,sin,sqrt,tan,toJSON <br />相对上一个版本<em><strong>Function</strong></em>［bodyload］，新增加的成员有10个包括: <br />$family,extend,create,pass,attempt,bind,bindWithEvent,delay,periodical,run <br />相对上一个版本<em><strong>Element</strong></em>［bodyload］，新增加的成员有95个包括: $family,getElement,getElements,injectBefore,grabBefore,injectAfter,grabAfter,injectBottom,<br />grabBottom,injectTop,grabTop,injectInside,grabInside,getDocument,getWindow,getElementById,<br />set,get,erase,match,inject,wraps,grab,appendText,adopt,dispose,clone,replaces,hasClass,<br />addClass,removeClass,toggleClass,getComputedStyle,empty,destroy,getSelected,toQueryString,<br />getProperty,getProperties,setProperty,setProperties,removeProperty,removeProperties,<br />getPrevious,getAllPrevious,getNext,getAllNext,getFirst,getLast,getParent,getParents,<br />getChildren,hasChild,addListener,removeListener,retrieve,store,eliminate,addEvent,<br />removeEvent,addEvents,removeEvents,fireEvent,cloneEvents,setOpacity,getOpacity,setStyle,<br />getStyle,setStyles,getStyles,scrollTo,getSize,getScrollSize,getScroll,getScrolls,<br />getOffsetParent,getOffsets,getPosition,getCoordinates,computePosition,position,getHeight,<br />getWidth,getScrollTop,getScrollLeft,getScrollHeight,getScrollWidth,getTop,getLeft,tween,<br />fade,highlight,morph,send,load <br />相对上一个版本<em><strong>document</strong></em>［bodyload］，新增加的成员有36个包括: <br />uid,head,html,window,$family,newElement,newTextNode,getDocument,getWindow,purge,getElement,getElements,<br />addListener,removeListener,retrieve,store,eliminate,addEvent,removeEvent,addEvents,removeEvents,<br />fireEvent,cloneEvents,getSize,getScroll,getScrollSize,getPosition,getCoordinates,getHeight,getWidth,<br />getScrollTop,getScrollLeft,getScrollHeight,getScrollWidth,getTop,getLeft "</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251422" style="color:red;">已有 <strong>3</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 10 Oct 2008 18:28:38 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251422</link>
        <guid>http://www.javaeye.com/topic/251422</guid>
      </item>
          <item>
        <title>一个多线程问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://by5739.javaeye.com">by5739</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251713" style="color:red;">http://www.javaeye.com/topic/251713</a>&nbsp;
          发表时间: 2008年10月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有如下代码:<br /><br /><pre name="code" class="java">public class NoVisibility {

	private static boolean ready;

	private static int num;

	private static class ReaderThread extends Thread {
		public void run() {
			while (!ready) {
				Thread.yield();
			}
			System.out.println(num);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new ReaderThread().start();
		num = 24;
		ready = true;
	}

}
</pre><br />最后的结果可能是:NoVisibility可能会一直保持循环, 因为对于读线程来说, ready的值可能永远不可见. 甚至更奇怪的现象是, NoVisibility可能会打印0, 因为经过优化,可能机器底层会先执行ready=true<br /><br /><br />上面第二个结果好理解, 第一个我就不明白.为什么ready值可能永远不可见导致程序会一直保持循环?
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251713" style="color:red;">已有 <strong>1</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Oct 2008 23:41:02 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251713</link>
        <guid>http://www.javaeye.com/topic/251713</guid>
      </item>
          <item>
        <title>现在用grails来做项目是不是太激进</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://vansention.javaeye.com">范三山</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250349" style="color:red;">http://www.javaeye.com/topic/250349</a>&nbsp;
          发表时间: 2008年10月08日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          现在要做一个互联网的项目，不是很大。人员大概就是两个java程序员，美工另算。我一直以为，用java来做中小型的互联网项目不是一个明智的选择。这个项目如果我们按照以往的方法不外乎是struts2+spring+hibernate，我觉得效率不是很高。<br />&nbsp;&nbsp;&nbsp; 我前一段时间自己弄过一下grails，写了一个blog程序，感觉非常棒。我想这个项目用grails十分的不错，因为时间比较紧，用grails来做会非常的快。但是我现在有一些担心<br />&nbsp;&nbsp;&nbsp; 1.grails的性能问题，不过我不太相信瓶颈会出现在程序端，怎么说也是数据库先有瓶颈。<br />&nbsp;&nbsp;&nbsp; 2.将来的维护问题，如果我们不在了维护的人还得学grails。<br />&nbsp;&nbsp;&nbsp; 3.ide不怎么好用，几乎是完全没有作用。我写grails程序一般用netbeans，不知道那位老兄会不会不习惯。IntelliJ IDEA是不会考虑的，实在没有兴趣去搞注册码。<br />&nbsp;&nbsp;&nbsp; 虽然很看好grails，但是还是会有些担心，不知道大家怎么看的。
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250349" style="color:red;">已有 <strong>46</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 08 Oct 2008 15:47:12 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250349</link>
        <guid>http://www.javaeye.com/topic/250349</guid>
      </item>
          <item>
        <title>保险公司VS外企软件</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hl8189.javaeye.com">hl8189</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251690" style="color:red;">http://www.javaeye.com/topic/251690</a>&nbsp;
          发表时间: 2008年10月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <img src="/images/smiles/icon_idea.gif"/>[color=red][/color]我是05年二流本科毕业的，在郑州工作一年后，来到了北京，在A公司从事财产险方面的软件开发，工作了两年，一个偶然的机会，有一家外企(B公司)给我打来电话，经过免试然后录用了我，职位是高级工程师，薪水是我在A公司薪水的1.46倍。目前在B公司已经工作近三个月了。但是前段时间收到A公司的甲方C公司（05年刚起步的保险公司）offer，职位是 信息技术部业务经理，薪水是我所在A公司的1.18倍。但是和B公司 <br />相比差了大约1.7k（税前），在C公司虽然是信息技术部经理，但基本上手下没有兵，最多也是监督和管理A公司为外包服务。 <br />B公司和C公司背景介绍： B公司是个跨国企业，从事保险行业软件开发，全世界中前50强的保险公司中有2/3的使用的是他的软件。 <br />C 公司是个国内的小型保险公司（股份有限公司），2005年开始营业，目前在财产险中处于中下等，公司目前处于发展阶段。 <br />B公司的优势： <br />1.可以学习到英语， <br />2.同时也有外企的工作经验， <br />3.可以进一步学习寿险的业务流程 <br />4.进一步了解国外保险行业的信息。 <br />5.薪水较高。 <br />C公司的优势： <br />1.系统比较熟悉，不需要做底层的编码 <br />2.可以进一步学习财产险的相关知识，而且了解保险公司整体的it部门的运营机制。 <br />3.职位较高，对于以后跳槽或多或少有些帮助。 <br />4.工作较为轻松，一般能够按时下班，有利于自学（目前我正准备打算考MBA）. <br />5.人际关系较好，工作开展可能比较顺利。 <br />B公司的缺点： <br />1.工作压力较大，加班时间较多。 <br />2.使用的是小语种，将来如果以技术身份跳槽比较麻烦（不知道如果我将来拿到MBA学位后，能否进入外企的管理层？） <br />C公司的缺点 <br />1.薪水较低。 <br />2.更多的侧重于业务和管理，而技术方面得不到深入的研究，除非自己专研。 <br /><br />请问在这两个公司中我应该如何选择？
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251690" style="color:red;">已有 <strong>2</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Oct 2008 21:46:59 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251690</link>
        <guid>http://www.javaeye.com/topic/251690</guid>
      </item>
          <item>
        <title>请教网易面试</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://love-ai87.javaeye.com">love_ai87</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/251618" style="color:red;">http://www.javaeye.com/topic/251618</a>&nbsp;
          发表时间: 2008年10月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前几天收到了网易校园招聘的面试通知，申请的是杭州研究院的Java研发类职位，想请教下第一次面试主要都弄些什么啊，是群面，还是单面的，涉及到具体的技术问题吗？？谢谢
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/251618" style="color:red;">已有 <strong>3</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Oct 2008 15:54:58 +0800</pubDate>
        <link>http://www.javaeye.com/topic/251618</link>
        <guid>http://www.javaeye.com/topic/251618</guid>
      </item>
          <item>
        <title>Hibernate缓存机制</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yuanyao.javaeye.com">yuanyao</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/249465" style="color:red;">http://www.javaeye.com/topic/249465</a>&nbsp;
          发表时间: 2008年10月06日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: red">缓存是位于应用程序与物理数据源之间，用于临时存放复制数据的内存区域，目的是为了减少应用程序对物理数据源访问的次数，从而提高应用程序的运行性能.<br />&nbsp; Hibernate在查询数据时，首先到缓存中去查找，如果找到就直接使用，找不到的时候就会从物理数据源中检索，所以，把频繁使用的数据加载到缓存区后，就可以大大减少应用程序对物理数据源的访问，使得程序的运行性能明显的提升.</span><br />&nbsp; <br /> <span style="color: red"> Hibernate缓存分类：</span><br /> <br /> Session缓存，一级缓存.<br /><br /> SessionFactory的缓存分为内置缓存和外置缓存.内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定义SQL语句等),对于应用程序来说,它是只读的.外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备.<br /><br /> <span style="color: red"> Hibernate的缓存范围</span><br /><br /> Hibernate的一级缓存和二级缓存都位于均位于持久层,且均用于存放数据库数据的副本,最大的区别就是缓存的范围各不一样.<br /> <br /> 缓存的范围分为3类:<br /><br /> 1.事务范围<br />&nbsp;&nbsp; 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围.<br /> 2.应用范围<br />&nbsp;&nbsp; 应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围.<br /> 3.集群范围<br />&nbsp;&nbsp; 在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.<br /><br /><span style="color: red">&nbsp; Hibernate的缓存管理</span><br /><br /> <span style="color: blue"> 一级缓存的管理:</span><br /><br />&nbsp; <span style="color: red">evit(Object obj)</span>&nbsp; 将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为脱管状态,从而成为游离对象.<br />&nbsp; <span style="color: red">clear()</span>&nbsp; 将一级缓存中的所有持久化对象清除,释放其占用的内存资源<br />&nbsp; <span style="color: red">contains(Object obj) </span> 判断指定的对象是否存在于一级缓存中.<br />&nbsp; <span style="color: red"> flush() </span> 刷新一级缓存区的内容,使之与数据库数据保持同步.<br /><br />&nbsp; <span style="color: blue">二级缓存的管理:</span><br />&nbsp;&nbsp; <br />&nbsp;&nbsp; <span style="color: red">evict(Class arg0, Serializable arg1)</span>&nbsp; 将某个类的指定ID的持久化对象从二级缓存中清除,释放对象所占用的资源.<br />&nbsp;&nbsp; <pre name="code" class="java">sessionFactory.evict(Customer.class, new Integer(1));</pre><br />&nbsp;&nbsp; <span style="color: red">evict(Class arg0)</span>&nbsp; 将指定类的所有持久化对象从二级缓存中清除,释放其占用的内存资源.<br />&nbsp;&nbsp; <pre name="code" class="java">sessionFactory.evict(Customer.class);</pre><br />&nbsp;&nbsp; <span style="color: red">evictCollection(String arg0)</span>&nbsp; 将指定类的所有持久化对象的指定集合从二级缓存中清除,释放其占用的内存资源.<br />&nbsp;&nbsp; <pre name="code" class="java">sessionFactory.evictCollection("Customer.orders");</pre><br /><br /><span style="color: red">Hibernate的二级缓存的配置</span><br /> <br />首先,不是所有的数据都适合放在二级缓存中,看一下,什么样的数据适合放在二级缓存中来?什么样的数据不适合放在二级缓存中来?<br />&nbsp; 下面这几种情况就<span style="color: red">不适合</span>加载到二级缓存中:<br />&nbsp; 1.经常被修改的数据<br />&nbsp; 2.绝对不允许出现并发访问的数据<br />&nbsp; 3.与其他应用共享的数据<br />&nbsp; 下面这己种情况<span style="color: red">合适</span>加载到二级缓存中:<br />&nbsp; 1.数据更新频率低<br />&nbsp; 2.允许偶尔出现并发问题的非重要数据<br />&nbsp; 3.不会被并发访问的数据<br />&nbsp; 4.常量数据<br />&nbsp; 5.不会被第三方修改的数据<br /><br />Hibernate的二级缓存功能是靠配置二级缓存插件来实现的,Hibernate为了集成这些插件,Hibernate提供了org.hibernate.cache.CacheProvider借口,它充当缓存插件与Hibernate之间的适配器 .<br /><br />常用的二级缓存插件<br />EHCache&nbsp; org.hibernate.cache.EhCacheProvider<br />OSCache&nbsp; org.hibernate.cache.OSCacheProvider<br />SwarmCahe&nbsp; org.hibernate.cache.SwarmCacheProvider<br />JBossCache&nbsp; org.hibernate.cache.TreeCacheProvider<br /><br />简单介绍一下EHCache的配置<br />hibernate.cfg.xml<br /> <pre name="code" class="xml"> &lt;hibernate-configuration>
    &lt;session-factory>
       &lt;!-- 设置二级缓存插件EHCache的Provider类-->
       &lt;property name="hibernate.cache.provider_class">
          org.hibernate.cache.EhCacheProvider
       &lt;/property>
       &lt;!-- 启动"查询缓存" -->
       &lt;property name="hibernate.cache.use_query_cache">
          true
       &lt;/property>
    &lt;/session-factory>
  &lt;/hibernate-configuration></pre><br /><br />ehcache.xml<br /><br /><pre name="code" class="xml">&lt;ehcache>
  &lt;!-- maxElementsInMemory为缓存对象的最大数目, eternal设置是否永远不过期,timeToIdleSeconds对象处于空闲状态的最多秒数,timeToLiveSeconds对象处于缓存状态的最多秒数 -->
  &lt;diskStore path="java.io.tmpdir"/>
    &lt;defaultCache maxElementsInMemory="10000" eternal="false"  timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/>
&lt;/ehcache>
</pre><br /><br />****.hbm.xml<br /><br /><pre name="code" class="xml">&lt;?xml version="1.0" encoding='UTF-8'?>
&lt;!DOCTYPE hibernate-mapping PUBLIC
                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

&lt;hibernate-mapping>
     
   &lt;class>
       &lt;!-- 设置该持久化类的二级缓存并发访问策略 read-only read-write nonstrict-read-write transactional-->
       &lt;cache usage="read-write"/>    
   &lt;/class>

&lt;/hibernate-mapping>
</pre><br /><br />最近用上了,看看了,有什么不妥的地方,多谢指出.
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/249465" style="color:red;">已有 <strong>3</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 06 Oct 2008 16:29:32 +0800</pubDate>
        <link>http://www.javaeye.com/topic/249465</link>
        <guid>http://www.javaeye.com/topic/249465</guid>
      </item>
          <item>
        <title>工作难觅</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://glamey.javaeye.com">glamey</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/250611" style="color:red;">http://www.javaeye.com/topic/250611</a>&nbsp;
          发表时间: 2008年10月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          不知道怎么了，近段时间北京的工作好难找的，国庆节到现在才有两个面试，还都是在南三环那边，好远的。到现在还没回音呢。<br /><br />&nbsp;&nbsp; 只能在屋里边看书，自己写写程序。<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; 期待中。。。。 <br /><br /><img src="/images/smiles/icon_idea.gif"/>
          <br/><br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/250611" style="color:red;">已有 <strong>63</strong> 人发表回复，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 09 Oct 2008 10:25:51 +0800</pubDate>
        <link>http://www.javaeye.com/topic/250611</link>
        <guid>http://www.javaeye.com/topic/250611</guid>
      </item>
          <item>
        <title>鼓足勇气再一次晒下简历……请Javaeye的大牛们给点意见……</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cmzy.javaeye.com">cmzy</a>&nbsp;
                    