当前位置: 首页 > news >正文

平台型网站制作住房和城乡建设网站 上海

平台型网站制作,住房和城乡建设网站 上海,普通电脑可以做网站服务器,美食网站怎样做锅包肉ejb构建在我的一个项目中#xff0c;我需要使用EclipseLink作为ORM框架从Java EE 6 WebLogic环境中的多个源中加载参考数据。 由于我在Java EE世界中找不到与Spring YET的Cacheable相当的注释#xff0c;因此我不得不编写自己的缓存解决方案。 尽管参考数据几乎不会随时间变化… ejb构建 在我的一个项目中我需要使用EclipseLink作为ORM框架从Java EE 6 WebLogic环境中的多个源中加载参考数据。 由于我在Java EE世界中找不到与Spring YET的Cacheable相当的注释因此我不得不编写自己的缓存解决方案。 尽管参考数据几乎不会随时间变化但是一项额外的要求是能够从外部清除缓存。 所以就这样... 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() –调用方法以完全清除缓存 实作 使用Singleton的简单参考数据缓存实现 ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) Singleton public class ReferenceDataCacheBean implements ReferenceDataCache {private static final String ALL_REFERENCE_DATA_KEY ALL_REFERENCE_DATA;private ConcurrentHashMapString, Object refDataCache null;EJBReferenceDataService referenceDataService;PostConstructpublic void initialize(){this.refDataCache new ConcurrentHashMap(); }OverrideLock(LockType.READ)public ReferenceData getReferenceData() {if(refDataCache.containsKey(ALL_REFERENCE_DATA_KEY)){ return refDataCache.get(ALL_REFERENCE_DATA_KEY);} else {ReferenceData referenceData referenceDataService.getReferenceData();refDataCache.put(ALL_REFERENCE_DATA_KEY, referenceData);return referenceData;} }Overridepublic void evictAll() {refDataCache.clear(); } .......... } 注意 Singleton –可能是此类中最重要的代码行。 此注释指定在应用程序中将仅存在一个这种类型的bean的单例。 该bean可以由多个线程同时调用。 它还带有PostConstruct批注。 此注释用于需要依赖注入完成后才能执行任何初始化的方法在本例中是初始化“缓存”哈希映射 ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)声明单例会话bean的并发管理类型。 默认情况下它设置为Container 。 我在这里使用它只是为了强调它的存在。 另一个选项ConcurrencyManagementType.BEAN指定Bean开发人员负责管理对Bean实例的并发访问。 实际的“缓存”是ConcurrentHashMap 它具有基于String的键并存储Object 。 由于bean的单例性质它被保留在内存中 注入的ReferenceDataService是Stateless EJB 它在后台收集来自不同来源的参考数据 getReferenceData方法的实现非常简单–它检查ConcurrentHashMap是否具有将String键指定为常量“ ALL_REFERENCE_DATA ”的条目。 如果是这样它将从内存中检索否则将由服务Bean加载。 Lock(LockType.READ)指定具有容器管理的并发性的单例bean的并发锁定类型。 设置为LockType.READ 它将强制执行该方法以允许对其进行完全并发访问假定未持有任何写锁。 这正是我想要的因为我只需要执行读取操作。 另一个更保守的选项Lock(LockType.WRITE)顺便说一下是DEFAULT它强制对bean实例的独占访问。 这应该在高度并发的环境中使方法变慢。 evictAll()方法只是从哈希图中删除所有元素。 2.刷新缓存 这篇文章的第二部分将讨论清除缓存的可能性。 由于缓存实现是一个企业Java Bean因此我们可以从MBean或从Web服务中调用它。 MBean 如果您不熟悉Java管理扩展JMX 这是一种Java技术它提供用于管理和监视应用程序系统对象设备例如打印机和面向服务的网络的工具。 这些资源由称为MBeans用于Managed Bean的对象表示 我强烈建议您从本教程的路径Java管理扩展JMX开始。 2.1.1。 接口 公开的方法仅允许通过JMX重置缓存 CacheRest MBean MXBean public interface CacheResetMXBean {void resetReferenceDataCache(); } “ MXBean是一种MBean仅引用一组预定义的数据类型。 这样您可以确保您的MBean可被任何客户端包括远程客户端使用而无需客户端有权访问代表MBean类型的特定于模型的类。 MXBean提供了一种将相关值捆绑在一起的便捷方法而无需将客户端特别配置为处理捆绑。” [4] 2.1.2。 实作 MBean的CacheReset实现 Singleton Startup public class CacheReset implements CacheResetMXBean {private MBeanServer platformMBeanServer;private ObjectName objectName null;EJBReferenceDataCache referenceDataCache;PostConstructpublic void registerInJMX() {try {objectName new ObjectName(org.codingpedia.simplecacheexample:typeCacheReset);platformMBeanServer ManagementFactory.getPlatformMBeanServer();//unregister the mbean before registerting againSetObjectName 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);}} Overridepublic void resetReferenceDataCache() {referenceDataCache.evictAll();}} 注意 如前所述该实现仅调用上一节中介绍的注入的单例bean的evictAll()方法 该bean也被定义为Singleton Startup批注导致在应用程序启动时由容器实例化Bean – 渴望初始化 我再次使用PostConstruct功能。 在这里 此 bean已在JMX中注册如果有的话请检查是否使用ObjectName将其删除。 休息服务电话 我还内置了通过调用REST资源清除缓存的可能性。 在rest-context/ reference-data / flush-cache上执行HTTP POST时会发生这种情况 在参考数据缓存上进行剩余调用 Path(/reference-data) public class ReferenceDataResource {EJBReferenceDataCache referenceDataCache;POSTPath(flush-cache)public Response flushReferenceDataCache() {referenceDataCache.evictAll();return Response.status(Status.OK).entity(Cache successfully flushed).build();} GETProduces({ 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状态 。 这是节省带宽的好方法尤其是在您拥有移动客户端的情况下。 有关REST服务设计和实现的详细讨论请参阅我的教程“使用Jersey和Spring的Java REST API设计和实现”。 注意 在集群环境中当参考数据更改时需要在部署了应用程序的每个JVM上调用resetCache…。 好就是这样。 在本文中我们学习了如何使用Java EE批注构建简单的缓存。 当然您可以轻松扩展缓存功能以提供对缓存对象的更精细的访问/清除。 在这种情况下请不要忘记使用LockType.WRITE作为清除方法…… 翻译自: https://www.javacodegeeks.com/2014/09/how-to-build-and-clear-a-reference-data-cache-with-singleton-ejbs-and-mbeans.htmlejb构建
http://www.pierceye.com/news/531833/

相关文章:

  • 网站订单模板怎么可以自己做网站被百度收到
  • 网上做物理题赚钱的网站肥城住房和城乡建设局网站
  • 傻瓜式网站源码比较好的网站建设品牌升级
  • 买东西的网站德阳机械加工网
  • 企业网站建设的基本标准是广告公司运作模式
  • 做推广网站的文章电动汽车排名前十名
  • 宜州网站建设服务网页生成长图 iphone
  • 网站关键词seo费用广告设计教学大纲
  • 网站开发视频 百度云自己做网站卖东西
  • 二级网站建设费用品牌广告投放
  • 西宁做网站君博认同门户网站建设实施方案
  • 外贸公司做网站该去哪里找萝岗手机网站建设
  • 网站建设的商业目的惠州网站建设培训
  • 一个网站备案多个域名吗中国建设工程信息网官网入口
  • 广告网站设计哪家快做网站一般注册哪几类商标
  • 学网站建设有前途吗网站对话窗口怎么做
  • 云南昆明做网站wordpress备份文件
  • 连云港市网站建设汕头制作手机网站
  • 印度做网站wordpress 锁定地址
  • 做网站的服务器带宽一般多少游戏开发培训机构
  • 网站设计制作培训微信开放平台文档
  • 私人申请建设网站多少钱html如何建网站
  • 网站怎么在微博推广石家庄模板建站平台
  • 贵阳网站开发方舟网络wordpress静态化链接
  • 如何建设一个公司网站英文网站建设多少钱
  • 国外做水广告网站大全app开发公司查询
  • 苏州商城网站制作免费下载ppt模板的网站有哪些
  • 北京智能网站建设企业wordpress 找源码
  • 无锡网站维护公司wordpress 目录排序
  • 自己搭建的ftp怎么做网站装修公司展厅效果图