作者:江南白衣???
??? SpringSide--Pragmatic Enterprise Application KickStart and Common Library Stack,這么長(zhǎng)的一個(gè)名字下來(lái),不用解釋大家都知道是做什么的了----以Spring Framework為core,提供一個(gè)Pragmatic的企業(yè)應(yīng)用開(kāi)發(fā)基礎(chǔ)和最佳實(shí)踐展示。
? ?定位:為使用Spring框架的開(kāi)發(fā)者提供一個(gè)非Demo版的復(fù)雜、正式而體現(xiàn)最佳使用實(shí)踐的參照系統(tǒng)。
?? 目標(biāo):囊括JavaEE必須面-對(duì)的所有問(wèn)題的合理的、合乎實(shí)踐標(biāo)準(zhǔn)的解決方案,采用Plugins形式組織,使開(kāi)發(fā)者可快速定位所需的參考方案并做加法到自己的系統(tǒng)。
?
????項(xiàng)目網(wǎng)站:http://www.springside.org.cn?
??? or http://springside.sourceforge.net
??
??? 1. Featrue List???
- Spring 2 - J2EE Framework.
- Hibernate 3 - ORM, support EJB3/JPA1.0 in future.
- Spring MVC?/WebWork - Multi-Action Web framework.
- JSP2.0 - View Template.
- XFire - Web Service.
- Acegi - Security, RBAC ana ACL.(doing)
- Eclipse BIRT 2 - Report Engine.(doing)
- Drools?3 - Business Rule engine.(doing)
- ActiveMQ ,Jencks - JMS Message Driven POJO.
- Quartz - Enterprise job scheduler.
- DWR 2 , Prototype.js , TrimPath JSTemplate ? - Ajax
- Compass - Search engine use Luecene .(doing)
- Groovy - Dynamic script language.(doing)
- Openi - BI web application for OLAP Report.(doing)
- ServiceMix - ESB(Enterprise Service Bus) and JBI.(doing)
- Commons Validator - client and server side validation.
- SiteMesh web-page layout and decoration framework.
- OSCache - Web cache solution.
- ExtremeTable - JSP Tag Libraries.
- Log4j - Logging tool.
- Ant , Maven2 , JUnit, EasyMock?- Build and Test tools.
- UTF-8 and I18N.
- Intergrate with Weblogic , Tomcat , JBoss , Geronimo.
- And we are choising the Workflow solution.
?
??? 2. SpringSide與Appfuse有什么不同?
??? 1.SpringSide較完整的演示了企業(yè)應(yīng)用的各個(gè)主題,而Appfuse只有簡(jiǎn)單的登陸界面和用戶管理。
??? 2.SpringSide是深受Ruby on Rails影響的Pragmatic型的方案。
??? 3.Appfuse主要目的是展示各式mvc、orm方案與Spring的結(jié)合,有些技術(shù)屬于高手玩具,而SpringSide展示的是一個(gè)國(guó)內(nèi)項(xiàng)目的實(shí)際形態(tài),并帶中文手冊(cè)與大量中文代碼注釋
????4. 腳本細(xì)節(jié)
??SpringSide的基本結(jié)構(gòu)是JDK1.4 + Spring 2.0 + hibernate3 + Spring MVC multi-action + JSP2.0。
??? 使用 XFire提供WebService訂書(shū)的服務(wù)端接口和 Java版/.Net版的客戶端示范代碼。
????店員是個(gè)兼職的學(xué)生,所以系統(tǒng)會(huì)為每張訂單發(fā)一封通知郵件給店員。為了不影響顧客下單的速度,發(fā)信的動(dòng)作由jms異步進(jìn)行。
???
??? 系統(tǒng)還會(huì)用 Quartz定時(shí)掃描缺貨的圖書(shū),用郵件通知店員。
????
??? 老板只負(fù)責(zé)看一些色彩豐富,帶圖的報(bào)表。Eclipse Birt2.0提供日常報(bào)表 , Openi提供BI OLAP的。
????基于Lucene的 Compass做的圖書(shū)全文搜索。
??? 基于 Drools規(guī)則引擎的訂單滿100元免運(yùn)費(fèi),會(huì)員積分制等。??????
? ? 店面演示Ajax效果與 OSCache的Web Cache,SiteMesh的渲染效果使用。
??? 一些非關(guān)鍵業(yè)務(wù),用 Groovy動(dòng)態(tài)語(yǔ)言來(lái)快速開(kāi)發(fā)。
??? log4j系統(tǒng)將重要操作員日志異步寫(xiě)入數(shù)據(jù)庫(kù),使它們可管理。
??? 綜合的Acegi i安全權(quán)限管理。
??? utf-8, i18n的國(guó)際化項(xiàng)目。
???ServiceMix ,WorkFlow的故事設(shè)計(jì)中。
??? 5. RoadMap
??? Road Map in? JIRA Issue Checker ,歡迎大家提出更多Topic
????.
??? 6. 團(tuán)隊(duì)成員列表 (排名按加入順序)
???
???? 歡迎朋友們加入。人多速度快是很重要的事情。
???參加方式有3種
?? 1.幫忙codereview提意見(jiàn)
?? 2.到JIRA里面領(lǐng)任務(wù)
?? 3.到JIRA 提出新任務(wù)?
??真正貢獻(xiàn)了力量的同志自然會(huì)成為開(kāi)發(fā)人員.
???
????Team Worker:
???? 江南白衣,cac,@_@,wuyu,charlse, efa,yimlin??
???? Contributor:
???? water?ye ,totodo,david.turing,pesome,oofrank
??
???? 長(zhǎng)老供奉:
????? 莊表偉,Robbin
???? (排名按加入時(shí)間)
7. 交流區(qū)
開(kāi)發(fā)者QQ群:15690287 (only for Springside developer)
用戶QQ群: 21601442
白衣大佬終于出手了
可惜水平有限,如果將來(lái)有些文檔之類(lèi)的咚咚應(yīng)該可以幫手做下
是否考慮在sf或者java.net上開(kāi)個(gè)專門(mén)店?
“SpringSide是深受Ruby on Rails影響的極度Promatic方案。”這個(gè)很吸引人吶
有沒(méi)有考慮過(guò)Osgi +extesion point提供eclipse plugin的擴(kuò)展機(jī)制啊?
我的mail:losingfox@gmail.com
不晚阿,springside才剛啟動(dòng)。
你不貢獻(xiàn)點(diǎn)代碼類(lèi)庫(kù)之類(lèi)的出來(lái)就不給你看!!!
當(dāng)然我是理解區(qū)別di,嘿嘿
Programer援助交際ID: 不刮胡子的魚(yú)。
第一版我想先一些平時(shí)比較熟悉的朋友做出一個(gè)框架。
再share出來(lái)給大家一起添加功能。
希望能有機(jī)會(huì)參與!有進(jìn)展一定要發(fā)布呀!!!
希望能夠奉獻(xiàn)上俺的一點(diǎn)微薄之力,發(fā)揚(yáng)我們的團(tuán)隊(duì)精神!
想打打下手(讀代碼挑毛病之類(lèi)的活),不知道有沒(méi)有資格。
能早日看到正式版的發(fā)布!
agile.guo@gmail.com
說(shuō)實(shí)話,確實(shí)想和大家一起合作。
email :angle4781@163.com
申請(qǐng)參加,哈哈:)
stillanother@gmail.com
julian_zzx@hotmail.com
julian0zzx@gmail.com
http://juleven.blogdriver.com
http://www.opentown.info
很久沒(méi)更新 :(
simbasun@gmail.com
----------------------------------------------
ultranms@gmail.com
ligangdu@hotmail.com
聯(lián)系email: tony@exchange.ricsson.com
聯(lián)系email:xsuyu@hotmail.com
有幾點(diǎn)建議,呵呵
BaseHibernateDao的功能可以再?gòu)?qiáng)化一些,
如增加對(duì)MAP的查找,應(yīng)對(duì)大批量重復(fù)在DAO中取MAP去查詢,
增加HQL查找,以便功能急劇變更,特別復(fù)雜的情況下使用。
對(duì)Controller中生成POJO能否用COPY,直接SET出錯(cuò)幾率有些大。且煩瑣
刪除能否直接用一個(gè)Controller,提高重用?
能否面向接口??
謝謝你的建議:
>>BaseHibernateDao的功能可以再?gòu)?qiáng)化一些
BaseDao會(huì)隨著應(yīng)用不斷深入而加強(qiáng).
你看現(xiàn)在的代碼都是很簡(jiǎn)單的,所以也不預(yù)先把一堆用不著的功能寫(xiě)出來(lái)了,現(xiàn)在的hibernate,spring變化太快,很容易白寫(xiě).
>>如增加對(duì)MAP的查找,應(yīng)對(duì)大批量重復(fù)在DAO中取MAP去查詢
如果要求Map里所有條件 都是 ==的判斷意義不大, 必須有第3元 邏輯符才有用
>>增加HQL查找,以便功能急劇變更,特別復(fù)雜的情況下使用.
同第一點(diǎn)
>>對(duì)Controller中生成POJO能否用COPY,直接SET出錯(cuò)幾率有些大。且煩瑣
不懂,舉個(gè)例子好嗎?
>>刪除能否直接用一個(gè)Controller,提高重用?
會(huì)不會(huì)不好管理?
歡迎你在User-group里面提出review意見(jiàn)
http://groups.google.com/group/springside-user
我的意思是針對(duì)DAO的方法能否粗粒度一點(diǎn),比如抽象出 增 、刪 、 改 、 查的基本操作。
下面是一些思路。
接口
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
public interface DAOInterface {
public void saveObject(Object obj);
public List loadAllObject();
public void updateObject(Object obj);
public void saveOrUpdateObject(Object obj);
public void deleteObject(Object obj);
public void deleteAllObject(Collection obj);
public Object loadObject(Serializable id);
}
下面是base
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
public abstract class BaseDAO extends HibernateDaoSupport{
protected abstract Class getPojoClass();
public void saveObject(Object obj) {
super.getHibernateTemplate().save(obj);
}
public List loadAllObject() {
return super.getHibernateTemplate().loadAll(this.getPojoClass());
}
public void updateObject(Object obj) {
super.getHibernateTemplate().update(obj);
}
public void saveOrUpdateObject(Object obj){
super.getHibernateTemplate().saveOrUpdate(obj);
}
public void deleteObject(Object obj) {
super.getHibernateTemplate().delete(obj);
}
public void deleteAllObject(Collection obj) {
super.getHibernateTemplate().deleteAll(obj);
}
public Object loadObject(Serializable id) {
return super.getHibernateTemplate().load(getPojoClass(),id);
}
//直接hql查找
public List find(String hqlString) {
return this.getHibernateTemplate().find(hqlString);
}
public List findObject(String queryString, Object[] values) {
return this.getHibernateTemplate().find(hqlString, values);
}
}
BookDAO
public interface BookDAOextends DAOInterface {
//extends method
}
BookDAOImpl
public class BookDAOImpl extends BaseDAO implements BookDAO{
private Class pojoClass = Book.class;
protected Class getPojoClass() {
return pojoClass;
}
public void setPojoClass(String className){
try {
pojoClass = Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//extends method
}
org.apache.commons.beanutils.PropertyUtils.PropertyUtils.copyProperties(form,POJO);
修改時(shí)
org.apache.commons.beanutils.PropertyUtils.PropertyUtils.copyProperties(POJO,form);
刪除能否直接用一個(gè)Controller,提高重用?
是指把重復(fù)寫(xiě)
public ModelAndView removeAll(HttpServletRequest request, HttpServletResponse response) throws Exception
{
String[] ids = request.getParameterValues("itemlist");
if (ids != null)
{
for (int i = 0; i < ids.length; i++)
{
bookManager.removeBook(new Integer(ids[i]));
}
saveMessage(request, "成功刪除" + ids.length + "條紀(jì)錄");
}
return new ModelAndView(SUCCESS_VIEW);
}
這種remove代碼提取出來(lái),因?yàn)闆](méi)有業(yè)務(wù)邏輯,最多是不能刪除,不過(guò)那是l列表頁(yè)面的邏輯,構(gòu)造為一個(gè)Controller。不過(guò)也有缺點(diǎn),需要在頁(yè)面指定Controller調(diào)用哪個(gè)service,指定返回頁(yè)面。
對(duì)MAP的查找,可以把邏輯運(yùn)算符放到map中,
PairValue pv = nw PairPairValue (obj,logic);
map.put(attr1,pv);
如果需要指定是and 還是 or ..可以構(gòu)造三元值放到MAP中。
另外對(duì)于Map查找,有個(gè)功能是不能實(shí)現(xiàn)的,比如book.price > 12 and book.price <18..
基于以下框架開(kāi)發(fā):webwork,spring,hibernate,sitemesh,freemarker,displaytag,osflow
email:surootcsdn@gmail.com
ROR中Controller的內(nèi)置對(duì)象session, logger(那個(gè)BaseManager的logger不知道是什么思路), params等非常方便,在SpringSide中可以在BaseController中以protected method方式加進(jìn)去,能夠大大方便編程,盡量不要用protected field方式。
bookstore-servlet.xml中的urlMapping可以模仿ROR中的mapping方式,去除從URL到Controller的xml配置。比如book.do直接映射到org.springside.bookstore.BookController。其中package名字配置一次就夠了。
bookstore的實(shí)例代碼中的domain object似乎有一些貧血,ROR中就沒(méi)有DAO和Service層,Data Access代碼就在domain object里面。
BTW,我用Eclipse 的WTP來(lái)跑的,這套插件竟然占了我的筆記本300M內(nèi)存!有種欲哭無(wú)淚的感覺(jué),什么時(shí)候Emacs有一個(gè)打包的J2EE開(kāi)發(fā)環(huán)境我一定叛變過(guò)去。
Email:aystnd@163.com
有什么需要可以幫忙打下手。
wjw_319@hotmail.com
kenny319@hotmail.com
強(qiáng)烈支持!!
我現(xiàn)在正在做一個(gè)OpenSource項(xiàng)目——一個(gè)基于Eclipse的開(kāi)源框架整合的軟件生命周期管理的項(xiàng)目,
精力不足啊,否則,一定鼎立幫忙!哈哈
降低項(xiàng)目開(kāi)發(fā)的周期,加快項(xiàng)目開(kāi)發(fā),對(duì)框架進(jìn)行整合,已經(jīng)是大趨勢(shì)了,開(kāi)源項(xiàng)目來(lái)的太快,太多,讓那些巨頭都有點(diǎn)招架不了了,在這個(gè)時(shí)期,開(kāi)源快速切入應(yīng)該是最好的時(shí)機(jī),現(xiàn)在好像缺的東西還是很多的:項(xiàng)目管理(整合度高的,智能化的),架構(gòu)整合(uml,er圖,代碼與現(xiàn)有framework之間的整合,多一點(diǎn)智能化),。。。。
高層次的,如項(xiàng)目測(cè)試等,還被巨頭壟斷,開(kāi)源也很少啊
我會(huì)抽盡量多的時(shí)間關(guān)注項(xiàng)目!哈哈
恰巧我也準(zhǔn)備籌建一個(gè)符合大眾口味的開(kāi)源框架,我想SpringSide在我這
會(huì)有更好的實(shí)踐和考驗(yàn)機(jī)會(huì);
真誠(chéng)申請(qǐng)加入開(kāi)發(fā)團(tuán)隊(duì):
patterns@eyou.com
patternsone@eyou.com
msn:patternsone@hotmail.com
xinzhuhuang@hotmail.com
hibernate3@gmail.com
msn:mamba_channel3@hotmail.com
hopenful@yahoo.com
wzhj2005@hotmail.com
祝項(xiàng)目越做越好!!!
SpringSide的開(kāi)發(fā)中,我覺(jué)得最好由樓主主導(dǎo),不必參考太多的意見(jiàn),因?yàn)槊總€(gè)程序員都有自己的開(kāi)發(fā)習(xí)慣,沒(méi)有絕對(duì)最佳的方案。盡快出東西,期待SpringSide中....
It would be great if the documentation is available in english too. I really liked the application and the valuble code.
Hope we will get english documentation.
Thanks & Regards
Ramesh Mandaleeka
msn : zuodelong@hotmail.com
等于
沒(méi)有解決任何問(wèn)題。
msn:gigiluopeng@hotmail.com