jboss 发布web
我首先想到了以下目标–使用我自己的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-module 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模块示例
参考: “ Warlock的想法”博客中的 JCG合作伙伴 Warlock的基于JBoss Modules的模块化Web应用程序 。
相关文章 :
- OSGi将Maven与Equinox结合使用
- 真正的模块化Web应用程序:为什么没有开发标准?
- Java Code Geeks Andygene Web原型
- Java最佳实践系列
- Java教程和Android教程列表
翻译自: https://www.javacodegeeks.com/2011/09/jboss-modules-example-modular-web.html
jboss 发布web