通过MicroProfile上下文传播增强了CDI上下文和隔板

当将CDI与异步执行方法(例如ManagedExecutorService ,传统上不可能访问在原始线程中处于活动状态的所有CDI范围。 MicroProfile Context Propagation可以定义线程执行上下文并将其传递到完成阶段,尽管我们的代码是异步执行的,但它们仍可以访问各种CDI上下文。 另外,Context Propagation允许创建托管的执行器服务,该服务可以注入到我们的bean中并在其中使用,例如实现舱壁。

增强的CDI上下文

让我们创建并使用在处理请求期间使用的请求范围的Bean。 使用普通的CDI,我们将无法在异步执行中访问和查找bean。

看下面的代码:

 @ApplicationScoped  @Path ( "contexts/example" )  public class ThreadContextExampleResource { @Inject ExampleStore exampleStore; @Inject ThreadContext threadContext; @Resource ManagedExecutorService mes; @Inject Notifier notifier; @PUT public void setExample(String example) { exampleStore.setExample(example); mes.execute(threadContext.contextualRunnable(notifier::notifyAbout)); }  } 
 @RequestScoped  public class ExampleStore { private String example; public String getExample() { return example; } public void setExample(String example) { this .example = example; }  } 
 public class Notifier { @Inject ExampleStore exampleStore; public void notifyAbout() { System.out.println( "New example: " + exampleStore.getExample()); }  } 

如果客户端PUTcontexts/example资源提供了某些内容,则该方法将使用ManagedExecutorService更新请求范围的ExampleStore bean并异步执行通知。 为了使异步执行能够查找请求范围的存储,我们使用ThreadContext将可运行对象与从原始线程捕获的上下文进行包装。 这样可以确保执行的可运行对象可以使用相应的上下文。

我们必须根据要传播的上下文类型(例如CDItransactionsecurity )配置并产生ThreadContext

 public class ThreadContextProducer { @Produces ThreadContext threadContext() { return ThreadContext.builder() .propagated(ThreadContext.ALL_REMAINING) .build(); }  } 

本示例将所有上下文类型传播到包装的执行中。 然后,我们的bean注入并使用产生的ThreadContext

使用执行程序定义舱壁

MicroProfile Context Propagation允许创建和配置ManagedExecutor ,这是类似于ManagedExecutorService的容器管理的执行器服务。 我们可以通过编程方式创建ManagedExecutor ,对允许的并发设置约束,并定义上下文传播。

通过使用专用执行器来实现特定功能,我们可以实现隔板模式,类似于使用MicroProfile Fault Tolerance或Porcupine 。

让我们定义以下异步JAX-RS资源:

 @ApplicationScoped  @Path ( "bulkheads" )  public class BulkheadExampleResource { @Inject ExampleStore exampleStore; @Inject Notifier notifier; @Inject ManagedExecutor writeExecutor; @Inject ManagedExecutor readExecutor; @GET public CompletionStage<String> example() { return readExecutor.supplyAsync(exampleStore::getExample); } @PUT public CompletionStage<Void> setExample(String example) { return writeExecutor.runAsync(() -> { exampleStore.setExample(example); writeExecutor.execute(notifier::notifyAbout); }); }  } 

我们正在注入两个专用的执行器,它们用于运行相应的功能。 执行者是使用生产者创建的:

 public class ManagedExecutorProducer { @Produces ManagedExecutor managedExecutor() { return ManagedExecutor.builder() .propagated(ThreadContext.CDI, ThreadContext.APPLICATION) .maxAsync( 4 ) .maxQueued( 4 ) .build(); } public void disposeManagedExecutor( @Disposes ManagedExecutor managedExecutor) { managedExecutor.shutdownNow(); }  } 

我们的执行者将具有四个同时执行的完成阶段和四个任务的上限。 CDI的上下文和应用程序上下文类型将传播到执行线程。

注入执行程序时,请注意注入点的范围; 这里我们使用的是应用程序范围的资源,否则我们可能会创建两个以上的执行程序,这将违反隔板模式的目的。 由于我们使用的是CDI,因此,如果应以不同的方式配置所创建的执行程序,则当然可以定义其他限定符。

您可以使用最新版本的Open Liberty试用MicroProfile Context Propagation。 我已经在GitHub上发布了一个示例存储库。

当我们在Open Liberty上运行应用程序时,MicroProfile Context Propagation执行程序将由自动调整的全局线程池提供支持。 你可以看看由自由所提供的默认线程池的指标,如图所示这里 。

更多资源

  • GitHub示例项目
  • MicroProfile上下文传播
  • 开放自由中的上下文传播支持
  • 使用Prometheus和Grafana监视开放自由

翻译自: https://www.javacodegeeks.com/2019/08/enhanced-cdi-contexts-bulkheads-microprofile-context-propagation.html

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

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

相关文章

ProtoBuff3.0.0在Ubuntu上安装

ProtoBuff3.0.0在Ubuntu上安装 最近安装ns3&#xff0c;运行别人代码&#xff0c;编译build.py时出现需要update Proto的问题&#xff0c;本来想安装最新版本&#xff0c;因为需要翻墙&#xff0c;就参考大部分博客&#xff0c;安装3.0.0版本。&#xff08;备注&#xff1a;直…

SDH与PDH的区别介绍

PDH准同步数字系列&#xff0c;1-4次群2048K、8488K、34368K、139264K&#xff0c;有美国/日本标准和欧洲标准&#xff0c;我国沿用的是欧洲标准&#xff1b;30/32路组成一个1次群&#xff1b;各个厂家产品大多互相不兼容。 SDH同步数字系列&#xff0c;网元都带PDH接口&#…

Ubuntu 系统入门

1 Ubuntu 常用文件夹处理命令 1、 cd … //返回上一层目录 cd / //返回根文件夹 2、ls 列出文件名称 3、unzip XXX 对zip 压缩包解压 4、sudo baobab 进行磁盘空间分析 5、 利用vim修改只读文件内容 ::w !sudo tee % &#xff08;注意空格&#xff09; 2 Ubuntu显示隐藏文件 …

什么是MSTP(多业务传输平台)?

Multi-Service Transfer Platform简称MSTP&#xff0c;他是基于SDH的多业务传送平台的&#xff0c;同时也实现TDM、ATM、以太网等业务的接入、处理和传送&#xff0c;提供统一网管的多业务节点。 当前通信时代随着不断增长的IP数据、话音、图像等多种业务传送需求扩展&#xf…

spring boot示例_Spring Boot上的Spring社交示例,或者我如何停止担心和喜欢自动配置...

spring boot示例对于Spring Boot 1.1.0.RC1&#xff0c;添加了自动配置和Spring Social的启动程序pom&#xff0c;这意味着我不必向pom添加一百个依赖关系&#xff0c;并且将为我处理许多毫无意义的Spring配置。 让我们来看一个例子。 我将实现一个两页的Web应用程序。 一个将…

安装虚拟机后,启动出错的解决办法

安装虚拟机后&#xff0c;启动出错&#xff0c;需要找到路径中的配置文件 使用记事本或其他应用打开 在vmci0.prensent值改为FALSE,才可以正常启动

什么是E1接口,E1的使用注意事项

欧洲的30路脉码调制PCM简称E1&#xff0c;速率是2.048Mbit/s 。 我国采用的是欧洲的E1标准。E1接口有G&#xff0e;703非平衡的75 ohm&#xff0c;平衡的120 ohm2种接口。接下来就由飞畅科技的小编来为大家详细介绍下使用E1的三种方法及注意事项&#xff0c;一起来看看吧&#…

Java序列化魔术方法及其示例使用

在上一篇文章中&#xff0c; 您需要了解有关Java序列化的所有知识 &#xff0c;我们讨论了如何通过实现Java序列化来启用类的可序列化性。 Serializable接口。 如果我们的类未实现Serializable接口&#xff0c;或者该类具有对非Serializable类的引用&#xff0c;则JVM将抛出No…

主机文件复制到Ubuntu系统中

实现这个功能&#xff0c;需要VMware Tool安装 在虚拟机选项卡中安装VMware Tool 将DVD盘中压缩包复制到home文件夹 解压后&#xff0c;进入该文件夹&#xff0c;打开终端&#xff0c;执行安装文件 安装完成后重启电脑即可 ------------------------------------ 参考链接…

光纤的熔接,光纤接续步骤小知识

做光纤工程的应该都知道&#xff0c;光纤熔接接续是光纤传输系统中工程量最大、技术要求最复杂的重要工序&#xff0c;其质量好坏直接影响光纤线路的传输质量和可靠性。进行有效的方法及正确熔接步骤极其重要的。今天就由飞畅科技的小编来为大家介绍一下光纤光缆的熔接步骤与三…

解决sudo apt-get update联网失败问题

更改源为中科院参考链接 源为清华参考链接2

ubuntu语言设置问题

ubuntu语言设置问题 参考博客ubuntu设置语言

针对新手的Java EE7和Maven项目-第2部分-为我们的应用程序定义一场简单的战争

从第一部分恢复 第1部分 我们刚刚定义了父 pom。 一种特殊的pom类型&#xff0c;它最终定义了我们的应用程序将要使用的库。 它还配置了所有用于包装我们应用程序每个模块的Maven工具。 您可以在此处 签出 -1部分示例代码。 因此&#xff0c;到目前为止&#xff0c;在将要开发…

电信级E1保护倒换设备产品介绍

1-8路E1倒换保护设备是由杭州飞畅科技有限公司自主研发生产的E1线路无损伤自动切换设备。本系列设备是本公司研制的专用超大规模集成电路的基础上开发的E1切换器。提供1-8路独立的E1倒换保护功能(816E1)&#xff0c;在默认工作方式下&#xff0c;主用E1线路出现故障时&#xff…

电脑杀毒优化问题

实测有用&#xff1a; 软件杀毒与卸载 哔哩哔哩杀毒卸载 电脑性能显卡优化 N卡优化

定制基元和DTO的(反)序列化和验证

最近&#xff0c;我们为您提供了新的HTTP框架HttpMate。 在引言文章中 &#xff0c;我们将请求和响应映射到域对象称为“最复杂的技术细节”&#xff0c;以及如何通过另一个伴侣MapMate帮助我们。 实际上&#xff0c;在将请求属性映射到您的域对象时&#xff0c;MapMate减轻了…

UBUNtu·E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁 问题解决方法

E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁 问题解决方法 参考链接1 参考链接2

电话光端机的电话业务不通问题,该怎么去检查?

我司的设备&#xff0c;电话光端机都是达到电信级别&#xff0c;通话声音是特别清晰的。如果电话光端机的电话杂音声过大可能是电话光端机的光口有误码引起的。 一般应该是光端机有误码引起的&#xff0c;产生误码的原因主要是光纤部分&#xff0c;因为一般设备一般发货前&…

java8 camel_Meet Fabric8:基于Camel和ActiveMQ的开源集成平台

java8 camel面料8 Fabric8是来自Red Hat的JBoss Fuse产品的Apache 2.0许可上游社区。 这是一个基于Apache ActiveMQ &#xff0c; Camel &#xff0c; CXF &#xff0c; Karaf &#xff0c; HawtIO等的集成平台。 它提供了自动化的配置和部署管理&#xff0c;以帮助使部署变得…

解决apt-get install E: 无法定位软件包问题

更换清华源后出现的问题 参考链接 参考链接2