採用 MyEclipse 內建 Derby 資料庫,建立 BOOK 表(ID、NAME、ISBN、AUTHOR),利用 Hibernate 反向工程產生 Domain、DAO、Mapping,再疊加 Spring 事務管理與 DWR 遠端呼叫,構建完整的 CRUD 應用。
applicationContext-db.xml:BasicDataSource + LocalSessionFactoryBean,掃描 Book.hbm.xmlapplicationContext-dao.xml:BookDAO 注入 sessionFactoryapplicationContext-service.xml:BookManageServiceImpl 注入 BookDAO,以 TransactionProxyFactoryBean 宣告式事務(PROPAGATION_REQUIRED + readOnly)<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<listener>ContextLoaderListener</listener>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param><param-name>debug</param-name><param-value>true</param-value></init-param>
</servlet>
<servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>
<allow>
<convert converter="bean" match="edu.jlu.fuliang.domain.Book"/>
<create creator="spring" javascript="BookManageService">
<param name="beanName" value="bookManageService"/>
<include method="getAllBooks"/> ... </create>
</allow>
引入 BookManageService.js、engine.js、util.js,以 dwr.util.cloneNode 動態渲染表格,dwr.engine.beginBatch()/endBatch() 批次新增/修改後自動重繪。完整 JavaScript 邏輯含載入、新增、編輯、刪除、錯誤處理。
asm-2.2.3.jar 與 Hibernate 內建 asm.jar 衝突 → 刪除 Spring 版本commons-pool 但 MyEclipse 僅引入 commons-dbcp → 手動補齊creator="spring" 需確保 Service Bean 名稱與 beanName 一致分層清晰(Domain → DAO → Service → Web/AJAX),事務集中管理,DWR 讓前端像呼叫本地 JS 一樣存取後端服務,開發效率大幅提升。