﻿<?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/rkind/category/4200.html</link><description>&lt;font size=5 align=right&gt;知人者智  自知者明
Fighting!!&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:19:12 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:19:12 GMT</pubDate><ttl>60</ttl><item><title>今天学习java的一点收获 </title><link>http://www.blogjava.net/rkind/archive/2005/10/27/17015.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 04:59:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/17015.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17015.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/17015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17015.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17015.html</trackback:ping><description><![CDATA[<P><STRONG><FONT size=4>1</FONT></STRONG></P>
<P>java中当前日期的获取方法</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">旧方法（已不常用）：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>int year = 0;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>int month = 0;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>int day = 0;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>java.util.Date now = new java.util.Date();</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>year = now.getYear() + 1900;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>month = now.getMonth() + 1;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>day = now.getDate();</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US></SPAN>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US></SPAN>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新方法：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-mm-dd”);</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>Calendar cal_today = Calendar.getInstance();</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>int m_day = cal_today.get(cal_today.DAY_OF_MONTH);</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>int m_month = cal_today.get(cal_today.MONTH) + 1;</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>int m_hour = cal_today.get(cal_today.HOUR_OF_DAY);</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>int m_minute = cal_today.get(cal_today.MINUTE);</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>String d = formatter.format(cal_today.getTime());</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></SPAN>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">我采用前一种方法实现了按日期生成文件夹.</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><FONT size=5>2</FONT></STRONG></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">jsp传给mysql当前系统时间的方法</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">insert into youDB(date) values(NOW())</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">不过这样只能获得当前日期</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><FONT size=4>3</FONT></STRONG>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">判断要建立的文件夹是否存在,如果不则新建立一个文件夹</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">int year,mm,dd;<BR>&nbsp;&nbsp;String month,day;<BR>&nbsp;&nbsp;Date d1=new Date();<BR>&nbsp;&nbsp;year=d1.getYear()+1900;<BR>&nbsp;&nbsp;mm=d1.getMonth()+1;<BR>&nbsp;&nbsp;if (mm&lt;10) month="0"+mm;<BR>&nbsp;&nbsp;else month=""+mm;<BR>&nbsp;&nbsp;dd=d1.getDate();<BR>&nbsp;&nbsp;if (dd&lt;10) day="0"+dd;<BR>&nbsp;&nbsp;else day=""+dd;<BR>&nbsp;&nbsp;String filepath="d:\\upload"+"<A href="file://%22+year+month+day+%22//"><FONT color=#223355>\\"+year+month+day+"\\</FONT></A>";<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(!new File(filepath).isDirectory())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new File(filepath).mkdirs();</P><img src ="http://www.blogjava.net/rkind/aggbug/17015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 12:59 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/17015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE初学者需要理解的问题 </title><link>http://www.blogjava.net/rkind/archive/2005/10/27/17016.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 04:59:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/17016.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17016.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/17016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17016.html</trackback:ping><description><![CDATA[<FONT size=2><FONT face=宋体><STRONG>一、J2EE提出的背景<BR></STRONG>1、&nbsp;&nbsp;&nbsp;&nbsp;企业级应用框架的需求<BR>在许多企业级应用中，例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块，这些模块如果每次再开发中都由开发人员来完成的话，将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。<BR>2、&nbsp;&nbsp;&nbsp;&nbsp;为了通用必须要提出规范，不然无法达到通用<BR>在上面的需求基础之上，许多公司都开发了自己的中间件，但其与用户的沟通都各有不同，从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准。<BR>注：中间件的解释&nbsp;中间件处在操作系统和更高一级应用程序之间。他充当的功能是：将应用程序运行环境与操作系统隔离，从而实现应用程序开发者不必为更多系统问题忧虑，而直接关注该应用程序在解决问题上的能力&nbsp;。我们后面说到的容器的概念就是中间件的一种。<BR><B>二、相关名词解释</B><BR>容器：充当中间件的角色<BR>WEB容器：给处于其中的应用程序组件（JSP，SERVLET）提供一个环境，使JSP,SERVLET直接更容器中的环境变量接口交互，不必关注其它系统问题。主要有WEB服务器来实现。例如：TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB&nbsp;APPLICATION&nbsp;标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。<BR>EJB容器：Enterprise&nbsp;java&nbsp;bean&nbsp;容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器，马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。<BR>WEB容器和EJB容器在原理上是大体相同的，更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节，直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制，直接由容器来完成。<BR>RMI/IIOP:远程方法调用/internet对象请求中介协议，他们主要用于通过远程调用服务。例如，远程有一台计算机上运行一个程序，它提供股票分析服务，我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。<BR>JNDI:JAVA命名目录服务。主要提供的功能是：提供一个目录系统，让其它各地的应用程序在其上面留下自己的索引，从而满足快速查找和定位分布式应用程序的功能。<BR>JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。<BR>JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是JAVA编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。<BR>JTA：JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。<BR>JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。<BR>EAI:企业应用集成。是一种概念，从而牵涉到好多技术。J2EE技术是一种很好的集成实现。<BR><B>三、J2EE的优越性</B><BR>1、&nbsp;&nbsp;&nbsp;&nbsp;基于JAVA&nbsp;技术，平台无关性表现突出<BR>2、&nbsp;&nbsp;&nbsp;&nbsp;开放的标准，许多大型公司已经实现了对该规范支持的应用服务器。如BEA&nbsp;,IBM,ORACLE等。<BR>3、&nbsp;&nbsp;&nbsp;&nbsp;提供相当专业的通用软件服务。<BR>4、&nbsp;&nbsp;&nbsp;&nbsp;提供了一个优秀的企业级应用程序框架，对快速高质量开发打下基础<BR><BR><B>四、现状</B><BR>J2EE是由SUN&nbsp;公司开发的一套企业级应用规范。现在最高版本是1.4。支持J2EE的应用服务器有IBM&nbsp;WEBSPHERE&nbsp;APPLICATION&nbsp;SERVER,BEA&nbsp;WEBLOGIC&nbsp;SERVER,JBOSS,ORACLE&nbsp;APPLICATION&nbsp;SERVER,SUN&nbsp;ONE&nbsp;APPLICATION&nbsp;SERVER&nbsp;等。.</FONT></FONT><BR><BR><BR><img src ="http://www.blogjava.net/rkind/aggbug/17016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 12:59 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/17016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>纪念我的J2EE启蒙项目(转) </title><link>http://www.blogjava.net/rkind/archive/2005/10/27/17002.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/17002.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17002.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/17002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17002.html</trackback:ping><description><![CDATA[<P>孔子说：“学而不思则罔，思而不学则殆。”从我做项目的经历，我深深感叹古人的智慧。</P>
<P>去年我毕业设计时候做的一个项目是毕业设计管理系统。当时老师给我们的要求是用Jsp 和 Javabean来实现。我主要负责项目建模和Javabean部分，后来负责数据库的同学被SARS困在家不能返校，所以数据库部分也由我来完成了。当时对java的知识是非常贫乏的，只有简单的语法基础，连jsp、 javabean都是第一次听到过。不知道从哪里开始，于是就研究老师给的一个非常简单的演示项目，首先觉得javabean是个比较简单的东西，于是就先开始分析用户需求。</P>
<P>需求怎么来描述呢？由于学校教育的局限，加上自己研究了很长时间高数，政治，英语（干什么用大家都明白吧），造成了知识的严重匮乏。我就以参加毕业设计人员为中心，建立他们的需求列表。但是这样的需求描述是非常片面的，几乎都是静态的需求，而且很难设计几个用户的交互过程，和某些状态的改变。而且这种需求是否有真正符合需要是个问题，所以我立刻和同学一起设计web界面，目的很简单，因为用户的需求都是通过界面来实现的，对界面的设计能涵盖最终提交用户的功能，而且还能发掘很多非用户的需求。这样我在实现这些功能的时候会有数。在一年后当我仔细看过用例分析，uml后感觉是如获至宝。心头的结全部打开。</P>
<P>建模该怎么建？当时真是什么概念都没有，虽然知道uml，但是仅仅知道皮毛。于是我就很简单的从对象的角度考虑问题，首先找毕业设计管理系统中涉及的人员，这个是很明显找出来的，涉及到学生，教师，管理员，进一步提取出项目对象，各个人员之间通讯的消息对象，毕业设计文档对象，等等。接下来设计数据库表，由于学校教数据库的时候只有讲述了ER图到关系模式的转化，而根本没有讲ODL到关系模式的转化（现在看来，ODL应该更好，对理解O/R Mapping有更多的帮助。）于是就画ER图，建立各种表，设定主键，外键，等等。</P>
<P>我遇到的首要问题就是学生，教师，管理员该怎么办，每一个对象建一个表，似乎也没有什么问题。但是在建立消息对象的时候就有问题了，因为消息是要在学生，教师，管理员任意两者都能传送的，我建消息表的时候是这样设计的：一个消息的内容，消息的发送人，消息的接收人（消息内容和发送人一个表，为解决冗余接收人单独一个表），这样这个消息就有很大的灵活程度了，消息发送人可以是三种角色间的随便一种，更进一步，这样的消息可以是系统生成的消息，而且接收者可以是随便哪种角色。但随之带来的问题是：消息发送人、接收者该去参照谁呢?显然填一个发送者、接收者的id是不够的，必须连发送者的角色也填上。第二种方法，每个角色有一个收到消息的列表，让它去参照单一的消息表id，这样也能解决问题。第三种方法，把学生，教师，管理员合并成一个用户表，那么消息发送人，接收人只要简单的参照一个通用的用户id了。这种合并子类的方法会造成教师，管理员的行有些null值，但是考虑到教师和管理员的数目远远小于学生的数目，所以这样的冗余是忽略不计的。最后我还是选择了最后一种方法。不过我还是觉的是对象模型向关系模型的一种妥协。</P>
<P>接着我着手设计javabean，访问数据库用的是单纯的JDBC。因为我对前台界面要访问一个对象的哪些属性是不了解的，事实上也不该了解。所以我只能从数据库取出一个完整的对象，让他来决定究竟要访问哪些属性。而且对对象的修改也是这样，前台修改好新的对象的属性，我来进行更数据库的同步。于是我的javabean就出现了这样的方法：load()、 store()、 update()、delete()这样的对象和数据库表同步的方法。这在一年后的今天看来，实际上我已经自己做了一个O/R Mapping的工作了。当时自己做这样的O/R Mapping是相当痛苦的事情，而且用的方法也是最粗浅的，就是整个对象更数据库同步，即使没有修改的属性也同步，所以要同步的话，必须要先把对象从数据库取出来，修改后再写回。而且要求所有属性必须是nullable的non-primitive类型。第二个问题，对表中的外键怎么反应到bean中？比如每个学生有一个辅导教师，在数据库中很明显学生表需要一个外键参照教师id，但是在StudentBean中教师属性是写Teacher对象呢，还是Teacher id值呢，按照面向对象，很明显应该Teacher对象，但是我就觉得这是个多么heavy的事情呀！再想想教师情况，一个教师有一个Collection的Student对象是多么“重”！意味着load一个教师要load所有的students。于是我采用的方法是：还是用对象，比如teacher 的学生属性，还是一个collection&nbsp; Student对象，同时提供了一个loadStudents()的方法，load teacher对象的时候并不load 学生属性，只有bean的用户显式调用loadStudents()的时候才会加载一组student对象，这在现在看来似乎我自觉不自觉的实现了lazy loading？</P>
<P>现在审视当时编写的javabean，犯的最大最大的错误就是把data access object和business workflow混在一起了。比如把教师所有要调用的功能都放在教师对象里面，而有些功能有时是要涉及几个bean的。现在看了简直是惨不忍睹的设计，虽然当时也困惑过，但是却没有动动脑筋来解决，我现在看了session bean 的思路时，觉得是那么的舒畅、自然。</P>
<P>当时困惑的还有关于jsp的处理，jsp只是负责显示的，但是为什么一个jsp提交的数据要给另外一个jsp去处理呢？这是很不舒畅的做法，于是有了最初的servlet做控制器的想法，但是当时顾不了研究那么多，也没有最终实现，毕竟前台不是我负责的。当我现在知道了Structs，MVC Model2的时候，我以前的困惑都随之解决。又一次感觉非常舒畅。</P>
<P>以上是我一个新手的第一个项目的一些情况，是在非常闭塞的环境里面做的，上网都是电话卡拨号，根本没有接触到主流技术，但是正是这种环境下积累的无数困惑，使我遇到EJB、Hibernate、Structs的时候如饮甘露，迅速的吸收了他们的营养。否则我想学习这些技术无疑是很耗时间的，因为根本没有更这种技术产生共鸣，不知道他们搞那么多框框究竟想干什么，而我产生了一种共鸣，他们这些框框，正是开我心头疑惑的锁。</P>
<P>又回到开头孔子的话，事实上我在做项目中，一直都是按自己的思考方式在“思”而没有去“学”，所以常常感到疲倦而无所得，即“殆”。但是如果不实际自己去动手做，而光光学j2ee，必然会很迷惑，即“罔”。我感觉先有困惑再有解决，是掌握技术的十分有效的而且巩固的方法，而且很有创造性，是属于归纳的思考方式。所以碰到问题，首先需要想想按常理该怎么去解决，再去寻找别人怎么解决的，这样自己提高会十分迅速。</P>
<P>现在我正在用EJB、Structs来重写那个项目。虽然我对整个需求已经相当清楚，毕竟有了第一个项目作为原型，但是我还是试图使用比较规范的方法来设计。首先分析了很多use case，并且使用Rational的RequisitePro来跟踪需求的变化。接着又使用Rose对use case画了use case diagram。对关键对象交互过程画了 sequence diagram，对某些对象的状态画了state diagram。最后很自然的导出了最重要的class diagram。</P>
<P dir=ltr style="MARGIN-RIGHT: 0px">我现在最大的困惑在Entity Bean上面，建模的时候很自然会有一个User对象，Student, Teacher, Manager 对象继承自这个User对象。那数据库表怎么设计呢？第一种，三个对象三个表，对应StudentBean TeacherBean ManagerBean三个EntityBean。第二种，三个对象一个表，只有一个UserBean。第三种，把User单独一个对象，那么就是四个对象四个表，这样一个子对象，要映射两张表EntityBean不行吧。<BR>暂时不管究竟用什么设计，来考察一下文档对像DocBean，我们主要看看它的cmr部分，一个cmr是author 属性，它应该是三种角色对象中的一种，问题来了，如果三个对象三个表，那么我这里的cmr怎么写？<BR>public abstract StudentLocal&nbsp; getAuthor(); ?<BR>public abstract TeacherLocal&nbsp; getAuthor(); ?<BR>public abstract ManagerLocal&nbsp; getAuthor(); ?<BR>考察第二种，三个对象一个表，只有一个UserBean。那这个是相当简单的只需要<BR>public abstract UserLocal getAuthor();<BR>那最后只有第二种方式才能解决问题，就是只有一个User对象，于是我为了使用EntityBean不得不对我的模型进行修改，把原来清晰的三个对象揉合到一起，虽然说以后某个student变成了teacher 或者manager可以很方便的升级，但是这种情况在我这个例子里面是很少有的，而且数据库这种合并子类的方法给teacher，manager形成了很多的null值，虽然这是忽略不计的，但是总不是优雅的做法，最关键的是我的对象模型又一次向关系模型妥协了。</P>
<P>CMR的另外一个问题是，要CMR必须把所有相关的Bean放一个包里面，在一个xml文件里面配置，我的项目里面的entity bean都是要更user有关系的，那我都需要把这些bean打成一个包，用一个xml描述！我的还是小项目，如果一个项目有100个entity bean，这些entity bean都是相互关联的，那我要把这100个entity bean放在打成一个包，用一个xml配置！那这个xml文件该有多长！一个小小的错误全部完蛋。</P>
<P>看来Entity Bean确实如很多人说的那样不是十分灵活，我也开始倾向于用hibernate来做持久化了，但是我需要有足够的灵活性，我想继承和多态的支持还是很重要的，这样才能真正是“object-oriented domain models”方式，而不是以数据库表为中心的方式，引用Hibernate的一句话“Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier”</P>
<P>我对AOP也是十分关注，因为它实在是太激动人心的概念了，有了AOP那么我们还要容器干什么，容器的功能完全可以通过AOP来实现，就像Spring框架，除了没有分布式外几乎都能支持吧。而jboss4.0也已经通过AOP实现了。考察我的项目，我发现有一个这样的需求需要满足，就是：在执行某些business logic之前必须要检测对这个方法的调用是否超过期限了，比如学生去选择研究课题，如果选择过了就不能再次选择，虽然这个方法可以由前台很简单的解决，但是我觉得在业务逻辑层防止这种行为的发生是业务完整性的一个部分。而通过AOP，把这样一个很多方法都要调用的公共功能作为一个aspect是很好的。我的问题是在容器中运行的EJB能够用AOP吗？在Jboss4.0里面各种EJB都是通过AOP方式来提供服务的，似乎我自己多加一层业务层面的服务应该是可行的（使用jboss aop），但是这样的EJB放在别的容器里面运行会怎么样？会影响到容器对EJB的干预吗？请各位前辈指点。</P><img src ="http://www.blogjava.net/rkind/aggbug/17002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 12:48 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/17002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新手入门：教您最优的J2EE学习经验和流程(转) </title><link>http://www.blogjava.net/rkind/archive/2005/10/27/17001.html</link><dc:creator>rkind</dc:creator><author>rkind</author><pubDate>Thu, 27 Oct 2005 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/rkind/archive/2005/10/27/17001.html</guid><wfw:comment>http://www.blogjava.net/rkind/comments/17001.html</wfw:comment><comments>http://www.blogjava.net/rkind/archive/2005/10/27/17001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rkind/comments/commentRss/17001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rkind/services/trackbacks/17001.html</trackback:ping><description><![CDATA[在这里我谈谈我在学习J2EE流程，并谈到在此过程中领会的经验和教训。以便后来者少走弯路。<BR><BR>Java发展到现在，按应用来分主要分为三大块：J2SE,J2ME和J2EE。这三块相互补充，应用范围不同。<BR><BR>J2SE就是Java2的标准版，主要用于桌面应用软件的编程；<BR><BR>J2ME主要应用于嵌入是系统开发，如手机和PDA的编程；<BR><BR>J2EE是Java2的企业版，主要用于分布式的网络程序的开发，如电子商务网站和ERP系统。<BR><BR>先学习J2SE<BR><BR>要学习J2EE就要先学习J2SE，刚开始学习J2SE先建议不要使用IDE，然后渐渐的过渡到使用IDE开发，毕竟用它方便嘛。学习J2SE推荐两本书，《java2核心技术一二卷》，《java编程思想》，《java与模式》。其中《java编程思想》要研读，精读。这一段时间是基本功学习，时间会很长，也可能很短，这要看学习者自身水平而定。<BR><BR>不要被IDE纠缠<BR><BR>学习java和J2EE过程中，你会遇到五花八门的IDE，不要被他们迷惑，学JAVA的时候，要学语言本身的东西，不要太在意IDE的附加功能，JAVA编程在不同IDE之间的转换是很容易的，过于的在意IDE的功能反而容易耽误对语言本身的理解。目前流行的IDE有jbuilder，eclipse和eclipse的加强版WSAD。用好其中一个就可以了，推荐从eclipse入手J2EE。因为Jbuilder更适合于写J2SE程序。<BR><BR>选择和学习服务器使用配置<BR><BR>当你有了J2SE和IDE的经验时，可以开始J2EE的学习了，web服务器：tomcat，勿庸置疑，tomcat为学习web服务首选。而应用服务器目前主要有三个：jboss、weblogic、websphere。有很多项目开始采用jboss，并且有大量的公司开始做websphere或weblogic向jboss应用服务器的移植（节省成本），这里要说的是，学习tomcat和jboss我认为是首选，也是最容易上手的。<BR><BR>学习服务器使用配置最好去询问有经验的人（有条件的话），因为他们或许一句话就能解决问题，你自己上网摸索可能要一两天（我就干过这种傻事），我们应该把主要时间放在学习原理和理论上，一项特定技术的使用永远代替不了一个人的知识和学问。<BR><BR>学习web知识<BR><BR>如果你是在做电子商务网站等时，你可能要充当几个角色，这是你还要学习：<BR><BR>1、html，可能要用到dreamwave等IDE。<BR><BR>2、Javascript，学会简单的数据校验，数据联动显示等等<BR><BR>J2EEAPI学习<BR><BR>学习J2EEAPI和学习服务器应该是一个迭代的过程。先学习jsp和servlet编程，这方面的书很多，我建立看oreilly公司的两本《jsp设计》和《java servlet编程》，oreilly出的书总是那么优秀，不得不佩服<BR><BR>。学习jdbc数据库编程，J2EE项目大多都是MIS系统，访问数据库是核心。这本应属于J2SE学习中，这里拿出来强调一下。学习jndi api，它和学习ejb可以结合起来。学习ejb api，推荐书《精通ejb》。经过上面的这些的学习，大概可以对付一般的应用了。有人说跟着sun公司的《J2EE tutorial》一路学下来，当然也可以。<BR><BR>学习ejb设计模式和看代码（最重要）<BR><BR>设计模式是练内功，其重要性可以这么说吧，如果你不会用设计模式的话，你将写出一堆使用了ejb的垃圾，有慢又是一堆bug，其结果不如不用ejb实现（ejb不等于J2EE）。无论学习什么语言，都应该看大量代码，你看的代码量不到一定数量，是学不好J2EE的。<BR><BR>目前有很多开源的工程可以作为教材：<BR><BR>jive论坛<BR><BR>petstore sun公司<BR><BR>dune sun公司等等，研读一个，并把它用到自己的工程中来。<BR><BR>J2EE其他学习<BR><BR>当你渐渐对J2EE了解到一定深度时，你要开始关注当前领域中的一些技术变化，J2EE是一块百家争鸣的领域，大家都在这里提出自己的解决方案，例如structs，hiberate，ofbiz等等，学习这些东西要你的项目和目标而定，预先补充一下未尝不可，但不用涉及太深，毕竟学习原理和理论是最最重要的事。<BR><BR>目前常见J2EEAPI<BR><BR>JavaServer Pages(JSP)技术1.2<BR><BR>Java Servlet技术2.3<BR><BR>JDBC API 2.0<BR><BR>Java XML处理API(JAXP)1.1<BR><BR>Enterprise JavaBeans技术2.0<BR><BR>Java消息服务(JMS)1.0<BR><BR>Java命名目录接口(JNDI)1.2<BR><BR>Java事务API(JTA) 1.0<BR><BR>JavaMail API 1.2<BR><BR>JavaBeans激活架构(JAF)1.0<BR><BR>J2EE连接器体系结构(JCA)1.0<BR><BR>Java认证和授权服务(JAAS)1.0<BR><BR><img src ="http://www.blogjava.net/rkind/aggbug/17001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rkind/" target="_blank">rkind</a> 2005-10-27 12:47 <a href="http://www.blogjava.net/rkind/archive/2005/10/27/17001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>