WildFly Swarm:使用Java EE构建微服务

“完美无缺,不是在没有其他可添加的东西时,而是在没有其他东西要带走时实现的” Antoine de Saint-Exupery

法国作家安托万·德·圣艾修伯里 ( Antoine de Saint-Exupery )的这句话是为了证明通常少花钱多。 对于建筑师,艺术家,设计师,作家,跑步者,软件开发人员或任何其他专业而言,都是如此。 简洁,极简主义,减少工作量总有很长的路要走,并且相对于肿的事物有很多优点。

什么是WildFly Swarm?

WildFly是一款轻巧,灵活,功能丰富且符合Java EE 7的应用程序服务器。 WildFly 9甚至引入了仅27MB的Servlet发行版 。 这些非常适合您的企业和Web应用程序。

WildFly Swarm将缺口提高了一点。 从公告中 :

WildFly Swarm是一个新的sidecar项目,支持WildFly 9.x,以实现对WildFly AS的解构并将其与应用程序一起粘贴回去,以创建一个自包含的可执行jar。 苍蝇群

Java EE应用程序的典型应用程序开发模型是创建EAR或WAR归档文件并将其部署在应用程序服务器中。 所有依赖项(例如Java EE实现)都打包在应用程序服务器中,并提供应用程序类所需的功能。 可以部署多个档案,它们都共享相同的库。 这是一个很好理解的模型,并且已在过去几年中使用。

WildFly Swarm将表旋转到它创建“胖罐”的地方,该胖罐将所有依赖项打包在JAR文件中。 这包括WildFly的极简版本,任何必需的依赖关系,以及应用程序代码本身。 该应用程序可以简单地使用java -jar运行。

每个胖子罐可能都是微服务,然后可以独立升级,替换或扩展。 每个胖罐通常会遵循单一责任原则,因此只会打包所需的依赖项。 每个JAR都可以使用多语言持久性,并且仅使用所需的持久性机制。

给我看看代码!

通过添加Maven依赖项和插件,可以将Java EE应用程序打包为WildFly Swarm胖子罐。 github.com/arun-gupta/wildfly-samples/tree/master/swarm上提供了一个简单的JAX-RS示例的完整源代码。

WildFly Swarm Maven依赖关系

pom.xml添加以下Maven依赖项:

<dependency><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-jaxrs</artifactId><version>${version.wildfly-swarm}</version><scope>provided</scope>
</dependency>

WildFly Swarm Maven插件

pom.xml添加以下Maven插件:

<plugin><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-plugin</artifactId><version>${version.wildfly-swarm}</version><executions><execution><phase>package</phase><goals><goal>create</goal></goals></execution></executions>
</plugin>

创建WildFly Swarm胖子罐

通过调用标准Maven目标,可以轻松创建胖子罐:

maven package

这将使用通常的Maven约定生成一个JAR文件,并在末尾附加-swarm 。 在我们的示例中生成的WAR文件名是swarm-1.0-SNAPSHOT-swarm.jar

生成的WAR文件约为30MB,具有134个JAR(全部位于m2repo目录中)和211个类。 该应用程序代码捆绑在app/swarm-1.0-SNAPSHOT.war

运行WildFly Swarm胖子罐

此jar可以运行为:

swarm> java -jar target/swarm-1.0-SNAPSHOT-swarm.jar 
12:27:10,622 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.4.Final
12:27:10,739 INFO  [org.jboss.as] (MSC service thread 1-6) WFLYSRV0049: WildFly Core 1.0.0.CR1 "Kenny" starting
2015-05-06 12:27:11,185 INFO  [org.jboss.as.security] (ServerService Thread Pool -- 11) WFLYSEC0002: Activating Security Subsystem
2015-05-06 12:27:11,189 INFO  [org.jboss.as.security] (MSC service thread 1-10) WFLYSEC0001: Current PicketBox version=4.9.0.Beta2
2015-05-06 12:27:11,194 INFO  [org.wildfly.extension.io] (ServerService Thread Pool -- 13) WFLYIO001: Worker 'default' has auto-configured to 16 core threads with 128 task threads based on your 8 available processors
2015-05-06 12:27:11,199 INFO  [org.jboss.as.naming] (ServerService Thread Pool -- 12) WFLYNAM0001: Activating Naming Subsystem
2015-05-06 12:27:11,246 INFO  [org.jboss.as.naming] (MSC service thread 1-12) WFLYNAM0003: Starting Naming Service
2015-05-06 12:27:11,319 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-8) WFLYUT0003: Undertow 1.2.4.Final starting
2015-05-06 12:27:11,319 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 14) WFLYUT0003: Undertow 1.2.4.Final starting
2015-05-06 12:27:11,337 INFO  [org.xnio] (MSC service thread 1-7) XNIO version 3.3.1.Final
2015-05-06 12:27:11,343 INFO  [org.xnio.nio] (MSC service thread 1-7) XNIO NIO Implementation Version 3.3.1.Final
2015-05-06 12:27:11,369 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-13) WFLYUT0012: Started server default-server.
2015-05-06 12:27:11,409 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-8) WFLYUT0006: Undertow HTTP listener default listening on /127.0.0.1:8080
2015-05-06 12:27:11,543 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Core 1.0.0.CR1 "Kenny" started in 855ms - Started 64 of 70 services (13 services are lazy, passive or on-demand)
2015-05-06 12:27:11,570 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) WFLYSRV0027: Starting deployment of "swarm-1.0-SNAPSHOT.war" (runtime-name: "swarm-1.0-SNAPSHOT.war")
2015-05-06 12:27:11,724 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-1) WFLYUT0018: Host default-host starting
2015-05-06 12:27:11,906 INFO  [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-14) Deploying javax.ws.rs.core.Application: class org.wildfly.samples.swarm.MyApplication
2015-05-06 12:27:11,923 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-14) WFLYUT0021: Registered web context: /
2015-05-06 12:27:11,944 INFO  [org.jboss.as.server] (main) WFLYSRV0010: Deployed "swarm-1.0-SNAPSHOT.war" (runtime-name : "swarm-1.0-SNAPSHOT.war")

响应可以验证为:

target> curl -v http://127.0.0.1:8080/resources/resource
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /resources/resource HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 127.0.0.1:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: application/octet-stream
< Content-Length: 12
< Date: Wed, 06 May 2015 19:29:10 GMT
< 
* Connection #0 to host 127.0.0.1 left intact
hello swarm!

WildFly Swarm Release博客引用了许多有关Servlet的博客, 带有ShrinkWrap的JAX-RS , 通过Deployment的数据源 , Messaging和JAX-RS等等。

WildFly Swarm下一步

该版本仅为1.0.0.Alpha1版本,因此请随意尝试示例并通过提出问题给我们提供反馈。

您拥有所有WildFly子系统的功能,甚至可以创建可嵌入的Java EE容器,如发行博客中所示:

public class Main {public static void main(String[] args) throws Exception {Container container = new Container();container.subsystem(new MessagingFraction().server(new MessagingServer().enableInVmConnector().topic("my-topic").queue("my-queue")));// Start the containercontainer.start();JaxRsDeployment appDeployment = new JaxRsDeployment();appDeployment.addResource(MyResource.class);// Deploy your JAX-RS appcontainer.deploy(appDeployment);// Create an MSC deploymentServiceDeployment deployment = new ServiceDeployment();deployment.addService(new MyService("/jms/topic/my-topic" ) );// Deploy the servicescontainer.deploy( deployment );}
}

随后的博客将展示如何使用WildFly Swarm轻松创建微服务。

WildFly Swarm保持联系

您可以通过WildFly HipChat会议室, Twitter上的@wildflyswarm或GitHub Issues来跟上该项目。

翻译自: https://www.javacodegeeks.com/2015/05/wildfly-swarm-building-microservices-with-java-ee.html

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

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

相关文章

python编程头文件_python头文件的编程风格

python头文件的编程风格发布时间&#xff1a;2020-09-03 10:23:25来源&#xff1a;亿速云阅读&#xff1a;96作者&#xff1a;小新小编给大家分享一下python头文件的编程风格&#xff0c;希望大家阅读完这篇文章后大所收获&#xff0c;下面让我们一起去探讨吧&#xff01;本文主…

《Code:The Hidden Language Of Computer Hardware and Software》 ——笔记

怎么由逻辑电路实现二进制的加法 首先二进制的加法可以拆解为两个步骤&#xff1a;加与进位。 加法01001110进位01000101加这一步骤可以由异或门来完成&#xff0c;进位这一步骤则可以用与门来完成。 但是由这两个逻辑门只能组成一个半加器&#xff0c;输入2个值&#xff0c;输…

关于一个域名下如何更换网站

说明&#xff1a;建立在有域名、服务器、两个网站的基础之上。 背景&#xff1a; 原来的网站采用的是微企点建站的方式&#xff0c;对于那种拖拉拽不懂编程的人用的&#xff0c;现在自己开发一个更为强大的功能性网站&#xff0c;想把这个新网站替换掉原来的网站&#xff0c;…

图像存在hadoop比在mysql中_比较SQL数据库和Hadoop

鉴于Hadoop是一个数据处理框架&#xff0c;而在当前大多数应用中数据处理的主力是标准的关系数据库&#xff0c;那又是什么使得Hadoop更具优势呢&#xff1f;其中一个原因是&#xff0c;SQL(结构化查询语言)是针对结构化数据设计的&#xff0c;而Hadoop最初的许多应用针对的是文…

搭建xss-platform平台

这篇更详细&#xff0c;对蓝莲花的XSS有更详细的说明 https://blog.csdn.net/weixin_50464560/article/details/115360092 https://bbs.secgeeker.net/thread-1519-1-1.html 搭建xss-platform平台 一直想搭在公网搭建自己的XSS平台用来验证XSS漏洞&#xff0c;使用别人的平台…

如何获取电脑网站(手机网站)支付宝支付的配置信息(appid、商户私钥、支付宝公钥)

需求:想在网站接入支付宝支付。现在的网站基本分为PC端和手机端。 明确工作目标:appid、商户私钥、支付宝公钥以及回调地址。 电脑PC端支付宝支付获取配置信息步骤如下: 1.登录支付宝开放平台 (传送门),使用企业认证的支付宝账户或者个人认证的支付宝账号扫码登录。…

get--ip

public string GetIp() { Regex reg1 new Regex("(\\d).(\\d).(\\d).(\\d)"); return reg1.Replace(GetRealIp, "*.$2.$3.$4"); } /// <summary> /// 获取用户的IP地址 /// </summary> public string GetRealIp…

9针串口定义测试方法_一些定义–测试技术9

9针串口定义测试方法我认为我即将结束有关测试技术的博客系列&#xff0c;感觉好像已经过去了。 对我来说更清楚的一件事是&#xff0c;测试方法仍处于起步阶段&#xff0c;因此是开发人员之间争执或讨论的明确来源&#xff0c;这是一件好事。 我怀疑我们正处于职业发展史上的某…

ubuntu下c 访问mysql_Ubuntu下用C语言访问MySQL数据库

在Ubuntu下费了好长时间终于让C操作MySQL成功了&#xff0c;在此把方法记下来&#xff0c;留着以后用。先安装MySQL 代码: sudo apt-get install mysql在Ubuntu下费了好长时间终于让C操作MySQL成功了&#xff0c;在此把方法记下来&#xff0c;留着以后用。先安装MySQL代码:sudo…

HTML5新增的主体结构元素

article元素section元素nav元素aside元素time元素与微格式pubdate属性 1.article元素 代码片段: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>HTML学习计划</title> </head> …

在Eclipse中使用JUnit4进行单元测试(图文教程一)

在Eclipse中使用JUnit4进行单元测试 单元测试&#xff0c;JUnit4。 这两个有什么关系呢&#xff1f;这就好比&#xff08;草&#xff09;单元测试和&#xff08;割草机&#xff09;。用这个JUnit4工具去辅助我们进行测试。其实不理解这个也没关系&#xff0c;听多了见多了用多了…

Java 9和Project Jigsaw如何破坏您的代码

Java 9迫在眉睫&#xff0c;它将带有完整的Project Jigsaw 。 在我从OpenJFX邮件列表的最近讨论中得知它可能会破坏现有代码之前&#xff0c;我并没有对此给予太多关注。 这对于Java非常不寻常&#xff0c;因此引起了我的兴趣。 我阅读了该项目的JEP和一些相关文章&#xff0c…

php一句话后门学习(含免杀)

php一句话后门 开发很久的可利用函数 eval和assert php任意代码执行的一句话后门&#xff0c;我们喜欢用的是传统的eval&#xff0c;php5&#xff0c;7通用。 <?php eval($_POST[a]) ?>但由于eval不能拆分&#xff0c;早期也有人喜欢用assert&#xff0c;这样通过编…

mysql 表结构 增删改查_mysql学习【第3篇】:数据库之增删改查操作

注意的几点&#xff1a;1.如果你在cmd中书命令的时候&#xff0c;输入错了就用\c跳出2.\s查看配置信息一、操作文件夹(库)增&#xff1a;create database db1 charset utf8;删&#xff1a;drop database db1;改&#xff1a;alter database db1 charset gbk;查&#xff1a;show …

HTML5的非主体结构元素(header、footer、hgroup、assress)

header元素footer元素hgroup元素address元素网页编排规则 1.header元素 代码演示: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>header元素</title> </head> <body> &l…

Oracle 基础 —SQL语句优化的途径

一&#xff1a;SQL语句的优化途径 1.选择合适的Oracle优化器 (1).RBO 基于规则进行优化的优化器 --Oracle 10G 后被抛掉 (2).CBO基于成本(CPU 和 内存的占用率)优化的优化器 --优化器使用的模式根据目标而定 CBO 的优化模式&#xff1a; Rule:基于规则 Choose:默认&#xff…

DVWA通关教程(上)

简介&#xff1a; DVWA是一款基于PHP和mysql开发的web靶场练习平台&#xff0c;集成了常见的web漏洞如sql注入,xss&#xff0c;密码破解等常见漏洞。本教程将以DVWA为例&#xff0c;演示常见的web漏洞的利用和攻击。 登录创建数据库&#xff08;账号为admin&#xff0c;密码为…

HTML5表单新增元素与属性(form、formaction、formmethod、formenctype、formtarget、autofous、required、labels)

表单内元素的form属性表单内元素的formaction属性​​​​​​​表单内元素的formmethod属性​​​​​​​表单内元素的formenctype属性​​​​​​​表单内元素的formtarget属性​​​​​​​表单内元素的autofous属性​​​​​​​表单内元素的required属性​​​​​​​…

python getostime_Python os.getrandom()用法及代码示例

Python中的OS模块提供了与操作系统进行交互的功能。操作系统属于Python的标准实用程序模块。该模块提供了使用依赖于操作系统的功能的便携式方法。os.getrandom()方法用于生成适合加密使用的大小随机字节的字符串&#xff0c;或者可以说此方法生成包含随机字符的字符串。它也可…

2048

最近用WPF写了款2048的小游戏&#xff0c;最早接触这款游戏是在手游上&#xff0c;觉得蛮好的&#xff0c;于是就用WPF实现了下&#xff0c;界面运行流畅&#xff0c;操作便捷&#xff0c;虽说程序在可玩度上还稍有欠缺&#xff0c;不过这也是WPF在游戏开发中的一个新篇章 程序…