我首先想到了以下目標-使用我自己的JBoss模塊定義的某些服務來創建Web應用程序。 我準備的服務非常簡單。 我將其命名為Echo Service:
package warlock.echo;public interface EchoService {String echo(String param);}
并放入另一個名為echo-api的jar文件中。 然后,我實現了該服務:
package warlock.echo.impl;import warlock.echo.EchoService;public class DefaultEchoService implements EchoService {public String echo(String param) {return param;}}
并將實現放在新的jar文件中,該文件名為echo-module。 考慮到我的Web應用程序應該只了解服務API,而不是特定的實現,因此,我決定采用使用Java平臺創建可擴展應用程序中所述的方法-該選擇需要添加到下面的echo模塊jar特殊文件中:META-INF / services / warlock.echo.EchoService,持有服務實現的“指針”(實現類的完全限定名稱)。
此時,我檢索并解壓縮了JBoss Application Server 7 ,進入解壓縮的JBoss,然后進入modules目錄。 在此目錄中,我添加了以下結構:
上面提到了這里可見的兩個jar文件,module.xml文件是我的JBoss Module的定義–名為'warlock.echo',具有以下內容:
<?xml version="1.0" encoding="UTF-8"?><module xmlns="urn:jboss:module:1.0" name="warlock.echo"><resources><resource-root path="echo-module-1.0.0-SNAPSHOT.jar" /><resource-root path="echo-api-1.0.0-SNAPSHOT.jar" /></resources></module>
完成JBoss Module定義后,我準備了一個簡單的基于Spring Framework的應用程序(僅在項目編譯期間使用echo-api jar,而根本不使用echo-模塊jar)僅使用一個Controller:
package warlock;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import warlock.echo.EchoService;@Controller
@RequestMapping("/echo.html")
public class EchoController {@Autowiredprivate EchoService service;@RequestMapping(method = RequestMethod.GET)@ResponseBodypublic String handleGet() {return service.echo("It workzzzzz!");}
}
如您所見,Controller將某些字符串的Echo Service調用的結果作為響應主體返回。 現在到最重要的部分– Web應用程序中的Echo服務定義:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">...<bean class="org.springframework.beans.factory.serviceloader.ServiceFactoryBean"><property name="serviceType" value="warlock.echo.EchoService" /></bean>...</beans>
我知道,有一件事困擾您:) –如果我們不向Web應用程序添加echo-api和echo-module jar,那么如何找到Echo Service實現?
好吧,這就是美麗本身;)–我們只需要再做一件事– WEB-INF / jboss-deployment-structure.xml文件:
<jboss-deployment-structure><deployment><dependencies><module name="warlock.echo" services="export" /></dependencies></deployment>
</jboss-deployment-structure>
這樣,我們告訴JBoss,此應用程序取決于'warlock.echo'模塊和此模塊中定義的服務。 剩下的就是純JBoss Module的魔術了;)
甜點講座:
- 帶有JBoss模塊的模塊化Java
- JBoss模塊示例
參考:來自JCG合作伙伴 Warlock的基于JBoss Modules的模塊化Web應用程序 ,位于“ Warlock's Thoughts”博客中 。
相關文章 :
- OSGi將Maven與Equinox結合使用
- 真正的模塊化Web應用程序:為什么沒有開發標準?
- Java Code Geeks Andygene Web原型
- Java最佳實踐系列
- Java教程和Android教程列表
翻譯自: https://www.javacodegeeks.com/2011/09/jboss-modules-example-modular-web.html