自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 ReentrantReadWriteLock中文Javadoc及部分代码解读

package java.util.concurrent.locks;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadW...

2019-04-19 08:00:35 272

原创 记无法访问某一个网站,但可以访问其他网站的解决办法

问题台式电脑,windows系统,chrome浏览器不知道从哪一天起,突然无法访问tools.ietf.org网站。您正在尝试访问的计算机或设备可用,但不支持您正尝试执行的操作。这可能是设备存在配置问题或受到限制。 原因经过网络搜索,大部分人认为是DNS问题。通过ping命令发现,域名tools.ietf.org被解析为回环地址127.0.0.1解决首先在htt...

2019-01-17 00:50:38 15267 1

原创 个税起征点5000的个税计算程序(Scala语言编写)

object computeTax { def main(args:Array[String]) { if ( args.length == 0 ) positive(10000.0) else positive(args(0).toDouble) } def positive(salary:...

2018-09-01 09:36:02 4089

翻译 Quartz配置参考

0 前言Quartz的配置通常是使用properties文件结合StdSchedulerFactory完成的。StdSchedulerFactory读取配置文件,并实例化scheduler。默认情况下,StdSchedulerFactory从当前工作目录加载“quartz.properties”文件。如果加载失败,那么就会尝试加载org/quartz包下的“quartz.propert

2017-10-23 22:26:39 17934 4

翻译 Quartz快速入门指导

Quartz快速入门指导(作者 Dafydd James)欢迎来到Quartz快速入门指导。阅读本指导,你可以看到下面的详细内容:下载Quartz安装Quartz配置Quartz启动一个简单的应用在熟悉了Quartz Scheduler的基本功能之后,考虑更加高级的特性,例如企业级特性,允许作业jos和触发器trigger运行在特殊的Terracotta客户端上,而不是随机

2017-10-23 22:24:36 1345

翻译 Quartz教程 第12课 Quartz的其它特性

第12课 Quartz的其它特性插件Quartz提供了org.quartz.spi.SchedulerPlugin接口,用于插入额外的功能。Quartz自带的插件提供了各种工具,位于org.quartz.plugins包下。它们提供了诸如一旦调度器启动,就会自动调度job,日志记录job和trigger的历史,当JVM退出时确保scheduler关闭。JobFactory当

2017-10-23 22:22:46 301

翻译 Quartz教程 第11课 高级(企业级)特性

第11课 高级(企业级)特性11.1 集群当前的集群需要和JDBCJobstore (JobStoreTX或JobStoreCMT)和TerracottaJobStore一起工作。这个特定包括负载均衡和job容错(如果JobDetail的“请求恢复”标志设置为true的话)。####使能JobStoreTX或JobStoreCMT的集群,需要将“org.quartz.jobStor

2017-10-23 22:21:46 576

翻译 Quartz教程 第10课 配置、资源利用率和SchedulerFactory

第10课 配置、资源利用率和SchedulerFactoryQuartz的架构是模块化的,因此要让它运行起来,需要将多个组件整合到一起。幸运地是,已经有一些工具帮助我们实现这个。在Quartz可以工作之前,需要配置的主要组件有:ThreadPoolJobStoreDataSource(如果需要的话)Scheduler自己ThreadPool为Quartz提供了一组线程用于执

2017-10-22 20:20:34 731

翻译 Quartz教程 第9课 JobStore

第9课 JobStoreJobStore负责跟踪传递给scheduler的所有工作数据:job、trigger、calendar等等。为你的Quartz调度器实例选择一个合适的JobStore是很重要的一步。幸运地是,一旦你掌握它们之间的区别,选择是很容易的。你应该在配置文件(quartz.properties)中声明你使用的是哪一个JobStore。注意:从来不要在代码中直接使用JobS

2017-10-22 20:19:39 2507

翻译 Quartz教程 第8课 SchedulerListener

第8课 SchedulerListenerSchedulerListener非常类似于TriggerListener和JobListener,只是它接收的是来自调度器内的通知事件,而不需要关联具体的触发器或作业。与调度器相关的事件包括:添加作业任务/触发器,移除作业任务/触发器,调度器发生严重错误,调度器关闭及其它的通知等。org.quartz.SchedulerListener接口

2017-10-22 20:18:28 357

翻译 Quartz教程 第7课 TriggerListener和JobListener

第7课 TriggerListener和JobListener监听器是在调度器中基于事件机制执行操作的对象。你大概可以猜到,TriggerListener接收与触发器有关的事件,JobListener接收与作业任务有关的事件。与Trigger有关的事件包括:trigger触发、trigger触发失败(在Trigger部分谈论过了)和trigger触发完成(trigger触发的job完成

2017-10-22 20:16:53 673

翻译 Quartz教程 第6课 CronTrigger

第6课 CronTrigger当你需要一个基于日历概念的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间时,CronTrigger比SimpleTrigger更常用。使用CronTrigger,你可以这样指定触发时间表,例如“每周五的中午”,或是“每周末的上午9:30”,甚至是“一月份每周一、三、五上午9:00到10:00之间每5分钟”。虽然如此,跟SimpleTri

2017-10-22 20:14:10 325

翻译 Quartz教程 第5课 SimpleTrigger

第5课 SimpleTrigger如果你需要在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务,SimpleTrigger应该能满足你的调度需求。例如,你希望触发器在2015年1月13日上午11:23:54准时触发,或是希望在那个时间点触发,然后再重复触发5次,每隔10秒一次。有了这样的描述,你就不会对SimpleTrigger包含的参数感到奇怪:开始执行时间,结束执行时

2017-10-22 20:12:40 530

翻译 Quartz教程 第4课 Trigger详解

第4课 Trigger详解跟作业任务类似,触发器也非常容易使用,但是在你能够充分掌握Quartz之前,你需要知道并理解许多自定义的选项。前面已经提到过,有许多不同类型的触发器供你选择,适用不同的调度需求。你将会在第五课 Simple Triggers和第六课Cron Triggers学到两种常用的触发器类型。4.1 通用的Trigger属性所有类型的触发器都有TriggerKe

2017-10-22 20:11:09 657

翻译 Quartz教程 第3课 Job和JobDetail详解

第3课 Job和JobDetail详解正如你在第二课中看到的,Job接口非常容易实现,它只有一个execute方法。我们需要再学习一些知识去理解job的本质,Job接口的execute方法以及JobDetail接口。当你实现Job接口类,Quartz需要你提供job实例的各种参数,Job接口实现类中的代码才知道如何去完成指定类型Job的实际工作。这个过程是通过JobDetail类来完成

2017-10-22 20:04:30 1347

翻译 Quartz教程 第2课 Quartz API、Job和Trigger

第2课 Quartz API、Job和Trigger2.1 Quartz APIQuartz API关键接口是:Scheduler:与scheduler交互的主要API。Job:scheduler执行的组件要实现的接口。JobDetail:用于定义Job实例。Trigger:Job在这个组件定义了执行。JobBuilder:用于定义或者构建一个JobDetail实例,它只能定义

2017-10-22 20:02:48 427

翻译 Quartz教程 第1课 使用Quartz

第1课 使用Quartz在你使用scheduler之前,它需要被实例化(有谁愿意去猜呢?)。你要用SchedulerFactory实例化它。一些用户可能会将工厂实例保存到JNDI里,另一些用户可能就简单的实例化它(例如下面的例子就是这样)。一旦scheduler被实例化,它就可以被启动,处于待机模式,然后关闭。注意,一旦scheduler被关闭,它就不能再次启动。Trigger不会触发

2017-10-22 19:59:21 312

翻译 AKKA 派发器

派发器Akka MessageDispatcher是维持Akka Actor“运作”的部分,可以说它是整个机器的引擎。所有的MessageDispatcher实现也同时是一个ExecutionContext,这意味着它们可以用来执行任何代码,例如Future。默认的派发器在没有为Actor作任何配置的情况下,每个ActorSystem将有一个默认的派发器。默认派发器是可配置的,默认

2017-10-21 11:15:53 326

翻译 AKKA 邮箱Mailbox

邮箱MailboxAkka Mailbox持有发给actor的消息。通常,每一个Actor都与自己的邮箱,但是当使用BalancingPool时,所有的路由都共享一个邮箱实例。邮箱选择Actor需要的消息队列类型特定类型的actor可以用特定类型的消息队列,只要这个actor实现了参数化的接口RequiresMessageQueue。这里是一个例子:import akka.

2017-10-21 11:13:26 8265

翻译 AKKA序列化

序列化Akka有内置的序列化扩展,你可以使用内置的序列化器,也可以自定义。序列化机制可以在Akka内部用于序列化消息,也可以用于专门序列化。用法配置Akka要想知道那个序列化器用于那些消息,你需要编辑配置"akka.actor.serializers"部分,你将序列化器的名字绑定到你希望使用的akka.serialization.Serializer的实现上,就像这样:ak

2017-10-18 21:44:56 3068

翻译 集群中的分布式发布订阅

集群中的分布式发布订阅如何向一个不知道在哪个节点上运行的actor发送消息呢?如何向集群中的所有actor发送感兴趣的主题的消息?这种模式提供了一个中介actor,akka.cluster.pubsub.DistributedPubSubMediator,它管理actor引用的注册,复制所有集群节点或者特定角色节点的对等actor的条目。DistributedPubSubMed

2017-10-18 21:40:53 1049

翻译 集群用法

集群用法关于Akka集群概念的介绍请参阅集群规范。为你的工程准备集群Akka cluster是一个独立的jar文件。确保你的工程具有如下的依赖:  com.typesafe.akka  akka-cluster_2.11  2.4.16简单的集群示例下面的配置使能了集群扩展。它加入集群,actor订阅集群membership事件并记录到日志。applic

2017-10-18 21:25:49 3177

翻译 集群客户端

集群客户端不属于集群的actor系统可以通过ClusterClient与集群中的actor进行通信。当然这个客户可以是另一个集群的一部分。它只需要知道作为联络点的一个节点或多个节点的位置。它会建立一个与集群的集群接待员ClusterReceptionist的连接。它会监视与接待员的连接,如果连接故障了,它会建立一条新的连接。当查找一个新的接待员时,它会从之前的建立获取新的联络点,或者周期性的刷

2017-10-18 21:21:58 1196

翻译 集群单例

集群单例对于某些使用场景,有时候需要强制确保集群中运行的某种类型的actor只有一个。一些例子:· 负责某些集群范围的一致性决定或者跨集群系统的动作协作的单点· 外部系统的单个进入点· 单个master,多个worker· 集中化的命名服务,或者路由逻辑使用单例不应该是首选的设计。它有一些缺点,例如单点瓶颈。单点失败也需要适当的考虑,但是对于一些场景,这个特性关心的是确

2017-10-18 21:20:01 1253

翻译 Duration

Duration在整个Akka库里面都在使用Duration,因此这个概念由特殊的数据类型scala.concurrent.duration.Duration表示。这个数据类型的值代表一个有限的或者无限(Duration.Inf, Duration.MinusInf)的持续时间,或者是Duration.Undefined.有限 vs. 无限由于尝试将有限的持续时间转换为一个具体

2017-10-18 21:10:49 5482

翻译 AKKA日志

Akka中的日志不会依赖于特定的日志后端。默认情况在,日志消息会打印到标准输出STDOUT,但是你可以插入SLF4J日志记录器或者你自己的日志记录器。日志是异步执行的,以确保日志具有最小的性能开销。日志通常意味着IO和锁定,如果代码时异步执行的,那么IO和锁定就会减慢代码的操作。如何记录日志创建日志适配器,使用error、warning、info或debug方法,正如下面这个例子说明:

2017-10-18 21:04:50 2052

翻译 调度器

调度器有时候你需要让一些事情在未来发生,那么你在哪儿看它们呢?看看ActorSystem吧!在那儿你能找到scheduler方法,它返回一个akka.actor.Scheduler实例,这个实例每一个ActorSystem都是唯一的,在内部通用调度在特定时间点发生的事情。你可以调度向Actor发送消息和执行任务(函数或者Runnable)。你将获得一个Cancellable,你可以调用其c

2017-10-18 20:56:33 464

翻译 EventBus

事件总线最初构想作为一种向一组actor发送消息的方式,现在已经被推广为实现简单接口的抽象基类的集合:/** * Attempts to register the subscriber to the specified Classifier * @return true if successful and false if not (because it was already *

2017-10-18 20:15:52 523

翻译 AKKA集群规范

AKKA集群规范注意:这个文档描述了集群的设计概念。1 引言    Akka集群提供了一个具有容错能力、去中心化、基于对等的集群成员资格服务,无单点故障,无单点瓶颈。它是使用gossip协议和自动故障检测做到这点的。2 术语节点(node):集群的一个逻辑上的成员。在一个物理机器上可能有多个节点。由hostname:port:uid元组定义。集群(cluster):通过成员

2017-10-18 19:55:45 516

翻译 Gemini Blueprint参考文档 第12章 测试OSGi应用

第12章 测试OSGi应用在遵循最佳实践原则和使用Gemini Blueprint支持的情况下,你的bean类应该很容易进行单元测试,因为它们不强依赖于OSGi,你使用的少量OSGi API(例如BundleContext)是基于接口的,很容易模拟。不管你是否想要做单元测试或集成测试,Spring DM都可以减轻你的工作。12.1. OSGi模拟模拟与打桩:单元测试

2017-10-09 19:52:16 782

翻译 Gemini Blueprint参考文档 第11章 纲要服务

第11章 纲要服务OSGi服务平台服务纲要规范定义了OSGi实现可能支持的大量额外服务。Gemini Blueprint支持额外的"compendium"命名空间,以集成这些服务。按照惯例,这个命名空间的前缀使用osgix:xmlversion="1.0"encoding="UTF-8"?>beansxmlns="http://www.springframework

2017-10-09 19:50:27 357

翻译 Gemini Blueprint参考文档 第10章 与bundle一起工作

第10章 与bundle一起工作Gemini Blueprint提供了专用的schema元素用于与已存在的bundle进行交互或者安装新的bundle。虽然它不是故意要替换OSGi服务,但是bundle元素提供了一个简单的方式,即基于应用上下文的生命周期来执行bundle的动作。bundle element定义的bean类型为 org.osgi.framework.Bundle。它提供了一

2017-10-09 19:48:54 271

翻译 Gemini Blueprint参考文档 第9章 服务注册表

第9章 服务注册表OSGi服务注册表能让一个bundle通过一组Java接口向共享注册表发布对象。发布到注册表中的服务同时具有服务属性。服务注册表是OSGi的一个关键特性,它基于面向服务的范式(发布/查找/绑定),将不同的bunde解耦,提升了动态协作模型。Gemini Blueprint紧密地集成了服务注册表,允许客户端以POJO友好的方式发布、查找、绑定服务,而无需将它们和OSGi的A

2017-10-09 19:48:02 705

翻译 Gemini Blueprint参考文档 第8章 打包和部署基于Spring的OSGi应用

第8章 打包和部署基于Spring的OSGi应用传统的Spring应用要么使用单个应用上下文,要么使用一个父上下文,包含服务层、数据层和领域对象,而子Context包含web层组件。应用上下文通过聚合多个配置文件才可能完整的。当部署一个应用到OSGi时,更多的原生结构会将应用打包成一组同级bundle(peer)(应用上下文),它们之前通过服务注册表交互。独立的子系统应该打包为独立的bun

2017-10-09 19:46:04 761

翻译 Gemini Blueprint参考文档 第7章 Bundle和Application上下文

第7章 Bundle和Application上下文OSGi中部署(模块)的单元是bundle(参见OSGi服务平台核心规范,即OSGi Service Platform Core Specification第3.2节)。对于OSGi运行时来说,一个bundle会处于三个稳定的状态之一:installed、resolved、active。Bundle可能会导出服务对象到OSGi服务注册表,这

2017-10-09 19:39:58 530

翻译 Gemini Blueprint参考文档 第6章 OSGi 4.2 Blueprint Container

Eclipse Gemini Blueprint Reference Guidehttp://www.eclipse.org/gemini/blueprint/documentation/reference/1.0.1.RELEASE/html/index.html原文链接: http://www.eclipse.org/gemini/blueprint/documentation

2017-10-09 19:37:16 514

翻译 SLF4J用户手册

SLF4J用户手册    简单Java日志外观(SLF4J)提供了不同的日志框架,例如java.util.logging、logback和log4j,的外观。SLF4J允许最终用户在部署时插入期望的日志框架。请注意SLF4J意味着你的库或者应用只有一个强制的依赖,即slf4j-api-1.7.12.jar。    从1.6.0版本开始,如果在类路径没有发现绑定(的日志框架),那么SLF4J

2017-10-08 09:41:51 697

翻译 Karaf教程第10部分 –声明式服务

Karaf教程第10部分 –声明式服务这个教程演示如何使用Aries JPA2.0的声明式服务。你可以在github上找到完整的源代码github Karaf-Tutorial/tasklist-ds声明式服务声明式服务(DS)是对Blueprint的最大的扩展。它是OSGi轻量的服务注入框架。 DS允许你提供和消费OSGi服务,与配置一起工作。DS的核心部分是使用xml文

2017-10-08 09:21:30 1827

翻译 Karaf教程第9部分基于注解的blueprint和JPA

Karaf教程第9部分基于注解的blueprint和JPA本部分演示如何用模型持久层和基于CDI注解的UI创建一个小的应用。1 blueprint-maven-plugin编写blueprint xml文件是很繁琐的,太大的blueprint xml文件很难与代码修改保持同步,尤其是代码重构。所以很多人喜欢使用注解来进行声明。理想情况下,这些注解应该被标准化,这样就很清晰地定义注解的功

2017-10-08 09:20:44 1979

翻译 Karaf教程第8部分-分布式OSGi

Karaf教程第8部分-分布式OSGi     默认情况下,OSGi服务只在发布该服务的OSGI容器内可见和可访问。分布式OSGi允许在一个容器内定义服务,而在另一个容器内使用这个服务(甚至是不同的机器)。    本教程我们使用CXF的子工程DOSGi,它参考实现了OSGi Remote Service Admin 规范,OSGi 4.2企业级规范第122章)github上

2017-10-08 09:17:22 1872

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除