JBoss模块示例–模块化Web应用程序

最近,我读了为什么没有标准来开发真正的模块化Web应用程序? 由Patroklos Papapetrou撰写( 在Java Code Geeks中也有介绍 )。 受本文的启发,我决定检查实际使用的JBoss模块 。 这篇文章逐步描述了我的实验。

我首先想到了以下目标-使用我自己的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

由MySql漏洞导致电脑被入侵(特征为新增加名为piress的帐户)

今天开机&#xff0c;突然发现新增了一个名为piress的账户&#xff0c;突然间就意识到我的电脑可能被入侵了。后来发现网上很多人都遇到这样的问题。经过一步步的查证&#xff0c;原来最近MySQL爆出一个安全漏洞&#xff0c;远程登录mysql&#xff0c;尝试225次后就可以绕过身份…

multiprocessing.manager管理的对象需要加锁吗_Go: 内存管理和分配

本文基于Go1.13当不再使用内存时&#xff0c;标准库会自动执行Go的内存管理即从分配到回收。尽管开发者不需要处理它&#xff0c;但是Go的底层管理进行了很好的优化并且充满了有趣的概念。堆上的分配内存管理被设计可以在并发环境快速执行并且集成了gc。让我们从一个例子开始&a…

NYOJ 35表达式求值

表达式求值 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述 ACM队的mdd想做一个计算器&#xff0c;但是&#xff0c;他要做的不仅仅是一计算一个AB的计算器&#xff0c;他想实现随便输入一个表达式都能求出它的值的计算器&#xff0c;现在请…

Java EE6 CDI,命名组件和限定符

Java EE6的最大承诺之一就是简化了依赖注入的使用。 他们做到了&#xff0c;使用CDI 。 CDI代表Java EE的上下文和依赖注入&#xff0c;它提供了一个基础集&#xff0c;用于在企业应用程序中应用依赖注入。 在CDI之前&#xff0c;EJB 3还引入了依赖注入&#xff0c;但这有点基础…

c#获取当前目录的一些方法

【内容来源地址】&#xff1a;http://www.cnblogs.com/marcozh/archive/2008/10/19/1314667.html Assembly myAssembly Assembly.GetEntryAssembly(); string path myAssembly.Location; DirectoryInfo dr new DirectoryInfo(path); pathd…

linux里的进程简介

/sbin/init 内核启动的第一个用户级进程,引导用户空间服务 [kthreadd] 内核线程管理[migration/0] 用于进程在不同的CPU间迁移[ksoftirqd/0] 内核调度/管理第0个CPU软中断的守护进程[migration/1] 管理多核心[ksoftirqd/1] 内核调度/管…

python画画bup_Python中的高效Vector / Point类

实现高效的Vector / Point类的最佳方法是什么(甚至更好&#xff1a;是否有一个),可以在Python 2.7和3.x中使用&#xff1f;我找到了the blender-mathutils,但它们似乎只支持Python 3.x.然后是this Vector class,使用numpy,但它只是一个3D矢量.使用具有静态属性(x和y)的像kivy’…

CSDN 编程挑战——《coder的计算器》

coder的计算器 题目详情: coder现在已经上初中&#xff0c;也会用计算器实现 ,-,*,/和幂运算^了&#xff0c;但他觉得市场那些计算器太繁琐了&#xff0c;有很多他不认识的符号&#xff0c;所以他现在很想要能计算带括号的 ,-,*,/和幂运算^的混合表达式就可以了&#xff0c;你…

OpenShift Express:部署Java EE应用程序(支持AS7)

在过去的几年中&#xff0c;我越来越听到有关“云”服务的信息。 最初&#xff0c;我并不是很想尝试一下。 但是几个月后&#xff08;一年&#xff1f;&#xff09;&#xff0c;我决定看看这是怎么回事。 我从事Java EE开发已经超过7年了&#xff0c;所以我决定看看将Java EE应…

07 总结ProgressDialog 异步任务

1,ProgressDialog> //使用对象 设置标题 progressDialog.setTitle("标题"); //设置图标 progressDialog.setIcon(R.drawable.ic_launcher); //设置展示的内容 progressDialog.setMessage(&q…

python函数封装计算n运算_在Python里面怎么可以运算出999999999**999999999,求思路?...

>>> 999999999 * math.log(999999999, 2) / 8 / 1024 ** 33.480509950621777所以这个数字本身就差不多需要3.5GB内存&#xff0c;考虑到计算过程中需要存储临时结果&#xff0c;还需要翻个两三倍吧而Python中的long可以到多少呢&#xff1a;#define MAX_LONG_DIGITS \…

C++中const关键字的使用总结

const是不变的意思&#xff0c;在C程序中&#xff0c;经常用const来限制对一个对象的操作: 1.1 const变量 例如&#xff1a; const int n3; 则这个变量的值不能改变&#xff0c;即不能对变量赋值。 1.2 const参数 出现在函数参数中的const表示在函数体中不能对这个参数做修改…

php封装redis负载均衡类

$array array( master > array( "redis://127.0.0.1:6379?timeout1", ), slave > array( "redis://127.0.0.1:6479?timeout1", "redis://127.0.0.1:6579?timeout1", ) ); $redis R…

我今天对JavaFX的了解

如果您没有听说过&#xff0c;JavaFX 2是Java的新Desktop / web / client框架。 自JavaFX 1以来&#xff0c;它已经进行了相当大的改动&#xff08;坦率地说&#xff0c;效果并不那么令人印象深刻&#xff09;。 自定义脚本语言已经淘汰了&#xff0c;您可以使用标准Java和基于…

怎么解决xp系统不能安装NET Framework4.0?

.net 4.0安装不上解决方法&#xff1a; 引用 9 楼 MoreQuestion 的回复: 全部都不行&#xff01;就是用360软件管家安装那个就可以了。用了楼主的方法&#xff0c;果然可行啊 1.先安装wic。 2.用360安装.net40 本帖最后由 不懂 于 2014-6-6 00:56 编辑Windows Server 2003 如何…

C++内联(inline)函数

内联函数 内联函数是一种特殊类型的函数&#xff0c;内联函数在定义或声明时前面加上“inline”关键字。比如&#xff1a; inline int max(int a,int b) { return (a>b)?a:b; } 内联&#xff08;inline&#xff09;是内联扩展&#xff08;inline expansion&#xff09;的简…

我的python学习笔记全集_记录我的Python学习笔记

不想再像以前那样&#xff0c;什么都从头开始学习语法、总结语法&#xff0c;这样反而会过分纠结于语法&#xff0c;耽误了开发&#xff0c;毕竟语言的主要属性是工具&#xff0c;次要的属性是语言本身。所以还是先熟练使用语言去进行开发&#xff0c;等足够熟悉了&#xff0c;…

HDU 5794:A Simple Chess(Lucas + DP)

题目链接&#xff1a;http://acm.split.hdu.edu.cn/showproblem.php?pid5794 题意&#xff1a;让一个棋子从&#xff08;1,1&#xff09;走到&#xff08;n&#xff0c;m&#xff09;&#xff0c;要求像马一样走日字型并只能往右下角走。里面还有r个障碍点不能经过或者到达&am…

php源码分析之PHPAPI宏的作用

在PHP源码中&#xff0c;我们经常会看到很多函数前面有个PHPAPI&#xff0c;但这是什么呢&#xff1f; 于是我在php源码/main/php.h中找到了它的定义 #ifdef PHP_WIN32 # include "tsrm_win32.h" # include "win95nt.h" # ifdef PHP_EXPORTS # …

15分钟内开始使用Amazon Web Services和全自动资源调配

在等待一个新项目时&#xff0c;我想学习一些有用的东西。 而且由于在许多项目中我们需要评估和测试正在开发的应用程序的性能&#xff0c;而很少有足够的硬件来生成实际负载&#xff0c;因此我决定学习更多有关按需在云中按需配置虚拟机的知识&#xff0c;即Amazon Web Servic…