斯坦福 IT

和我一起刷新J2EE,做个新IT

最大赞力
0.00
当前赞力
100.00%
接受前辈大虾的指点,我要刷新我的IT技术,有兴趣的筒子们和我一起来啊.

刷新内容大纲:
HTML/CSS/Struts Tag/JSF Tag/Applet/WEB Basic/Servlet/Jsp
/WEB File Structure/Web.xml/MVC/Struts framework/Jsf framework
/WebService/Spring framework/Ejb Architecture/Message Quene
/JMail/Jasper/Jdbc/Database/Hibernate/JDom/eclipse/wsad/jbuilder
/Linux/Tomcat/Websphere/WebLogic/JBoss/Ant/JUnit/CVS
/ClareCase/Design Pattern
 
最后编辑: 2005-11-25
最大赞力
0.00
当前赞力
100.00%
首先开始先学习CVS,选择这个开始是因为我对Eclipse已经很熟练,但一直没有使用CVS来管理,原因很简单,所有代码都自己维护和使用,没有团队。我是一个独立软件人。

下载cvsnt很简单,按网上提供的资料很快就安好了。我收藏了。
http://download.uvov.com/cvsnt-2.5.03.2151.msi

首先配置了Repository,用Eclipse得“小组-共享”就能完成发布,倒也简单。

我犯了个错误:我直接用原来存在的用户访问,不能正常工作。后来重新增加了个用户,用新用户就ok了。

cvsnt中Server Settings中有Encryption和Compression两个参数,应该是加密和压缩。设置加密方式后,提示此协议(PServer)不支持。先不试验了。
 
最大赞力
0.00
当前赞力
100.00%
CVS和Delphi

在我的程序开发经历中,最喜欢的C/S工具就是Delphi了,学习CVS后,我要把我的Delphi应用都转到了CVS管理了。在我的Java WEB应用中,也有Delphi的影子,是用来开发ActiveX,实现HTML页做不到的东西。

能否找到一个在Delphi7中CVS插件,让我把Delphi变成和Eclipse一样地使用CVS.

Google了一下,发现了BorCVS, 下载未果,看日期也有多年没有维护了,放弃!

看来只能用通用的WinCVS了。

收藏WinCVS: http://download.uvov.com/WinCvs2_0_2-4.zip

运行时还需要python,收藏为: http://download.uvov.com/python-2.4.2.msi

还找到一个说明文件,收藏为:http://download.uvov.com/WinCvsGuide.zip
 
最大赞力
0.00
当前赞力
100.00%
我在针对高人指点的内容,对如下内容进行复习和学习:
HTML/CSS/Struts Tag/JSF Tag/Applet/WEB Basic/Servlet/Jsp
/WEB File Structure/Web.xml/MVC/Struts framework/Jsf framework
/WebService/Spring framework/Ejb Architecture/Message Quene
/JMail/Jasper/Jdbc/Database/Hibernate/JDom/eclipse/wsad/jbuilder
/Linux/Tomcat/Websphere/WebLogic/JBoss/Ant/JUnit/CVS
/ClareCase/Design Pattern
现在在巩固CVS呢,之后是hibernate,一点一点来
 
最大赞力
0.00
当前赞力
100.00%
WinCVS

安装WinCVS没问题. 第一次运行,提示我需要Python 2.1,还有地址,很快就下载安装了。

运行之,看着菜单也蛮复杂的。好在我用eclipse连接成功有了经验,我不怀疑我的服务器安装有问题,看说明书吧。

当然第1件事是和我的cvs服务器连接上。和说明书不同的是,连接服务器的界面说是was removed. 好象是说只要在import或extract时指定CVSROOT即可。

于是我在工作目录中先来来几个Delphi的包,准备测试。CVSROOT串是关键了,可这个串怎么个写法?参考一下我的Eclipse吧,记得在Eclipse中见过这个串。查到了server:user@host:reposity. 再试验一下login. 格式总算对了,可我没找到如何share a module啊,原来叫import module啊,以为是从服务器下来叫import呢。

一口气把我用到的几个公用包都导进去了,包括EHLIB26\ENVISION\DREAM\IP4000\CURRENCY和我自己的COMMON7. import时WinCVS先把所有的扩展类型的处理动作让你选择,我只把.dcu改为ignore。

我重复import时,信息窗口提示已经存在了。

先用了Eclipse,再用这个WinCVS感觉不直观的很。但也没有办法。但WinCVS更通用啊.

使WinCVS倒没有什么大问题,Login后,Import就可发布一个Module,CheckOut就可获得服务器的Module. 只Import是看不到文件的版本号,很奇怪,因为说明书的图片上有啊,后来checkout下来一个Module才看到版本号。

发布时不希望把没有用的东西也送服务器,每个Module都需要指定什么能上什么不能上,好麻烦的。反复操作后发现工作目录下的.cvsignore文件,把我需要忽略的*.~*/*.dcu加入进去,解决了不少问题。

好,估计我应该可无障碍使用了。继续把所有相关的东东都发布到CVS中去。
 
最大赞力
0.00
当前赞力
100.00%
理解Hibernate

早听说Hibernate了,但看了看工作原理,就Pass了。理由不外乎是大数据量得低效率。我理解的Hibernate是,Hibernate自己解析SQL(称为HQL),相当于实现了数据库的SQL语言解释层。当然,最后最后应该还是翻译成数据库SQL语句,把结果集封装到对应得Object对象中。所以返回的结果是个List。如果查询的结果对象肯定要被使用到,则很有效率,如果只为了分页,肯定不怎么样。

不过,仔细理解地看,Hibernate在处理业务对象角度还是很有创意的,把对象化的东西简化了很多,更便于思考了。我想到的是让Hibernate和JDBC访问配合使用。问题是,这样的话,Hibernate的缓冲机制会不会导致Hibernate的数据是过期的?

不解1: Hibernate的对象数据什么时候过期呢?
不解2: 如果有100万数据,From Cat as cat语句是否肯定有100万个实体对象产生?当然如果真这样,差不多死定了,至少效率回极其慢。但是否必须回避这样的用法?
不解3: 几个Hibernate访问1个数据库,能否导致其中一个Hibernate的数据是过期的?

但是,抛弃常规的JDBC考虑惯性,Hibernate是不错的。我们要努力理解之。

首先,Hibernate非常适合于手工专用编程。常规的JDBC或ODBC应用, 我们不会为每个表结构建立一个实际对象, 至多只是一个通用的集合. 而手工编程,或者是EJB模式,每个表行就是一个实体。一个应用就是多个实体连同他们的方法,所以从后台角度来看,业务部分就是实体的方法扩展,逻辑关系也是对象的相互调用。Hibernate做到的就是实体间的SQL,并透明处理了对数据库的存储。因为hibernate要自动实现数据的存储,所以你必须很好地定义出表的关系,以便让hibernate知道什么数据变化后如何产生SQL语句。hibernate让你不再使用insert/update/delete了,而且便于今后的系统扩充,因为对某个对象的增强只是与这个对象和操作这个对象的对象们有关,改动很小。其实,即使在分页技术中,我们需要的只是其中一组数据,仍然采用跳过前面若干,定位到指定记录上,也许效率也不错。Hibernate继承jdbc,并统一了JDBC规范。这样说应该是合理的。Hibernate实现的是面向对象的SQL,其查询和用JDBC查询一样,但更通用。效率高低应该在自己的处理手段了。但对通用模块的开发可能不是很好的。

参考 http://forum.javaeye.com/viewtopic.php?t=10403&postdays=0&postorder=asc&start=0 的 “为Hibernate做大数据量测试的一些感受”一文,摘录如下,以便日后参考:
1) 在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数据量的,可以使用session.clear()或者session. Evict(Object) 在处理过程中,清除全部的缓存或者清除某个对象。
2) 对大数据量查询时,慎用list()或者iterator()返回查询结果,
1. 使用List()返回结果时,Hibernate会所有查询结果初始化为持久化对象,结果集较大时,会占用很多的处理时间。
2. 而使用iterator()返回结果时,在每次调用iterator.next()返回对象并使用对象时,Hibernate才调用查询将对应的对象初始化,对于大数据量时,每调用一次查询都会花费较多的时间。当结果集较大,但是含有较大量相同的数据,或者结果集不是全部都会使用时,使用iterator()才有优势。
3. 对于大数据量,使用qry.scroll()可以得到较好的处理速度以及性能。而且直接对结果集向前向后滚动。
3) 对于关联操作,Hibernate虽然可以表达复杂的数据关系,但请慎用,使数据关系较为简单时会得到较好的效率,特别是较深层次的关联时,性能会很差。
4) 对含有关联的PO(持久化对象)时,若default-cascade="all"或者 “save-update”,新增PO时,请注意对PO中的集合的赋值操作,因为有可能使得多执行一次update操作。
5) 在一对多、多对一的关系中,使用延迟加载机制,会使不少的对象在使用时方会初始化,这样可使得节省内存空间以及减少数据库的负荷,而且若PO中的集合没有被使用时,就可减少互数据库的交互从而减少处理时间。
6) 对于大数据量新增、修改、删除操作或者是对大数据量的查询,与数据库的交互次数是决定处理时间的最重要因素,减少交互的次数是提升效率的最好途径,所以在开发过程中,请将show_sql设置为true,深入了解Hibernate的处理过程,尝试不同的方式,可以使得效率提升。
7) Hibernate是以JDBC为基础,但是Hibernate是对JDBC的优化,其中使用Hibernate的缓冲机制会使性能提升,如使用二级缓存以及查询缓存,若命中率较高明,性能会是到大幅提升。
Hibernate可以通过设置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等属性,对Hibernate进行优化。
 
最大赞力
0.00
当前赞力
100.00%
Hibernate会用到cglib...

Hibernate要用到CGLIB库,http://cglib.sourceforge.net/, cglib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO字节码的动态生成。

import net.sf.cglib.*; 是常用的格式,在hibernate 3.0包含的是cglib-2.1.jar. 看来cglib也是个了不起的家伙,我先知道hibernate需要就是了.
 
最大赞力
0.00
当前赞力
100.00%
Hibernate的基本用法

虽然XML已经大行其道,但我就是不喜欢。虽然通过修改XML配置文件是先进的,可太灵活导致太复杂,看的人晕晕的。相比而言,x.properties文件我还是欢迎的,所以我的配置文件多为此。而动态设置配置参数一直是我的一大喜好,我可不喜欢那么多文件.

Configuration cfg=new Configuration();
cfg.setProperty("show_sql","true");
cfg.setProperty("dialect","org.hibernate.dialect.MysqlDialect");
cfg.setProperty("connection.driver_class","com.mysql.jdbc.Driver");
cfg.setProperty("connection.url","jdbc:mysql://localhost/HibernateTest");
cfg.setProperty("connection.username","caterpillar");
cfg.setProperty("connection.password","123456");
SessionFactory sf=cfg.buildSessionFactory();
Session ss=sf.openSession();
Transaction tx= ss.beginTransaction();
ss.save(obj);
tx.commit();
ss.close();

这是基本的访问hibernate的方法,把factory全局化,而Session局部话,就可实现用Hibernate对数据库进行访问了。

设置cfg的connection.datasource可使用dbcp配置的连接池
cfg.setPropeties("connection.datasource","java:comp/env/jdbc/dbname");

cfg.addXML可以把MappingXML作为一个字符串来动态定义,查了半天就是要这个方法。

好了,有了这些基本手段,Hibernate得应用只是时间问题。
 
最大赞力
0.00
当前赞力
100.00%
Spring是什么?

我还没有一点概念。

哈哈,Spring竟然是和EJB3.0可比较的东西。
下面的文章给了Spring一个基本的介绍:
http://forum.hibernate.org.cn/viewtopic.php?t=4505&postdays=0&postorder=asc&start=0

要确实理解Spring肯定得看Spring的包和相关的Demo了.

Spring首先负责管理Bean,好象还有Bean之间的关系?其次SpringMVC. org.springframework.web.servlet.* 和 org.springframework.web.servlet.mvc.* 是主要的包空间
Spring通过修改web.xml文件配置,把Spring在WEB启动时加入。

最简单的方式是建立一个Servlet
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/example/*</url-pattern>
</servlet-mapping>
以上应用需要包spring.jar commons-logging.jar支持

另外的补充方式是让Spring读入/WEB-INF/applicationContext.xml配置文件
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

applicationContext.xml就是Spring规范的Bean组装清单。

下面是为Log4j提供的参数
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>petstore.root</param-value>
</context-param>

需要Struts动作时,需要如下配置,对应struts-config.xml,但和Spring不重复使用:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>

需要Remoting时,需要如下配置,对应remoting-servlet.xml:
<servlet>
<servlet-name>remoting</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>

需要Web-Service时,需要如下配置,对应server-config.wsdd:
<servlet>
<servlet-name>axis</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>

初步只能了解这些了。
 

家园推荐黄页

家园币系统数据

家园币池子报价
家园币最新成交价
家园币总发行量
加元现金总量
家园币总成交量
家园币总成交价值

池子家园币总量
池子加元现金总量
池子币总量
1池子币现价
池子家园币总手续费
池子加元总手续费
入池家园币年化收益率
入池加元年化收益率

微比特币最新报价
毫以太币最新报价
微比特币总量
毫以太币总量
家园币储备总净值
家园币比特币储备
家园币以太币储备
比特币的加元报价
以太币的加元报价
USDT的加元报价

交易币种/月度交易量
家园币
加元交易对(比特币等)
USDT交易对(比特币等)
顶部