精华内容
下载资源
问答
  • ejb是什么意思 在本文中,我将介绍如何使用单例EJB和Ehcache在Java EE中构建简单的参考数据缓存。 高速缓存将在给定的时间段后重置自身,并且可以通过调用REST端点或MBean方法“手动”清除。 这篇文章实际上是建立在...
    ejb是什么意思

    ejb是什么意思

    在本文中,我将介绍如何使用单例EJB和Ehcache在Java EE中构建简单的参考数据缓存。 高速缓存将在给定的时间段后重置自身,并且可以通过调用REST端点或MBean方法“手动”清除。 这篇文章实际上是建立在以前的文章中如何建立和清除与单EJB和MBean的一个参考的数据高速缓存; 唯一的不同是,我将使用Ehcache缓存,而不是将数据存储在ConcurrentHashMap<String, Object> ,并且该缓存能够通过Ehcache方式进行更新。

    1.快取

    原来这是一个只读缓存,可以从外部刷新它。 我希望将缓存作为服务的一种包装,为应用程序提供实际的参考数据–带代码的AOP样式!

    接口

    参考数据的简单界面

    @Local
    public interface ReferenceDataCache {
    
    	/**
    	 * Returns all reference data required in the application 
    	 */
    	ReferenceData getReferenceData();
     
    	/**
    	 * evict/flush all data from cache 
    	 */
    	void evictAll();
    }

    缓存功能定义了两种简单的方法:

    • getReferenceData() –缓存从所有不同来源在后台收集的参考数据
    • evictAll() –调用方法以完全清除缓存

    实作

    使用Ehcache的简单参考数据缓存实现

    @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
    @Singleton
    public class ReferenceDataCacheBean implements ReferenceDataCache {
    	
    	private static final String ALL_REFERENCE_DATA_KEY = "ALL_REFERENCE_DATA";
    	
    	private static final int CACHE_MINUTES_TO_LIVE = 100;
    	
    	private CacheManager cacheManager;
    	
    	private Cache refDataEHCache = null; 	
    	
    	@EJB
    	ReferenceDataLogic referenceDataService;	
    
    	@PostConstruct
    	public void initialize(){		
    		
    		cacheManager = CacheManager.getInstance();
    		CacheConfiguration cacheConfiguration = new CacheConfiguration("referenceDataCache", 1000);
    		cacheConfiguration.setTimeToLiveSeconds(CACHE_MINUTES_TO_LIVE * 60);
    		
    		refDataEHCache = new Cache(cacheConfiguration );
    		cacheManager.addCache(refDataEHCache);
    	}
    	
    	@Override
    	@Lock(LockType.READ)
    	public ReferenceData getReferenceData() {
    		Element element = refDataEHCache.get(ALL_REFERENCE_DATA_KEY);
    		
    		if(element != null){	
    			return (ReferenceData) element.getObjectValue();
    		} else {
    			ReferenceData referenceData = referenceDataLogic.getReferenceData();
    			
    			refDataEHCache.putIfAbsent(new Element(ALL_REFERENCE_DATA_KEY, referenceData));
    			
    			return referenceData;
    		}		
    	}
    
    	@Override
    	public void evictAll() {
    		cacheManager.clearAll();
    	}	
    	...........
    }

    注意:

    • @Singleton –可能是此类中最重要的代码行。 此注释指定在应用程序中将仅存在一个此类豆的单例。 该bean可以由多个线程同时调用。

    现在让我们将代码分解为不同的部分:

    缓存初始化

    @PostConstruct批注用于依赖注入完成后需要执行的方法,以执行任何初始化–在我们的情况下,是创建和初始化(eh)缓存。

    缓存初始化

    @PostConstruct
    	public void initialize(){		
    		
    		cacheManager = CacheManager.create();
    
    		CacheConfiguration cacheConfiguration = new CacheConfiguration("referenceDataCache", 1000);
    		cacheConfiguration.setTimeToLiveSeconds(CACHE_MINUTES_TO_LIVE * 60);
    		
    		refDataEHCache = new Cache(cacheConfiguration );
    		cacheManager.addCache(refDataEHCache);
    	}

    注意:此注释只能注释一种方法。

    Ehcache的所有用法都始于创建CacheManager ,它是Ehcache的容器,可维护其生命周期的各个方面。 我使用CacheManager.create()方法,这是一种使用默认配置创建单例CacheManager的工厂方法,如果存在,则将其返回:

    cacheManager = CacheManager.create();

    我通过提供缓存名称(“ referenceDataCache”)和内存中最大元素数( maxEntriesLocalHeap )来构建CacheConfiguration对象,然后将它们逐出(0 ==无限制),最后我进行设置自元素创建之日起,元素的默认生存时间:

    CacheConfiguration cacheConfiguration = new CacheConfiguration("referenceDataCache", 1000); cacheConfiguration.setTimeToLiveSeconds(CACHE_MINUTES_TO_LIVE * 60);

    现在,借助CacheConfiguration对象,我以编程方式创建了我的参考数据缓存,并将其添加到CacheManager中。 请注意,只有将缓存添加到CacheManager后,它们才可用:

    refDataEHCache = new Cache(cacheConfiguration ); cacheManager.addCache(refDataEHCache);

    注意:您还可以以声明的方式创建缓存:创建CacheManager时,它将创建在配置中找到的缓存。 您可以通过指定配置文件的路径,类路径中的配置,InputStream中的配置或类路径中的默认ehcache.xml文件来创建CacheManager。 查看Ehcache代码示例以获取更多信息。

    从缓存中获取数据

    @Override
    @Lock(LockType.READ)
    public ReferenceData getReferenceData() {
    	Element element = refDataEHCache.get(ALL_REFERENCE_DATA_KEY);
    	
    	if(element != null){	
    		return (ReferenceData) element.getObjectValue();
    	} else {
    		ReferenceData referenceData = referenceDataLogic.getReferenceData();
    		
    		refDataEHCache.put(new Element(ALL_REFERENCE_DATA_KEY, referenceData));
    		
    		return referenceData;
    	}		
    }

    首先,我尝试根据元素的键从缓存中获取元素,如果元素存在于缓存中( ==null ),则将从服务类接收该元素并将其放置在缓存中以供将来请求。

    注意:

    @Lock(LockType.READ)指定具有容器管理的并发性的单例bean的并发锁定类型。 当设置为LockType.READ ,它将强制执行该方法以允许对其进行完全并发访问(假定未持有任何写锁)。 这正是我想要的,因为我只需要执行读取操作。 另一个更保守的选项@Lock(LockType.WRITE)顺便说一下是DEFAULT,它强制对bean实例的独占访问。 这应该在高度并发的环境中使方法变慢。

    清除缓存

    清除缓存

    @Override public void evictAll() { cacheManager.clearAll(); }

    CacheManager的clearAll()方法清除CacheManager中所有缓存的内容,但不删除任何缓存。 我在这里只是为了简单起见使用它,因为我只有一个缓存,因此需要刷新。

    注意:如果您有多个高速缓存,即多个高速缓存名称,并且只想清除一个,则需要使用CacheManager.clearAllStartingWith(String prefix) ,该名称以CacheManager开头的名称清除CacheManager中所有高速缓存的内容。前缀,但不删除它们。

    2.如何触发缓存缓存

    这篇文章的第二部分将讨论清除缓存的可能性。 由于缓存实现是一个企业Java Bean,因此我们可以从MBean或从Web服务中调用它。

    MBean

    如果您不熟悉Java管理扩展(JMX),这是一种Java技术,可提供用于管理和监视应用程序,系统对象,设备(例如打印机)和面向服务的网络的工具。 这些资源由称为MBeans(用于Managed Bean)的对象表示,我强烈建议您从本教程的起点开始:Java管理扩展(JMX)

    接口

    公开的方法仅允许通过JMX重置缓存:

    @MXBean public interface CacheResetMXBean { void resetReferenceDataCache(); }

    “ MXBean是一种MBean,仅引用一组预定义的数据类型。 这样,您可以确保您的MBean可被任何客户端(包括远程客户端)使用,而无需客户端有权访问代表MBeans类型的特定于模型的类。 MXBean提供了一种方便的方式将相关值捆绑在一起,而无需将客户端进行特殊配置以处理捆绑。” [5]

    实作

    CacheReset MxBean实现

    @Singleton
    @Startup
    public class CacheReset implements CacheResetMXBean {
        
    	private MBeanServer platformMBeanServer;
        private ObjectName objectName = null;
        	
    	@EJB
    	ReferenceDataCache referenceDataCache;
    	
        @PostConstruct
        public void registerInJMX() {
            try {
            	objectName = new ObjectName("org.codingpedia.simplecacheexample:type=CacheReset");
                platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
    
                //unregister the mbean before registerting again
                Set<ObjectName> existing = platformMBeanServer.queryNames(objectName, null);
                if(existing.size() > 0){
                	platformMBeanServer.unregisterMBean(objectName);
                }
                
                platformMBeanServer.registerMBean(this, objectName);
            } catch (Exception e) {
                throw new IllegalStateException("Problem during registration of Monitoring into JMX:" + e);
            }
        }	
    	
    	@Override
    	public void resetReferenceDataCache() {
    		referenceDataCache.evictAll();
    
    	}
    	
    }

    注意:

    • 如前所述,该实现仅调用上一节中介绍的注入的单例bean的evictAll()方法
    • 该bean也被定义为@Singleton
    • @Startup批注导致在应用程序启动时由容器实例化Bean –渴望初始化
    • 我再次使用@PostConstruct功能。 在这里,bean已在JMX中注册,如果是,则检查是否使用ObjectName将其删除...

    休息服务电话

    我还内置了通过调用REST资源清除缓存的可能性。 在(rest-context)/ reference-data / flush-cache上执行HTTP POST时会发生这种情况:

    通过REST资源触发缓存刷新

    @Path("/reference-data")
    public class ReferenceDataResource {
    	
    	@EJB
    	ReferenceDataCache referenceDataCache;
    	
            @POST
    	@Path("flush-cache")
    	public Response flushReferenceDataCache() {
    		referenceDataCache.evictAll();
    		
    		return Response.status(Status.OK).entity("Cache successfully flushed").build();
    	}	
    	
    	@GET
    	@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    	public Response getReferenceData(@QueryParam("version") String version) {
    		ReferenceData referenceData = referenceDataCache.getReferenceData();				
    		
    		if(version!=null && version.equals(referenceData.getVersion())){
    			return Response.status(Status.NOT_MODIFIED).entity("Reference data was not modified").build();				
    		} else {
    			return Response.status(Status.OK)
    					.entity(referenceData).build();				
    		}
    	}	
    }

    请注意@GET getReferenceData(...)方法中存在版本查询参数。 这表示参考数据上的哈希,如果尚未修改,则客户端将收到304未修改HTTP状态 这是节省一些带宽的好方法,尤其是在您拥有移动客户端的情况下。 请参阅我的教程–带有Jersey和Spring的Java REST API设计和实现,以获取有关REST服务设计和实现的详细讨论。

    注意:在集群环境中,当参考数据更改时,需要在部署了应用程序的每个JVM上调用resetCache(…)。

    好,就是这样。 在本文中,我们学习了如何借助Ehcache在Java EE中构建简单的参考数据缓存。 当然,您可以轻松扩展缓存功能,以提供对缓存对象的更精细的访问/清除。 在这种情况下,请不要忘记使用LockType.WRITE作为清除方法……

    翻译自: https://www.javacodegeeks.com/2014/11/how-to-build-and-clear-a-reference-data-cache-with-singleton-ejbs-ehcache-and-mbeans.html

    ejb是什么意思

    展开全文
  • PKM是什么意思

    千次阅读 2019-12-09 21:27:01
    PKM是什么意思? 这三个字母代表着:Personal Knowledge Management,个人知识管理系统。简单地说,就是构建一个系统,把你重要的信息都放在里面管理起来。 PKM? 锁定目标,正向学习 周期整理,合理保存 积极共享,...

    原创不易,麻烦点个关注,点个赞,谢谢各位。
    在这里插入图片描述
    PKM是什么意思?

    这三个字母代表着:Personal Knowledge Management,个人知识管理系统。简单地说,就是构建一个系统,把你重要的信息都放在里面管理起来。

    PKM?

    锁定目标,正向学习
    周期整理,合理保存
    积极共享,树立品牌
    大胆应用,提升价值
    左右开弓,持续创新

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 区块链是什么意思

    千次阅读 2019-05-10 21:26:15
    区块链所构建的组织形态,一种自我消失型的组织 区块链的一个核心价值,就是让那些彼此不信任的个体之间实现大范围、大规模的协作,而这会带来新的生产关系、新的组织形态。 过去大型企业获得更多的资源,贫富...

    区块链所构建的组织形态,是一种自我消失型的组织

    区块链的一个核心价值,就是让那些彼此不信任的个体之间实现大范围、大规模的协作,而这会带来新的生产关系、新的组织形态。

    过去是大型企业获得更多的资源,贫富差距越来越大,而区块链所构建的组织形态,是一种自我消失型的组织,就像中本聪把比特币代码写好之后自我消失了一样,未来是一种没有中心的、自我消失的、自我弱化的社区共治。

    但区块链不仅仅只有好的地方,也会有一些陷阱。比如今天在很多三四线城市,经常发生的“区块链的三大应用”——炒币、开会和培训,让你去投资他发行的各种小的、不知所云的币,甚至还有人做出来一个铜牌,说这就是比特币,一个要卖多少钱。

    所以我觉得未来很美好,但现实有很多陷阱,大家要进入这个世界,千万要注意风险。

    当看到专业人士围绕着一个算法问题热火朝天讨论时,会闪过这样一个念头,此时此刻大家所做的这一切是否有意义,支撑人们坚守在区块链阵地的信念是什么,是要迎接这还没定论的第四次工业革命?当越来越多人在经过媒体宣传的洗礼之后,斩钉截铁地说“虚拟货币没有价值,区块链有价值”,“区块链应当转向实体经济”的时候,我就越发觉得再谈论这个颇为古老的话题“比特币是否有价值”的必要性。

    这是严肃的方向性问题:如果比特币等虚拟货币没有价值,那以此建立起来的虚拟世界就没有任何存在的意义;如果没有价值,那么比特币将只是一个少数人玩玩的把戏。

    展开全文
  • html5是什么意思

    2020-05-21 15:34:07
    打造全网web前端全栈资料库(总目录)看完学的更快,掌握的更加牢固,你值得拥有(持续更新) HTML5超文本标记语言的最新版本,也就是...它可以完成从动画到应用程序,从音乐到电影的各种操作,还可以用于构建

    需要面试题点击下面链接查看,有很多:

    打造全网web前端全栈资料库(总目录)看完学的更快,掌握的更加牢固,你值得拥有(持续更新)

    HTML5是超文本标记语言的最新版本,也就是描述网页的代码,html5实际上是三种代码形式,首先是HTML提供结构,其次是层叠样式表(CSS)负责网站的样式和布局,最后是JavaScript是给网站添加动态功能。

    HTML5有什么好处?

    HTML5主要是提供您想要的网站效果,而无需其他软件,如浏览器插件。它可以完成从动画到应用程序,从音乐到电影的各种操作,还可以用于构建在浏览器中运行的极其复杂的应用程序。

    HTML5做什么?

    HTML可以处理简单的页面布局,HTML5可用于编写在您未连接到网络时仍可使用的Web应用程序;告诉网站您所在的位置;处理高清视频;并提供非凡的图形。

    创建HTML5网站需要哪些工具?

    Aptana这个HTML5编辑器是一个开源的开发工具,支持开放的Web开发。开发者可以使用单一的设置来测试他们的Web应用程序。很多人更喜欢Adobe的Dreamweaver等工具,因为它在2010年获得了HTML5包。

    展开全文
  • 相信大家对网校系统都有所了解,特别是在疫情期间,网络教学的更是立下了...一、网校系统源码是什么意思? 网校系统源码是什么意思?顾名思义,市面上的网校APP都是网校系统源码构建出来的,必须基于网校系统而开发,用
  • ${patch.dir}" includes="*.patch" /> ... ${basedir}/src" strip="1"/> ...[color=red][size=large]请能详细的描述一下这个Target中每条语句的含义吗?[/size][align=center][/align] [/color]
  • 虽然,读者朋友可能觉得自己已经理解这些概念了,但是,还是希望读者读完。笔者从权威的书上将这些概念的定义摘抄下来,最后给出笔者对于“持续”的理解。构建(Build):一次构建不止一次编译...
  • h1标签是什么意思标题(H1-H6)标签是指网页html 中对文本标题所进行的着重强调的一种标签,以标签、、到依次显示重要性的递减,制作标签的主要意义是告诉搜索引擎这个是一段文字的标题,起强调作用。【推荐教程:HTML...
  • 这里的1875是什么意思

    2020-12-22 15:48:54
    共两层后半部分相当于是构建了一个隐藏层为128 model.add(Dense(128, activation='relu')) #输出层为10的普通的神经网络。最后一层的激活函数softmax,10位恰好可以表达0-9十个数字。 model....
  • JDK是什么意思? JDK 是Java开发工具包 (Java Development Kit ) 的缩写。它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。其中包括了JVM、Java编译器、大量的Java工具以及Java基础API里面...
  • 隧道代理ip基于高性能主机构建的动态IP代理服务器,通过将换IP操作放到云端,让用户使用更简单。用户无须更换IP,隧道代理会将用户发送的请求转发到不同的代理IP,转发周期可按需求指定。利用隧道代理,开发人员不...
  • CDN服务器是什么意思?CDN服务器搭建部署什么叫CDN服务器?cdn服务器的优点和设计原理CDN服务器搭建部署一、CDN服务器搭建前打算(文中以LuManager来构建CDN虚拟主机)二、LuManager CDN内存加快建立步骤三、设定DNS...
  • 反射操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。php反射api由若干类组成,可帮助我们用来访问程序的元...
  • Android中的bean是什么意思

    千次阅读 2018-02-19 21:37:44
     Java Bean 一种组件,它在内部有接口或有与其相关的属性,以便不同人在不同时间开发的 Bean 可以询问和集成。可以构建一个 Bean,而在以后构造时将其与其它 Bean 绑定。这种过程提供了先构建,然后重复使用的...
  • 您需要做的第一件事是什么? 将所有版权声明替换为您自己的名字。 交换所有选项卡和空格。 将所有代码都转换为Literate Haskell,因为写下您冗长的平淡无奇的注释,同时记得在每行开头都加上--实在是一件很痛苦...
  • 为 应用\ 数据\ 用户 之间提供API管理, 帮助开发人员更高效的构建应用 作用 在云原生开发中, 可能会跨多种基础架构进行部署. 从而一个应用在开发时需要兼顾多种工具和语言和框架, 同时又要敏捷开发. 为了应对复杂...
  • 相信很多人都会经常看到EC-CUBE,那么,EC-CUBE是什么?下面php中文网就为您介绍一下EC-CUBE。一:什么是EC-CUBEEC-CUBE是专门从事EC站点管理和管理的CMS(内容管理系统),是一个开源的EC站点构建包,可以免费使用,...
  • 一、前言 Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的...由于自动化构建、依赖管理等问题并不只存在于Java世界,因
  • 这段代码的实际意思就是:“在当前JavaScript 处理完成后立即运行这个函数。”在页面下载和构建 期间,只有一个JavaScript 处理过程,因此超时调用会在该过程结束时立即触发。至于这个时间与 DOMContentLoaded 被...
  • 就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。 Eclipse 还包括插件开发环境...
  • 服务器的1U ,2U分别是什么意思

    千次阅读 2019-08-11 23:40:08
    在《kudu构建高性能实时数据分析存储系统》书中,讲到kudu的管理时,涉及到了服务器的知识,比如作者提到的,1U, 2U,为此,网上到了回答,在此记录一下。 其实U一种表示服务器外部尺寸的单位,unit的缩略语,...
  • Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户...vue中的挂载是什么意思?将组件渲染,并且构造 DOM 元素然后塞入页面的过程称为组件的挂载。vue几种挂载方式区别1、第一种,最常见.vue-cli模板就是这样impor...
  • 构建之法读后感

    2017-02-18 21:44:00
    第11章 软件设计与实现 1. 关于小飞拿到spec之后做的估计开发任务所需时间,他是根据以前同类任务所需花费的实际时间以及其他同事的... 每日构建是什么意思呢? 每日构建意味着自动地,每天,完整地构建整个代...
  • |-- build // 项目构建(webpack)相关代码 | |-- build.js // 生产环境构建代码 | |-- check-version.js // 检查node、npm等版本 | |-- dev-client.js // 热重载相关 | |-- dev-server.js // 构建本地服务器 .
  • 构建之法》4

    2017-05-15 15:17:00
    第11章 软件设计与实现 1. 关于小飞拿到spec之后做的估计开发任务所需时间,他是根据以前同类任务所需花费的实际时间以及其他同事的时间估计的。... 每日构建是什么意思呢? 每日构建意味着自动...
  • 阿里P8级架构师核心理论落地篇 再造淘宝,贯穿全系,阿里团队代码落地,详细每个版本迭代,拒绝2-3个月PPT架构师 再造淘宝之咚宝-技术支撑-完整搭建DevOps ...再造淘宝之咚宝-构建step07 -评价中心
  • 前两天在知乎看到过一篇文章,大致意思是讲:字节跳动已经开始“弃用Webpack”,尝试在自研构建工具中使用类似Vite的ESmodule构建方式。 引起下方一大片焦虑: Webpack是不是要被取代了?现在学Vite就行了吧 ...
  • slam是什么意思?一文带你读懂SLAM

    万次阅读 2018-09-17 14:11:10
    SLAMSimultaneous localization and mapping缩写,意为“同步定位与建图”,主要用于解决机器人在未知环境运动时的定位与地图构建问题,为了让大家更多的了解SLAM,以下将从SLAM的应用领域、SLAM框架、SLAM分类...
  • 如下图中出现的红色感叹号: 出现上面问题的原因: 我在libs文件夹下删除了一些jar包,并没有在构建路径中清掉解决办法: FR:海涛高软(QQ技术群:386476712)
  • 什么是 Vue?Vue 一套用于构建用户界面的渐进式框架。它有着如下特点:渐进式框架,采用自底向上增量开发设计模版双向绑定机制利用指令(directive)对 DOM 进行封装组件化设计思想Vue 的组件化将 UI 页面分割为若干...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 957
精华内容 382
关键字:

构建是什么意思