領先一步
VMware 提供培訓和認證,以加速您的進度。
瞭解更多已更新:新增了 Git 的子模組指令。
我過去曾談論過提供對真正模組化應用程式的支援,我很高興地宣布,您現在可以存取 SpringSource Slices 的早期原型程式碼。
您可以從我們的 Git 儲存庫存取原始碼
git clone git://git.springsource.org/slices/slices.git
git submodule init
git submodule update
要建置 Slices 的封裝版本,只需從 build-slices 目錄執行 ant clean jar package 即可
cd slices/build-slices
ant clean jar package
這將在 target/artifacts 中產生一個 zip 檔案,其中包含 Slices 子系統,然後可以將其安裝在 dm Server 2.0 之上
安裝 Slices 非常簡單,只需將新的子系統新增至 dm Server,然後更新 dmServer 的設定檔以啟動新的子系統即可。 Slices 應與任何最新的 dm Server 2.0 快照版本 一起使用。 在此,我使用的是 2.0.0.CI-R326-B274,我已經下載並解壓縮到我的桌面上
unzip target/artifacts/springsource-slices-BUILD-20090622083953.zip -d ~/Desktop/springsource-dm-server-2.0.0.CI-R326-B274
接下來,必須更新 dm Server 的 kernel.properties 組態,以包含新的 slices 子系統。 開啟您的 dm Server 安裝目錄的 config/kernel.properties 檔案,並編輯 Profile Configuration 區段以列出 slices 子系統,並為該設定檔指定一個合適的名稱(我將其稱為 slices)
#######################
# Profile Configuration
#######################
profile.name=slices
profile.subsystems= com.springsource.server.web,com.springsource.osgi.slices
profile.optionalSubsystems=
儲存更新的檔案,您就可以嘗試 Slices 範例應用程式了。
Slices 儲存庫包含 Spring 3 的 PetClinic 範例版本,當我們向 Slices 新增新功能時,我們會不斷地增強和改進它。
在使用範例之前,必須將其依賴項目新增至您的 dm Server 安裝目錄。 依賴項目列在範例的 dependencies.txt 檔案中。 將列出的每個依賴項目下載到安裝目錄的 repository/bundles/usr 目錄。 接下來,使用 -clean 啟動選項啟動 dm Server
./bin/startup.sh -clean
現在是建置和部署範例的時候了。 移至 slices/samples/slices-petclinic/com.springsource.slices.petclinic.host 目錄並執行 ant clean jar
cd samples/slices-petclinic/com.springsource.slices.petclinic.host
ant clean jar
然後可以透過將產生的 war 複製到 dm Server 的 pickup 目錄來部署 host
cp target/artifacts/com.springsource.slices.petclinic.host.war ~/Desktop/springsource-dm-server-2.0.0.CI-R326-B274/pickup/
現在應該可以從 https://127.0.0.1:8080/petclinic 存取 host
接下來,移至 slices/samples/slices-petclinic/com.springsource.slices.petclinic.appointments 目錄並執行 ant clean jar 以建置 appointments slice
cd samples/slices-petclinic/com.springsource.slices.petclinic.appointments
ant clean jar
現在可以透過將產生的 war 複製到 dm Server 的 pickup 目錄來部署 slice
cp target/artifacts/com.springsource.slices.petclinic.appointments.war ~/Desktop/springsource-dm-server-2.0.0.CI-R326-B274/pickup/
重新整理 https://127.0.0.1:8080/petclinic,它現在將反映 appointments slice 的存在,並顯示一個新的 Appointments 連結
您可以根據需要,現在從 pickup 目錄中移除 appointments war 以查看 slice 再次消失。
使用 Slices,您可以從多個 OSGi 捆綁包建構 Web 應用程式,每個捆綁包都為應用程式 URL 空間的不同子部分提供內容。 Slices 應用程式以父/子結構排列,每個應用程式最多有一個父節點(稱為 host),以及零個或多個子節點(稱為 slices)。 我們正在開發一個簡單的 Slices 範例,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>host-filter</filter-name>
<filter-class>com.springsource.osgi.slices.core.SliceHostFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>host-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Enables clean URLs with JSP views e.g. /welcome instead of /app/welcome -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Handles all requests into the application -->
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/*.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Maps all /app requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
<!-- Serves static resource content from the webapp root & .jar files such as spring-js.jar -->
<servlet>
<servlet-name>Resources Servlet</servlet-name>
<servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<!-- Map all /resources requests to the Resource Servlet for handling -->
<servlet-mapping>
<servlet-name>Resources Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
</web-app>
如您所見,host 可以有任何正常的 servlet 和篩選器對應,但它需要 SliceHostFilter 才能將請求路由到其 slices。
slice 是一個看起來和功能都像標準 RFC66 webbundle 的捆綁包,唯一的區別是它沒有自己的 ServletContext。 相反,slice 在其 host 的 ServletContext 下運行。
Slices 的主要設計目標之一是確保 slice 開發與標準 Web 應用程式開發盡可能相似。 為此,您可以完全按照建立任何應用程式的 Web 內容相同的方式,使用 web.xml 建立 slice Web 內容。 這是 petclinic.appointments 捆綁包中的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Handles all requests into the application -->
<servlet>
<servlet-name>appointments</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Maps all /app requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>appointments</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
appointments slice 只是委派給 Spring DispatcherServlet。 Spring MVC 可以在 slice 中像往常一樣使用。
slice 可以透過簡單地引用 slice 本身不存在的資源名稱來存取 host 捆綁包中的資源。 如果 slice 想要存取 host 中的資源,即使它本身具有類似名稱的資源,也可以使用 host: 字首來執行此操作
ServletContext context = getServletContext();
context.getResource("host:/WEB-INF/some.config.xml");
slice 需要定義它想要附加到的 host,並使用 Slice-Host 資訊清單標頭來執行此操作。 Slice-ContextPath 標頭定義 slice 處理的 URL 部分
Bundle-SymbolicName: petclininc.appointments
Slice-Host: petclinic.host;version="[1.0, 2.0)"
Slice-ContextPath: /appointments
host 可以在沒有任何相應的 slices 附加的情況下運行。 當將與 host 相符的 Slice 安裝到伺服器中時,該 slice 會 附加 到 host。 此时,host 的 URL 部分中与新附加的 slice 的 Slice-ContextPath 相符的子部分会路由到该 slice。
卸載 slice 時,曾經路由到 slice 的 URL 空間部分現在直接路由到 host。 這樣,您可以在 host 中建立內容以處理遺失的 slices。
在撰寫本文時,Slices 程式碼庫支援 Slice 中的以下功能
我們正在為 Slices 開發許多有趣的新功能,包括
如果您有任何功能建議或發現錯誤,請隨時 在我們的 JIRA 上提出問題。
如果您想密切關注進度,您可以關注我們的 Git 儲存庫和我們的 #dmserver Twitter 標籤。