一、域模型
先從最底層開始,把域模型建立起來,創建一個Plug-in project -
domain里面的logic,引用了dao,dao也引用了domain,會導致一個錯誤,于是將logic做為一個獨立的bundle,就稱為域邏輯吧
二、域邏輯
創建一個Plug-in project - org.phrancol.osgi.jpetstore.domain.logic,不創建Activator,創建一個同名package,將jpetstore\src\org\springframework\samples\jpetstore\domain\logic里面的java文件copy進去,在MANIFEST.MF里面把依賴包導入
三、DAO
該做dao部分了,創建一個 Plug-in project - org.phrancol.osgi.jpetstore.dao 并創建一個同名package,將jpetstore\src\org\springframework\samples\jpetstore\dao里面的東西全部copy進去,在MANIFEST.MF里面導入依賴包(有一些包需要導入成bundle,例如 spring-jdbc,spring-ibatis),啟動看看,發現spring-ibatis和persistence沒有啟動,手動啟動spring-ibatis,發現缺少ibatis,于是 New-> Other -> Plug-in from existing JAR archives ,導入ibatis,再啟動,發現少 javax.transaction,于是用相同方法導入。
四、配置文件
關于spring的配置文件,只有3個
petstore-servlet.xml - 用于mvc的,定義dispatch bean
applicationContext.xml - 用于域邏輯的
dataAccessContext-local.xml - 用于DAO的,定義了DataSource
(一)dataAccessContext-local.xml
1,將 jdbc.properties和sql-map-config.xml拷貝到META-INF目錄里,sql-map-config.xml里面的資源路徑可能需要修改一下,maps里面的模型的class屬性也需要改一下
2,在META-INF目錄中創建一個目錄spring,將dataAccessContext-local.xml拷貝進去,將applicationContext.xml里面的加載jdbc.properties的bean移植過來,放在DataSource的上面







再把dataAccessContext-local.xml里面的dao-bean->class屬性值修改一下,再把sqlMapClient的configLocation的值修改成META-INF/sql-map-config.xml,例如















(二)applicationContext.xml
1,在org.phrancol.osgi.jpetstore.domain.logic的META-INF目錄中創建一個目錄spring,將applicationContext.xml拷貝進去,并改名為 logic-context.xml,刪除propertyConfigurer這個bean,因為它已經被移到了dataAccessContext-local.xml里面,將里面的bean的class屬性修改一下,啟動,發現缺少org.aspectj,導入一個,再啟動,報錯

2,org.phrancol.osgi.jpetstore.dao/META-INF/spring目錄中創建一個spring配置文件dataAccessContext-local-osgi.xml,使用<osgi:service>將accountDao和其他被引用的DAO注冊成為OSGI Service




























3,在org.phrancol.osgi.jpetstore.domain.logic/META-INF/spring 也創建一個spring配置文件logic-context-osgi.xml,使用<osgi:reference>獲取服務


































(三)petstore-servlet.xml
最后到spring-mvc的配置文件了,在前面已經將這個配置文件拷貝到org.phrancol.osgi.jpetstore.springmvc/META-INF/dispatcher目錄下了,并且做了一些修改,讓DispatcherServlet加載用以顯示首頁
1,新建一個package org.phrancol.osgi.jpetstore.springmvc.controller,將jpetstore\src\org\springframework\samples\jpetstore\web\spring里面的java文件拷貝進去,將依賴包導入,然后在petstore-servlet.xml里面加上一個dispatch-bean,







2,看一段代碼 org.springframework.osgi.context.support.BundleContextAwareProcessor













3,再來看看這個接口org.springframework.osgi.context.BundleContextAware

4,創建一個 Plug-in project org.phrancol.osgi.jpetstore.util,并創建同名package,新建一個Interface HttpServiceRegister 用于注冊Servlet或Resource,這個過程在方法 public void serviceRegister(BundleContext context);里進行,新建一個Class BundleServiceRegister












5,生成一個類org.phrancol.osgi.jpetstore.springmvc.SpringmvcHttpServiceRegister implements HttpServiceRegister
將Activator.start方法里的內容拷貝到SpringmvcHttpServiceRegister.serviceRegister方法里,刪除Activator(MANIFEST.MF)
6,在org.phrancol.osgi.jpetstore.springmvc/META-INF/下建立一個目錄spring,從別的地方copy一個bean配置文件過來,改名為logic-context.xml,加入如下配置








在logic-context-osgi.xml里面加上
















