潜水好久了,也出来冒个泡吧,呵呵!
今天一大早就在TSS上看到这个新闻,还非常奇怪为什么在今天轻量级框架占尽天时地利人和的时候,banq居然把他几年前可能会出尽风头的所谓的opensource,framework在TSS上发表,在TSS上高手如林,众目睽睽之下还敢发表EJB framework,真是勇气可嘉,在很久很久以前看过有关hibernate讨论的一篇,有着“华山论剑”气势的文章,可以看到banq对于J2EE的理解如此之深刻,那时对banq的敬佩真是发自内心的。也看过不少gigix发表的文章,看到和自己年龄相仿的程序员,能够有时间去研究那么多新技术,文笔也不错,也是发自内心的钦佩。我双手赞成gigix的观点,同样我也不能说服自己去接受jdonframework,我非常奇怪为什么banq这几年好像在J2EE领域没有什么进步,而同样的产品Appfuse的作者,在发布了Spring+struts+hibernate的Appfuse,还在不断的用新的技术去完善Appfuse。大家可以在Matt Raible的blog看看,经常的保持更新,经常的讨论新的技术。我觉得banq是否应该总结一下经验教训,作为一名架构师,应该时时的关注新的技术,而不要还停留在几年前的技术上,EJB2.0注定要被淘汰,取而代之的是EJB3.0,轻量级的POJO框架,这是大势所趋。
banq先生:你是否应该冷静下来,仔细想想呢?
to patrick_shine
在技术概念上我有我自己的风格,你可以认为我的水平不能与时俱进,但我根本不承认那是“时”,我认为那是误区,我从来不相信世界上有所谓轻量级的解决方案,所谓轻量和重量是那些虚伪的政治技术人员妄图收买人心制造的一个概念。
所以,我不相信,我也在试图说服你,不要相信那套,但是你相信了,所以你回头来看我觉得落后了,这不可笑吗?
我相信标准、系统的可伸缩性,这些都是我唯一相信的,我接触那么多战斗前线的开发程序员,我们的观点是一致的。这些信念才是坚持在这里吆喝以及和你们战斗的动力。
关于EJB,我可以告诉你,EJB 3.0重要的是支持EJB 2.0所有功能,它没有抛弃EJB2.0 CMP等所谓重量级技术,它只是引入了J2SE 5.0的Meta特性,你把他误读为轻量级的胜利,那是你因为受了某些文章误导。
一个事情可以把话正过来说,也可以反过来说,你没有这样的理性判断力吗?
我从来只支持成熟的技术,EJB 3.0没有成熟,所以我没有大力推荐,但是有些人喜欢跟屁,外国有点什么,马上翻译过来,然后自己标榜XXX专家,我屁!有本事写出来自己理解的代码,而不是照搬照抄,这些人我最讨厌了,当然你引见新的技术功不可没,但是你自己没有理解,而且借此自居,我就是要揭露这种现象。
要知道,怏怏大国,不是没有敢骂敢喊的技术人员。!
|
TSS上已经开吵,作为中国的程序员,我感到很脸红。
且不说人家说是“another crap",就连我们国人自己都看不过去,何必放到TSS上让人家认为是another crap呢?
那个王?的吵架风范也尽显中国程序员的”本色“了哦
我现在开始祈祷 ,这个帖子永远沉下去,不要丢太多国人的脸!
我也说两句,反正代码就在那里,大家看着那里不行,就可以修改一下,然后贴上来讨论吗,何必老在那里质问阿。
请给我一个使用EJB的理由?现在绝大部分项目只用轻量级框架就能很好的实现,而且在性能上,可维护性,开发效率都远远的高于重量级框架。并且现在重量级框架的很多功能都能用轻量级框架很好的实现。Spring的作者因此出了一本书《J2EE without EJB》。
rusty wang ,这人是中国人吗?若是,真给中国人丢人。
我给你个理由,ejb是标准,大家对它支持性好,作为一种解决方案,思路,架构模式,也未尝不可。
>>我也说两句,反正代码就在那里,大家看着那里不行,就可以修改一
>>下,然后贴上来讨论吗,何必老在那里质问阿。
现在不是局部代码的问题,而是整体架构取向的问题。谁都不能保证局部代码就是十全十美的。但我们能保证整体架构取向是重量级framework还是轻量级framework.这是重量级框架和轻量级框架的又一次较量。用了spring后,我发现我已经深深的爱上轻量级框架了。
我做过的几个项目,就没有使用ejb,感觉,ejb,等持久性框架没给我带来多少效率的提高,虽然,看起来是思路清晰些。请看我的一段代码。
这么多有才干人在评头论足,不如施展自己的所长~ 让世人看看我们中国也有一批"专家".
自卑的技术人员...
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class modifyForm extends ActionForm implements ModelInterface {
private String feild1;
private String feild10;
private String feild11;
private String feild12;
private String feild13;
private String feild14;
private String feild2;
private String feild3;
private String feild4;
private String feild5;
private String feild6;
private String feild7;
private String feild8;
private String feild9;
public String getFeild1() {
return feild1;
}
public void setFeild1(String feild1) {
this.feild1 = feild1;
}
public String getFeild10() {
return feild10;
}
public void setFeild10(String feild10) {
this.feild10 = feild10;
}
public String getFeild11() {
return feild11;
}
public void setFeild11(String feild11) {
this.feild11 = feild11;
}
public String getFeild12() {
return feild12;
}
public void setFeild12(String feild12) {
this.feild12 = feild12;
}
public String getFeild13() {
return feild13;
}
public void setFeild13(String feild13) {
this.feild13 = feild13;
}
public String getFeild14() {
return feild14;
}
public void setFeild14(String feild14) {
this.feild14 = feild14;
}
public String getFeild2() {
return feild2;
}
public void setFeild2(String feild2) {
this.feild2 = feild2;
}
public String getFeild3() {
return feild3;
}
public void setFeild3(String feild3) {
this.feild3 = feild3;
}
public String getFeild4() {
return feild4;
}
public void setFeild4(String feild4) {
this.feild4 = feild4;
}
public String getFeild5() {
return feild5;
}
public void setFeild5(String feild5) {
this.feild5 = feild5;
}
public String getFeild6() {
return feild6;
}
public void setFeild6(String feild6) {
this.feild6 = feild6;
}
public String getFeild7() {
return feild7;
}
public void setFeild7(String feild7) {
this.feild7 = feild7;
}
public String getFeild8() {
return feild8;
}
public void setFeild8(String feild8) {
this.feild8 = feild8;
}
public String getFeild9() {
return feild9;
}
public void setFeild9(String feild9) {
this.feild9 = feild9;
}
public String getValuesClause() {
String values = " values('" + this.feild1 + "','" + this.feild2 + "','" +
this.feild3
+ "','" + this.feild4 + "','" + this.feild5 + "','" +
this.feild6 +
"','" + this.feild7
+ "','" + this.feild8 + "','" + this.feild9 + "','" +
this.feild10 +
"','" + this.feild11 + "','"
+ this.feild12 + "','" + this.feild13 + "','" +
this.feild14 + "')";
return values;
}
public String getSetClause() {
String setCluase = " set TraderCode='" + this.feild1 + "',TraderName='" +
this.feild2
+ "',ProtocolCode='" + this.feild3 + "',SeverMode='" +
this.feild4 +
"',Ip='" + this.feild5
+ "',Port='" + this.feild6 + "',Spid='" +
this.feild7 + "' , Spcode='" +
this.feild8 + "' , Secret='" + this.feild9 +
"',Service='" +
this.feild10 + "', PayCode='" + this.feild11 +
"' , TraCode='" +
this.feild12 + "' , UserName='" + this.feild13 +
"' , Password='" +
this.feild14 + "'";
return setCluase;
}
我建议,搞三个或两个版本,比如一个用ejb,所谓的重量级,一个用轻量级,如spring,hibernate.第三个用什么也不用,自己利用反射机制,aop,ioc等设计一个。
若是那样我愿意搞第三个。
这个是banq的
package com.jdon.framework.test.web;
import com.jdon.model.ModelForm;
public class UserActionForm extends ModelForm {
private String userId;
private String name;
public String getName() {
return name;
}
public void setUserId(String userId) {
this.userId = userId;
}
public void setName(String name) {
this.name = name;
}
public String getUserId() {
return userId;
}
}
banq在这里是让这个form ,extends 抽象类ModelForm,在 ModelForm中
又有一些public void setAction(String action) { }
public String getAction() { return null;}
public String getJdonActionType() { return null;}
public void setJdonActionType(String jdonActionType) { } 和一些属性等,我觉得这不应该把他们放在form里。
弟子功力还浅,欢迎大家继续讨论,修改。