﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-一农工作室</title><link>http://www.blogjava.net/ynstudio/</link><description>南京雨桥科技 承接外包 JavaEE GIS GPRS GPS http://www.ynstudio.com </description><language>zh-cn</language><lastBuildDate>Mon, 13 Oct 2008 23:29:42 GMT</lastBuildDate><pubDate>Mon, 13 Oct 2008 23:29:42 GMT</pubDate><ttl>60</ttl><item><title>这种JavaEE培训是否有价值 </title><link>http://www.blogjava.net/ynstudio/archive/2008/06/21/209625.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Fri, 20 Jun 2008 16:14:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2008/06/21/209625.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/209625.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2008/06/21/209625.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/209625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/209625.html</trackback:ping><description><![CDATA[
		<u>
				<b>最新的宣传文稿 <a href="http://www.ynstudio.com/train/ad2.html">http://www.ynstudio.com/train/ad2.html</a></b>
		</u>
		<br />
		<br />我们现在准备搞培训。本文主要是为了征求意见，如果认为不可行不妨直言。有建议更欢迎。 <br /><br />首先说一下大致的模式：培训+陪护式咨询+实际项目+相关资料，费用：600元/月，可月付（推广期间5折）。 （远程教学的模式也在筹划中。。。。。）<br /><br />再说一下这个想法的产生。在我工作之初，以及这么多年看到我身边的工作不久的同事，特别是有一定学习能力的同事，其实需要的并不是青鸟之类的培训学校，所谓的不需要是两个方面，一个是费用上，1，2万，太高，另外一个是其实我们只需要入门，只要能领进门就OK了。剩余的在工作中，网上，同事之间很多都可以掌握，特别是不少内容是随用随学。如果是很专业的培训，也是打算在学习并实践一定时间后再进行选择。 <br /><br />具体的方式：培训是指听课，我们准备了javaEE基础，struts2，spring，hibernate的课堂培训，陪护式咨询是指，随时可以来咨询任何问题，实际项目，是指参与我们一个TMS（运输管理系统）和一个CMS（内容管理系统）的维护，和企业应用套件（EAS）的开发，当前重点是财务软件模块。相关资料是指，我们收集的视频，购置的书籍等等。 <br /><br />设定的目标：接受培训的人员可以在自己的简历上写上：有实际的采用类似appfuse2的方式使用 struts2，spring，hibernate，acegi，ajax的项目经验，并有较为系统的学习，有实际的 svn，trac，tomcat，weblogic，websphere，mysql，sqlserver，oracle的使用经验。 <br />另外我们项目中涉及到的短信，openlayers，geoserver，gps，j2me，php，.net之类的东东也可以询问。 <br /><br />关于定价的说明：600元/月，可月付（推广期间5折），据我们所了解还是很便宜的，因为目前这块不是我们的饭碗，虽然是重点。月付的主要目的是为了减轻学员的负担，同时也是对学员的一种激励，付出的努力越多，省下的金钱越多，进而越早的挣薪水，当然也是对我们自己的激励，呵呵，我还是希望学员能多学几个月。 另外，虽然我们很努力，很诚实，但并不能因此而保证都满意，所以缴费上的政策是：按月缴费，按天算钱，一周之内退课全额退款。<br /><br />关于就业：目前我们面向的对象应该不太担心就业问题。说实在的我们现在除了朋友的公司，还没有和其他公司签订和推荐就业相关的合同，虽然这是我们的计划，因为我们今后也不想提高学员的费用。<br /><br />我的QQ是412792674 gmail邮箱的账号是ynstudio，欢迎培训界的朋友提供好的建议，欢迎用人单位提供意见和合作，欢迎有意向的初学者朋友联系。<br /><br />这是我们现在的宣传文稿，因为主要是对朋友和朋友的朋友。所以比较简略。<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">本页所列条款只对第一期学员有效。<br />培训方向：J2EE开发<br />培训内容：J2EE基础，struts2，hibernate，spring，acegi，来源于appfuse的J2EE框架<br />培训费用：600元/月，无其他费用。<br />收费方式：按月收费，一周内退学全额返还，中间退学按天计费。<br />招生要求：有java或C++基础，了解HTML。<br />培训地点：青岛路32号南大鼓楼科技园504（南京大学西侧）<br />培训方式：<br />        授课+实际项目+参考资料(远程模式筹划中，尚未开始)<br />关于授课：新学员达到5名就开班，J2EE基础连续一周课程，struts2，hibernate，spring，acegi，课程安排进度较快，但循环授课，以照顾有基础的学员可在较短时间完成所有课程，而没有相关基础的学员可反复听课，加速学习。学员可根据自己的情况和课程安排自由选择听课。<br />实际项目：参与物流管理系统和网站管理系统的维护以了解常见功能的实现方式，参与企业管理套件的开发，以了解如何开展一个新项目。（根据项目的进度情况，不同时期进来的学员参与项目会有变化）。参与方式为由各个项目的开发人员带领进行项目的开发。<br />参考资料：我们购置的书籍，收集的视频<br />时间安排：一般的班授课放在晚上，白天时间主要为跟随开发人员进行实际的项目开发。根据班级情况可灵活调整。<br />联系方式：手机：13851507737，QQ：412792674。<br />其他：长期招生，随到随学。本次开课时间，7月1号。<br /><br />注1：<br />J2EE框架，从 2006年开始基于appfuse ，根据项目需求，应用struts, spring, hibernate, acegi构建的J2EE开发框架，本框架先后应用于审计学院会计教学软件，某省国土厅土地备案系统，某省信访系统，某省环保厅危废系统，某物流企业管理系统，某移动平台物流管理系统，营销教学系统，某公司客户关系管理系统，某电力咨询网站等成功案例。现在本框架基于appfuse2构建。<br />注2：<br />招生要求，对于HTML，如果没有该基础请先自学。</span></div><br /><img src ="http://www.blogjava.net/ynstudio/aggbug/209625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2008-06-21 00:14 <a href="http://www.blogjava.net/ynstudio/archive/2008/06/21/209625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat reload几次后OutOfMemoryError: PermGen space的解决方法</title><link>http://www.blogjava.net/ynstudio/archive/2008/04/11/192296.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Fri, 11 Apr 2008 15:45:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2008/04/11/192296.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/192296.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2008/04/11/192296.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/192296.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/192296.html</trackback:ping><description><![CDATA[
		<strong>永久空间内存不足 java.lang.OutOfMemoryError: PermGen space，相比不少使用spring，hibernate等一堆jar包的人都遇到过这个问题，在tomcat reload一个Context多次后，tomcat就挂掉了。<br /></strong>
		<a title="http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html" onclick="return false;" href="http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html" tracwysiwyg-link="http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html">http://www.wujianrong.com/archives/2006/12/javalangoutofmemoryerror_permg.html</a>
		<br />PermGen space这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域，它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理，所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。<br />我在做<a href="/ynstudio/archive/2008/04/11/192205.html" target="_blank">TMS的发布工具</a>的时候，就遇到了问题，这个工具的目的是把一个相同的系统，在tomcat下自动的发布多份，但当卸载，重新发布多次后， tomcat就挂了，整个电脑如同死机一般。后来使用文章里的set JAVA_OPTS=-server -Xms800m -Xmx800m -XX:PermSize=64M-XX:MaxNewSize=256m-XX:MaxPermSize=128m -Djava.awt.headless=true 解决了问题，不过在2G的电脑上，我是把-XX:MaxPermSize=128m 调到了-XX:MaxPermSize=256m。另外我还尝试了把所有的lib都放到tomcat的lib下，一些lib就不能在本项目中再出现了。 <br />现在看，还是spring，hibernate之类的产生的类导致PermGen space空间不足造成的这些问题。<br /><a title="http://www.javaeye.com/topic/80620?page=1" onclick="return false;" href="http://www.javaeye.com/topic/80620?page=1" tracwysiwyg-link="http://www.javaeye.com/topic/80620?page=1">http://www.javaeye.com/topic/80620?page=1</a> 这个帖子里讨论了这个问题，有人做了些有益的分析可以看看。<br />我又继续在我的笔记本上做了测试T42,1G内存。tomcat版本6.0.14。<br />set JAVA_OPTS=-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true<br />这个配置反复发布是可以的，另外又一次测试了将项目下的jar包放到tomcat的lib下的对比。重新安装一个lib下为空的程序是10秒，否则是30秒。<img src ="http://www.blogjava.net/ynstudio/aggbug/192296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2008-04-11 23:45 <a href="http://www.blogjava.net/ynstudio/archive/2008/04/11/192296.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习probe的一点总结和应用</title><link>http://www.blogjava.net/ynstudio/archive/2008/04/11/192205.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Fri, 11 Apr 2008 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2008/04/11/192205.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/192205.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2008/04/11/192205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/192205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/192205.html</trackback:ping><description><![CDATA[
		<div class="wikipage searchable" xml:space="preserve">
				<p>
						<strong>大家在看文章之前先帮我看个问题(已解决 <a href="/ynstudio/archive/2008/04/11/192296.html" target="_blank">详细</a>)：<br />reload几次之后tomcat就挂了，我说的挂了，是指java进程占了CPU的几乎全部，整个电脑像死机一样，狂慢。 <br />一年半前的一个项目也是使用的struts，hibernate，spring，没有这个现象，记不起是从什么时候开始的了。 <br />以前也就忍了，但现在给客户做了一个tomcat的管理工具（因为需要和项目中的一些内容结合在一起所以单独做的），发布几次tomcat就挂了，导致这个工具意义变的不大了。 <br /><br /><br />对tomcat进行管理</strong>
						<br />    研究了一下probe，了解到了一些基本的知识，现在准备，自己做tomcat的管理了。我是说这个项目中需要的对tomcat的那些管理功能，并不是完整的管理。<br />    tomcat里对容器资源是层层管理的，Servlet由Wrapper管理，Wrapper之上是Context（对应一个application， server.xml里的一个Context配置），再上是Host，再上是Engine。到了Host使用findChildren可以获取所有的 Context。Wrapper,Context,Host,Engine，都是继承Container的接口，tomcat里的实现类 (StandardXXX)，又都是继承抽象类ContainerBase的，而ContainerBase又实现了Container, Lifecycle, Pipeline, MBeanRegistration, Serializable这些接口，所以当你获取到这些容器类的实例后可以根据你的需要将之转换为上述这些类型，进而获取其他的相关信息和执行特定的操作。具体情况可以参考 <br /><a class="ext-link" href="http://zhangjunhd.blog.51cto.com/113473/19865"><span class="icon">http://zhangjunhd.blog.51cto.com/113473/19865</span></a><br /><a class="ext-link" href="http://tomcat.apache.org/tomcat-5.5-doc/architecture/index.html"><span class="icon">http://tomcat.apache.org/tomcat-5.5-doc/architecture/index.html</span></a><br /><a class="ext-link" href="http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/index.html"><span class="icon">http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/index.html</span></a><br /><br />    要获取这些容器实例，一个方法是获取到Wrapper，然后进而获取其上级容器。就现在我了解到的情况，将一个servlet实现 org.apache.catalina.ContainerServlet接口就可以获取到一个 org.apache.catalina.Wrapper对象了，其他的方法我还不知道，我想应该存在一些更直接的获取Host对象之类的方法，抽时间看看tomcat本身的管理功能的代码。<br />    为了利用起原来的框架，并且纳入对tomcat信息的管理，我现在分别做了两个处理： <br /></p>
				<ol>
						<li>给Action注入Wrapper对象。<br />我现在的策略是写一个TomcatManagerServlet实现ContainerServlet，获取Wrapper，然后将之保存到request的attribute里，然后forward到当前管理系统框架下的相应的action里。<br />具体的方法是：在web.xml里配置这个servelt，并且指明所有的*.d会到这个servlet里来，然后到了这个servlet里后保存 Wrapper，然后forward到request.getRequestURI()+"o"。这样原来的页面里只要把链接地址从xxx.do改为 xxx.d就可以了。本来以为这个方法满好的，不过如果不是.do的请求就玩不起来了。现在觉着应该是在原有的链接之前加上一个额外路径更合适些，比如原来是/xxx/yyy.do，现在写成/tomcatManager/xxx/yyy.do，然后在TomcatManagerServlet里去除路径中的/tomcatManager再进行forward。这样下面的jsonrpc的servlet也不用修改了，但jsonrpc的前台要修改。终极一点是写一个servlet处理所有的请求，如果路径中含有/tomcatManager或者参数中含有tomcatManager，就给request里添加Wrapper对象。 
</li>
						<li>给jsonrpc调用的对象注入Wrapper。<br />上面这个方法其实我还没真正用，因为实际开发的时候我是使用ajax来操作的。方法类似，首先还是要把jsonrpc的servlet实现ContainerServlet接口，获取Wrapper，存入request的 attribute。如果被调用的方法定义了request参数，那么就可以从中获取Wrapper对象了。但这样比较繁琐，我写了一个 WebServerManager（今后会抽象为接口），定义了public void setWrapper(Wrapper wrapper)方法，然后写了一个jsonrpc的callback，并注册给jsonrpc，在callback里将Wrapper注入给 WebServerManager。这样WebServerManager就更通用和简洁一些了。<br /> <br /><strong>上面只是说了tomcat的Container的基本内容，以及如何将获取Wrapper进而获取整个Container的方法。另外和我们自己的基础代码比较相关，所以你若要具体了解如何使用这些 Container对tomcat进行操作可以去查看probe的 org.jstripe.tomcat.probe.Tomcat55ContainerAdaptor及其父类和 org.jstripe.tomcat.probe.tools.ApplicationUtils，我觉着这两个类比较基础。理解了这两个类，就可以方便的进一步了解了。</strong></li>
				</ol>
		</div>
<img src ="http://www.blogjava.net/ynstudio/aggbug/192205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2008-04-11 15:32 <a href="http://www.blogjava.net/ynstudio/archive/2008/04/11/192205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装 MapGuide Open Source 2.0（Java版本）笔记</title><link>http://www.blogjava.net/ynstudio/archive/2008/04/03/190713.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Thu, 03 Apr 2008 14:01:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2008/04/03/190713.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/190713.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2008/04/03/190713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/190713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/190713.html</trackback:ping><description><![CDATA[window s 操作系统平台下，安装MapGuide Open Source分如下几步：<br /><br />1. 下载 MapGuide Server 和 MapGuide Web Server Extensions. 到下载页面下载并安装 MgServerSetup-2.0.x.exe 和 MgWebServerExtensionsSetup-2.0.x.exe （<a href="https://mapguide.osgeo.org/download/releases/2.0.0">https://mapguide.osgeo.org/download/releases/2.0.0</a> ）<br /><br />2. 下载 java viewersample-2.0.zip. 解压到 C:\Program Files\MapGuideOpenSource2.0\WebServerExtensions\www.<br /><br />    注意，解压后，www文件夹下，要有个名叫javav iewersample 的文件夹。改文件夹下，有个readme.Txt，请按上面的说明，进行配置。<br /><br />    注意： 原来是 JkMount /mapguide2008/javaviewersample/* worker1<br /><br />    改成 ，JkMount /mapguide/javaviewersample/* worker1<br /><br />3. 下载示例数据<br /><br />到下载页面，下载 Sheboygan.mgp （注意，下载后，后缀可能是zip，将其改成mgp） 拷贝该文件到 C:\ProgramFiles\MapGuideOpenSource2.0\Server\Packages. 目录下。<br /><br />4. 打开一个浏览器，输入 <a href="http://localhost:8008/mapguide/mapadmin/login.php">http://localhost:8008/mapguide/mapadmin/login.php</a>  .使用站点管理程序 ，装载示例数据，登陆用户名是 "Administrator" ，密码是 "admin". 管理页面出来后，在左侧的导航条，选择 "Load Packages" . 然后选中靠近 Sheboygan.Mgp 的单选按钮，点击 "Load Package".<br /><br />5. 启动示例程序<br /><br />在浏览器中输入 <a href="http://localhost:8008/mapguide/javaviewersample/ajaxtiledviewersample.jsp">http://localhost:8008/mapguide/javaviewersample/ajaxtiledviewersample.jsp</a> , 将会看到运行效果，到此， MapGuide Open Source 就被运行起来了。<br /><br />注：默认的方式是apache+tomcat通过jk的方式配合，其实是可以直接访问tomcat的8080端口。主要需要了解 C:\Program Files\MapGuideOpenSource2.0\WebServerExtensions?\www\WEB-INF\lib下的MapGuideApi.jar。然后看看javaviewersample下的示例程序。<br /><a href="http://www.ynstudio.com">http://www.ynstudio.com</a>  <a href="http://ynstudio.blogjava.net/">http://ynstudio.blogjava.net/</a><br />安装文档原文（PHP的）：<br /><a href="http://mapguide.osgeo.org/sites/mapguide.osgeo.org/files/GettingStarted.pdf">http://mapguide.osgeo.org/sites/mapguide.osgeo.org/files/GettingStarted.pdf</a><br /><br /><img src ="http://www.blogjava.net/ynstudio/aggbug/190713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2008-04-03 22:01 <a href="http://www.blogjava.net/ynstudio/archive/2008/04/03/190713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我们做的数据库管理和代码生成</title><link>http://www.blogjava.net/ynstudio/archive/2008/03/11/185508.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Tue, 11 Mar 2008 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2008/03/11/185508.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/185508.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2008/03/11/185508.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/185508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/185508.html</trackback:ping><description><![CDATA[
		<div class="wikipage searchable" xml:space="preserve">
				<p>
						<b>数据库管理和代码生成<a href="http://www.ynstudio.com">http://www.ynstudio.com</a><br /></b>我知道还有不少人也在做类似的，把我们的总结一下，给大家也提供一种参考的思路。<br />系统本身不依赖数据库，就是一个普通的j2ee的web程序。下载后按照一般的方式安装到某个j2ee的应用服务器下。<br />首先编辑dbadmin2/config/dbadmin2.properties文件，形式如下 </p>
				<pre style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 0.25em; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 0.25em; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0.25em; MARGIN: 1em 1.75em; OVERFLOW: auto; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 0.25em; BORDER-BOTTOM: #d7d7d7 1px solid">#项目列表
projects=tms,cms3,market
#tms这个项目的相关配置
tms.databaseImplClassName=com.ynstudio.database.mysql.DatabaseMySql
tms.driver=com.mysql.jdbc.Driver
tms.url=jdbc:mysql://localhost/tms?useUnicode=true&amp;characterEncoding=GBK
tms.user=root
tms.password=mysql
#项目的说明性名称
tms.projectName=\u7269\u6d41\u7ba1\u7406\u7cfb\u7edf
tms.tableSchema=tms
#生成代码的页面，这里提供了一个通用的页面，你可以开发自己的页面。
tms.codeGenUrl=projects/common_config.jsp

cms3.databaseImplClassName=com.ynstudio.database.mysql.DatabaseMySql
cms3.driver=com.mysql.jdbc.Driver
cms3.url=jdbc:mysql://localhost/cms3?useUnicode=true&amp;characterEncoding=GBK
cms3.user=root
cms3.password=mysql
cms3.projectName=\u5185\u5bb9\u7ba1\u7406\u7cfb\u7edf
cms3.tableSchema=cms3
cms3.codeGenUrl=projects/common_config.jsp

market.databaseImplClassName=com.ynstudio.database.mysql.DatabaseMySql
market.driver=com.mysql.jdbc.Driver
market.url=jdbc:mysql://localhost/market?useUnicode=true&amp;characterEncoding=GBK
market.user=root
market.password=mysql
market.projectName=\u5e02\u573a\u8425\u9500
market.tableSchema=market
market.codeGenUrl=projects/common_config.jsp
</pre>
				<p>有了这个之后，你就可以运行程序了,在程序运行的时候还会在config下生成，针对每个项目各自的配置文件。<br />下面是一些程序运行的截图。开始页面<br /><a style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none" href="http://www.ynstudio.com/codegen//index.jpg"><img src="http://www.ynstudio.com/codegen/index.jpg" border="0" /></a><br />项目列表页面<br /><a style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none" href="http://www.ynstudio.com/codegen//projects.jpg"><img src="http://www.ynstudio.com/codegen/projects.jpg" border="0" /></a><br />数据库的表<br /><a style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none" href="http://www.ynstudio.com/codegen//tables.jpg"><img src="http://www.ynstudio.com/codegen/tables.jpg" border="0" /></a><br />编辑表结构<br /><a style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none" href="http://www.ynstudio.com/codegen//table_structure.jpg"><img src="http://www.ynstudio.com/codegen/table_structure.jpg" border="0" /></a><br />浏览表结构，设置代码生成的相关配置， <br />需要注意的是由于现在还不完善， <br />所以生成代码之前，即便你不做任何特定设置，也要点击保存设置的按钮。 <br /><a style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none" href="http://www.ynstudio.com/codegen//browse_table_structure.jpg"><img src="http://www.ynstudio.com/codegen/browse_table_structure.jpg" border="0" /></a><br />代码生成的其他配置和生成操作 <br /><a style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none" href="http://www.ynstudio.com/codegen//codegen.jpg"><img src="http://www.ynstudio.com/codegen/codegen.jpg" border="0" /></a><br />具体生成的内容，由于模版的不同而不同，一般的都是根据前面列出的模版(那些vm文件)，把生成的内容保存到后面指定的位置，生成代码后你把这些代码放到你的项目里，做相应的处理，这块具体的内容你要看开发手册了。当前这个截图生成的文件的路径是这个样子的： </p>
				<pre style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 0.25em; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 0.25em; BACKGROUND: #f7f7f7; PADDING-BOTTOM: 0.25em; MARGIN: 1em 1.75em; OVERFLOW: auto; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 0.25em; BORDER-BOTTOM: #d7d7d7 1px solid">│  config.xml
│
├─src
│  └─com
│      └─ynstudio
│          └─market
│              ├─model
│              │      GuestBook.java
│              │
│              └─webapp
│                  └─action
│                          GuestBookAction.java
│
└─web
    └─guest_book
            guest_book_edit_form.jsp
            guest_book_list.jsp
</pre>
				<p>生成的代码的运行效果如下，<br />因为是作为演示这个模版做的较为简单：<br /><a style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none" href="http://www.ynstudio.com/codegen//edit_form.jpg"><img src="http://www.ynstudio.com/codegen/edit_form.jpg" border="0" /></a><br /><a style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0px; BORDER-TOP: medium none; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: medium none; PADDING-TOP: 0px; BORDER-BOTTOM: medium none" href="http://www.ynstudio.com/codegen//list.jpg"><img src="http://www.ynstudio.com/codegen/list.jpg" border="0" /></a><br /></p>
		</div>
<img src ="http://www.blogjava.net/ynstudio/aggbug/185508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2008-03-11 22:50 <a href="http://www.blogjava.net/ynstudio/archive/2008/03/11/185508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse 2.0.1 初探2</title><link>http://www.blogjava.net/ynstudio/archive/2007/12/23/169879.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Sun, 23 Dec 2007 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2007/12/23/169879.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/169879.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2007/12/23/169879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/169879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/169879.html</trackback:ping><description><![CDATA[首先请参看<a href="/ynstudio/archive/2007/12/01/164508.html">http://www.blogjava.net/ynstudio/archive/2007/12/01/164508.html</a><br />把marven安装一下，最好再把appfuse2的一些依赖放在localRepository里，这些在上面的文章里都有介绍。<br />我刚刚又执行了一遍并把步骤记录了一下。<br /><br />&gt;mvn archetype:create <br />-DarchetypeGroupId=org.appfuse.archetypes <br />-DarchetypeArtifactId=appfuse-basic-struts <br />-DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.1 <br />-DgroupId=<a title="一农工作室" href="http://www.ynstudio.com" target="_blank">com.ynstudio.cms</a> -DartifactId=cms3<br />&gt;cd cms3 --修改pom.xml里的数据库配置<br />&gt;mvn appfuse:full-source --如果遇到类似[ERROR] 175002 : svn: Connection timed out: connect就再重试<br />&gt;mvn jetty:run-war --这时在target文件夹里会生成一个文件夹cms3-1.0-SNAPSHOT和一个cms3-1.0-SNAPSHOT.war，同时会在数据库里建立表结构，并插入一些数据。<br />这时就可以在浏览器里访问了。你也可以把war包在其他地方发布。<br />这时你可以看看在mvn appfuse:full-source 后生成的代码，可以看看mvn jetty:run-war 运行后得到的最终结果，从而了解appfuse2的作者是如何整合spring2.5+hibernate-annotations-3+struts2的。<br />最近项目有些忙，appfuse2在项目构建上的研究尚未进行完。待研究出一些结果后，会写个初探3。<br /><br />另外<br />执行mvn eclipse:eclipse，可以生成eclipse下的项目。导入到eclipse后会存在找不到包的问题，需要在eclipse中window-&gt; preference-&gt;java-&gt;build path-&gt;classpath variables中增加M2_REPO指向maven repository的目录。然后编译就可以通过了。<br /><a href="/ynstudio/archive/2007/12/01/164508.html">http://www.blogjava.net/ynstudio/</a><img src ="http://www.blogjava.net/ynstudio/aggbug/169879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2007-12-23 23:15 <a href="http://www.blogjava.net/ynstudio/archive/2007/12/23/169879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初探appfuse 2.0.1</title><link>http://www.blogjava.net/ynstudio/archive/2007/12/01/164508.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Sat, 01 Dec 2007 07:57:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2007/12/01/164508.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/164508.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2007/12/01/164508.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/164508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/164508.html</trackback:ping><description><![CDATA[
		<div class="wikipage searchable" xml:space="preserve">
				<p>首先下载安装marven，然后就可以使用marven来安装appfuse了。<br />我现在准备是基于struts2+spring+hibernate来构建项目。在命令提示符里进入某个文件夹，从<a class="ext-link" href="http://appfuse.org/display/APF/AppFuse+QuickStart"><span class="icon">AppFuse+QuickStart</span></a>拷贝相应的命令（我选的是basic方式，还没实验module方式）<br /></p>
				<p>mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.1 -DgroupId=com.mycompany.app -DartifactId=myproject </p>
				<p>并做相应的修改，我准备作为第一个实践的项目是CMS，因为是第三次彻底的变更底层架构，所以我命名为cms3，包根路径为com.ynstudio.cms。即为<br /></p>
				<p>mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.1 -DgroupId=com.ynstudio.cms -DartifactId=cms3 </p>
				<p>但如果直接这样的话，有很多依赖的jar文件都会从网络上下载，这个速度是让人难以忍受的，可以先把<a class="ext-link" href="https://appfuse.dev.java.net/files/documents/1397/77082/appfuse-dependencies-2.0.1.zip"><span class="icon">appfuse-dependencies-2.0.1.zip</span></a>下载下来，然后解压到某个文件夹下，然后修改$marven/conf/settings.xml里的相应配置，设置本地资源库。 </p>
				<pre class="wiki">  &lt;!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
  &lt;localRepository&gt;/path/to/local/repo&lt;/localRepository&gt;
  --&gt;
  &lt;localRepository&gt;E:/appfusedeps/repository&lt;/localRepository&gt;&lt;!-- 我电脑上的设置 --&gt;
</pre>
				<p>需要注意的上面的配置里说默认的资源库路径为~/.m2/repository，这是指用户的home目录，但如果这样设置在windows下，会产生一些问题，因为windows的用户目录在C:\Documents and Settings下，而这个目录有空格，所以最好直接指定另外的没有空格的英文路径。<br />执行上面的命令之后会创建如下的内容<br /></p>
				<pre class="wiki">    │  pom.xml
    │  README.txt
    │
    └─src
        ├─main
        │  ├─java
        │  │  └─com
        │  │      └─ynstudio
        │  │          └─cms
        │  │                  App.java
        │  │
        │  ├─resources
        │  │  │  applicationContext-resources.xml
        │  │  │  ApplicationResources.properties
        │  │  │  ApplicationResources_zh.properties
        │  │  │  ApplicationResources_zh_CN.properties
        │  │  │  ApplicationResources_zh_TW.properties
        │  │  │  default-data.xml
        │  │  │  ehcache.xml
        │  │  │  hibernate.cfg.xml
        │  │  │  jdbc.properties
        │  │  │  log4j.xml
        │  │  │  mail.properties
        │  │  │  sql-map-config.xml
        │  │  │  struts.xml
        │  │  │
        │  │  └─META-INF
        │  │          persistence.xml
        │  │
        │  └─webapp
        │      ├─common
        │      │      menu.jsp
        │      │
        │      └─WEB-INF
        │              applicationContext.xml
        │              menu-config.xml
        │              urlrewrite.xml
        │              web.xml
        │
        ├─site
        │      site.xml
        │
        └─test
            ├─java
            │  └─com
            │      └─ynstudio
            │          └─cms
            │                  AppTest.java
            │
            └─resources
                    config.xml
                    login.xml
                    sample-data.xml
                    web-tests.xml
</pre>
				<p>然后修改pom.xml里mysql的密码，如果你接着运行mvn jetty:run-war，会产生需要的一切，并发布到jetty中，你就可以在浏览器里查看运行效果了。[[BR]] 我运行 </p>
				<pre class="wiki">mvn appfuse:full-source
</pre>
				<p>则会创建数据库，生成相关的代码。代码文件夹结构如下 </p>
				<pre class="wiki">├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─ynstudio
│  │  │          └─cms
│  │  │              ├─dao
│  │  │              │  ├─hibernate
│  │  │              │  └─spring
│  │  │              ├─model
│  │  │              ├─service
│  │  │              │  └─impl
│  │  │              ├─util
│  │  │              └─webapp
│  │  │                  ├─action
│  │  │                  ├─filter
│  │  │                  ├─interceptor
│  │  │                  ├─listener
│  │  │                  ├─taglib
│  │  │                  └─util
│  │  ├─resources
│  │  │  ├─com
│  │  │  │  └─ynstudio
│  │  │  │      └─cms
│  │  │  │          ├─model
│  │  │  │          └─webapp
│  │  │  │              └─action
│  │  │  └─META-INF
│  │  └─webapp
│  │      ├─admin
│  │      ├─common
│  │      ├─decorators
│  │      ├─images
│  │      ├─scripts
│  │      │  ├─calendar
│  │      │  │  └─lang
│  │      │  └─dojo
│  │      ├─styles
│  │      │  ├─andreas01
│  │      │  │  └─images
│  │      │  ├─calendar-aqua
│  │      │  ├─puzzlewithstyle
│  │      │  │  └─images
│  │      │  └─simplicity
│  │      │      └─images
│  │      ├─template
│  │      │  ├─css_xhtml
│  │      │  └─xhtml
│  │      └─WEB-INF
│  │          └─pages
│  │              └─admin
│  ├─site
│  └─test
│      ├─java
│      │  └─com
│      │      └─ynstudio
│      │          └─cms
│      │              ├─dao
│      │              │  └─hibernate
│      │              ├─service
│      │              │  └─impl
│      │              ├─util
│      │              └─webapp
│      │                  ├─action
│      │                  ├─filter
│      │                  └─listener
│      └─resources
│          ├─com
│          │  └─ynstudio
│          │      └─cms
│          │          └─service
│          │              └─impl
│          └─META-INF
└─target
    ├─appfuse-data
    ├─appfuse-data-common
    ├─appfuse-hibernate
    ├─appfuse-root
    ├─appfuse-service
    ├─appfuse-struts
    ├─appfuse-web
    └─appfuse-web-common
</pre>
				<p>进一步的研究尚未进行，准备以此为依托来建立新的框架结构。因为我对appfuse尚未熟悉，计划的步骤是先在svn里随便建一个项目，然后待大致了解后再正式建立一个项目作为今后所有项目的基础架构。 <br />转载请标明来源，谢谢 <a href="http://www.ynstudio.com">http://www.ynstudio.com</a></p>
		</div>
<img src ="http://www.blogjava.net/ynstudio/aggbug/164508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2007-12-01 15:57 <a href="http://www.blogjava.net/ynstudio/archive/2007/12/01/164508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>qooxdoo 0.6rc1 发布了</title><link>http://www.blogjava.net/ynstudio/archive/2006/08/19/64558.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Sat, 19 Aug 2006 13:24:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2006/08/19/64558.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/64558.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2006/08/19/64558.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/64558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/64558.html</trackback:ping><description><![CDATA[    昨天刚从sourceforge的svn上下载了最新的代码，感受了一下0.6，也和qooxdoo的邮件列表上的其他人一样在想0.6什么时候发布，刚才上网一看0.6rc1发布了。不过就算不发布我也打算开始用了，因为很多先行者说0.6已经很稳定了。<br />    1、如果使用过先前的版本一定都知道，0.6最大的变化应该就是完全基于namspaces。<br />    2、对我来说一个非常希望拥有的是Table（这个Table类似于其他UI库的DataGrid），另外还新增了一个常用部件：日历（我以前使用的是dynarch的）。和ListView相比，Table不但有了X轴的滚动条，而且可以更方便的，直接对单元格进行编辑，还可以隔行使用不同颜色，可以调换列之间的位置，可以只选择几列显示。和以前的ListView相比进步不少，但和其他“专业”的Grid相比有些功能还比较弱，但对于我新项目的需求已经足够了。<br />    3、新增RPC模块，并且提供了PHP和Java的服务器端实现。我原来使用的json-rpc-java，抽时间要看看他的实现方法。我看了一下例子，也是基于JSON-RPC的。<br />    4、另外0.6的doc现在采用了更类似java的样子，用起来更方便了。内容也比以往更丰富。<br />    5、再就是体积的变化了<img height="20" src="http://www.blogjava.net/Emoticons/QQ/15.gif" width="20" border="0" />，原来700来K，现在900多K。所以我仍然是把它作为开发管理系统的UI库。做互联网应用还是采用其他小一些的库。<br /><br />我打算新的项目将基于0.6进行界面开发，下面贴几个截图，以飨读者。<br /><img id="ViewPicture1_GalleryImage" style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; WIDTH: 489px; BORDER-BOTTOM: black 2px solid; HEIGHT: 446px" alt="api" src="http://www.blogjava.net/images/blogjava_net/ynstudio/14271/r_api.PNG" /><br /><br /><img id="ViewPicture1_GalleryImage" style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; WIDTH: 451px; BORDER-BOTTOM: black 2px solid; HEIGHT: 480px" alt="table" src="http://www.blogjava.net/images/blogjava_net/ynstudio/14271/r_table.PNG" /><br /><br /><img id="ViewPicture1_GalleryImage" style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; WIDTH: 640px; BORDER-BOTTOM: black 2px solid; HEIGHT: 425px" alt="window" src="http://www.blogjava.net/images/blogjava_net/ynstudio/14271/r_window.PNG" /><br /><br /><img id="ViewPicture1_GalleryImage" style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; WIDTH: 640px; BORDER-BOTTOM: black 2px solid; HEIGHT: 425px" alt="window2" src="http://www.blogjava.net/images/blogjava_net/ynstudio/14271/r_window2.PNG" /><img src ="http://www.blogjava.net/ynstudio/aggbug/64558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2006-08-19 21:24 <a href="http://www.blogjava.net/ynstudio/archive/2006/08/19/64558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax框架，web ui 库 -- qooxdoo使用感想</title><link>http://www.blogjava.net/ynstudio/archive/2006/08/05/61944.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Sat, 05 Aug 2006 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2006/08/05/61944.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/61944.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2006/08/05/61944.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/61944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/61944.html</trackback:ping><description><![CDATA[    本来是计划让团队内的同事一起总结使用qooxdoo的使用经验和困难，然后写些关于使用qooxdoo的总结供大家参考，但因为项目的原因到现在也没有时间办这件事情，所以打算还是零零碎碎的写一点是一点，乱就乱了，今后再整理。另外最近发现其实国内还是有不少人关注和使用qooxdoo的，所以立马写下这个帖子抛砖引玉。<br /><br /><strong>1、qooxdoo基本信息</strong><br />    qooxdoo带有XHR的封装，但其主要的还是WEB UI，提供了类似桌面程序的窗口小部件。<br />   <a href="/ynstudio/archive/2006/07/23/59648.html">http://www.blogjava.net/ynstudio/archive/2006/07/23/59648.html</a><br />  从上面的链接可以看到我们开发的一个项目中的几个截图，也可以到其官方网看其demo。<br />  官方网站 <a href="http://qooxdoo.org/">http://qooxdoo.org/</a> ，在官方网站上可以看到其下载地址，有两个文件，一个是src一个是build，所谓build就是把所有的src里的js文件都合并到一个js文件里，排成一行，去除注释，从而缩小体积，但也有700多K。<br />   <a href="http://www.nabble.com/Javascript-f15545.html">http://www.nabble.com/Javascript-f15545.html</a> 是一个关于几个javascript应用的论坛，其中就有qooxdoo的，你可以从这里了解其动态，参与相关的讨论。<br /><strong>2、RPC</strong><br />    如果使用qooxdoo，而不使用XHR，那么页面就需要刷新，这个是麻烦的。我们本来是使用的DWR，现在使用的是经自己改造的JSON-RPC-JAVA。现在java里似乎主要就是这两个。其他语言的话，如.net，perl，php都有json-rpc的实现。使用了类似JSON-RPC-JAVA和dwr这样的技术，开发模式就类似一般的C/S开发了，当然困难还是有的。<br /><strong>3、我们使用qooxdoo遇到的一些困难</strong><br />      A、首先是界面的开发，虽然类似C/S的开发方式了，不再存在页面刷新带来的烦恼，思考问题更加直接，不需考虑参数传来传去，不需学习一堆的标签，特别是对于刚接触WEB开发的程序员，接受起来更加容易。但是界面都是使用代码来构建的，而javascript也没有很好的编辑工具。所以刚开始开发时还是满痛苦的。后来有了些改观，1、规范代码结构，界面代码，事件响应代码，公用函数，归类摆放；2、选择更好的编辑工具，如JSEclipse，aptana等；3、使用调试工具，我认为firefox的firebug是最好的；4、尽量把逻辑放在java里，降低界面javascript的复杂度。另外今后我们将推广QxBuilder的使用。<br />    B、layout的使用。对于我们这些开发人员，习惯使用table来进行布局，在qooxdoo里只有QxGridLayout最象，但不好使用。我们开发了一些辅助方法来降低其使用难度。<br />    C、没有类似HTML里的Form。使用qooxdoo加RPC其实不存在，HTML中的Form+submit的方式，但直接对fieldtext等进行操作，感觉不如form方便，所以我们开发了一个FormManager来进行辅助。<br />    D、中文资料少，或者说基本上没有，有的只是些转来转去的没用的文字。<br />    E、效率问题，起初为了方便开发，主页面和其他页面之间都是用QxNativeWindow的方式，即window.open，但由于IE的问题，以及qooxdoo 700k 的代码，导致每打开然后关闭一个新窗口，内存以6~10M的速度递增。这个问题的解决有两个方案，一个是不允许同时打开两个窗口，所有的页面都在一个iframe里切换，另外就是在主页面里使用QxWindow，但一个使用不方便，一个开发不方便。<br /><strong>4、排序的问题</strong><br />    这个是福星高照兄发现的，原文如下<br />qooxdoo默认用的是sort方法，这个方法的排序是按照字符集的顺序来的 <br />关于中文排序问题，可以修改QxCompare.js，把QxCompare.byString的方法改了，倒是很简单，改成return a.localeCompare(b); <br />localeCompare()使用本地特定的顺序来比较两个字符串，语法如下： <br />string.localeCompare(target) <br />参数target是要与string进行比较的字符串。 <br />如果string小于target，则localeCompare()返回小于0的数； <br />如果string大于target，返回大于0的数； <br />如果不愿意改QxCompare.byString,那么添加一个compare对象也成。<br /><br />本来我以为是我用的是utf-8导致排序按照utf-8里的汉字排序，但我测试发现，即便是纯的GBK页面，Array的sort方法也不是按照字母顺序进行排序的。这个福星高照兄也提到了。<br /><img src ="http://www.blogjava.net/ynstudio/aggbug/61944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2006-08-05 15:12 <a href="http://www.blogjava.net/ynstudio/archive/2006/08/05/61944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse+qooxdoo+JSON-RPC-JAVA</title><link>http://www.blogjava.net/ynstudio/archive/2006/07/23/59648.html</link><dc:creator>一农</dc:creator><author>一农</author><pubDate>Sun, 23 Jul 2006 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/ynstudio/archive/2006/07/23/59648.html</guid><wfw:comment>http://www.blogjava.net/ynstudio/comments/59648.html</wfw:comment><comments>http://www.blogjava.net/ynstudio/archive/2006/07/23/59648.html#Feedback</comments><slash:comments>58</slash:comments><wfw:commentRss>http://www.blogjava.net/ynstudio/comments/commentRss/59648.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ynstudio/services/trackbacks/59648.html</trackback:ping><description><![CDATA[    我在学习appfuse的时候感觉里面的内容还是有些多了，对于我们的项目需求和开发人员的工作经验都显得内容过多，所以我做了一些简化，同时也作了一些修改与扩展，其中最主要的是将DWR换为了JSON-RPC-JAVA，界面开发采用了qooxdoo。经过这些简化和扩展现在新同事对技术框架的学习速度非常快，除了qooxdoo外其他部分有一点hibernate基础的同事一天就可以掌握，这种效果我认为spring占据了最主要的功劳。<br /><br />  我现在开发的两个项目都是使用qooxdoo做界面开发，也曾经打算过使用dojo，但学习的过程发现qooxdoo由于和java swing的类似性，上手更快，解决难题的速度也更快，所以后来就确定下来使用qooxdoo来作为界面开发了。而且就默认的样式来讲，qooxdoo也比dojo漂亮多了。<br />  对于RPC，本来我是使用的DWR，但现在改用JSON-RPC-JAVA了，不同的是这个JSON-RPC-JAVA我做了较大的改动，因为原来的JSON-RPC-JAVA远不如DWR好用。但现在在当前项目中，基本没有学习的难度和使用的难度。<br />    今天没时间仔细写这篇文章了，先放在这里几个图片，给大家一个直观的了解，后面我会把我们对qooxdoo的使用心得，放在文章区。<br /><br /><strong>这是我给其他同事写的qooxdoo的ListView以及drag&amp;drop的演示。两个ListView之间可以相互拖动条目，可以拖动某些条目到垃圾箱，进行删除。右下角是log区。（这里使用的是firefox）</strong><br /><img alt="" src="http://www.blogjava.net/images/blogjava_net/ynstudio/13362/r_listview.JPG" /><br /><br /><strong>这是项目的主界面（使用的是IE）</strong><br /><img src="http://www.blogjava.net/images/blogjava_net/ynstudio/13362/r_layout.JPG" /><br /><strong>这是一个包含基本的CRUD操作的简单界面，其中权限是使用的Combox</strong><br /><img src="http://www.blogjava.net/images/blogjava_net/ynstudio/13362/r_form.JPG" /><img src ="http://www.blogjava.net/ynstudio/aggbug/59648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ynstudio/" target="_blank">一农</a> 2006-07-23 14:44 <a href="http://www.blogjava.net/ynstudio/archive/2006/07/23/59648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>