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

衡水教育行业网站建设网站域名想更换要怎么做

衡水教育行业网站建设,网站域名想更换要怎么做,网站建设网页制作软件有哪些,房子装修效果图通过Spring框架使用JBoss的新超高性能消息传递系统。 HornetQ是一个开放源代码项目#xff0c;用于构建多协议#xff0c;可嵌入#xff0c;非常高性能的集群异步消息传递系统。 它是用Java编写的#xff0c;并且可以在具有Java 5或更高版本运行时的任何平台上运行。 Horn… 通过Spring框架使用JBoss的新超高性能消息传递系统。 HornetQ是一个开放源代码项目用于构建多协议可嵌入非常高性能的集群异步消息传递系统。 它是用Java编写的并且可以在具有Java 5或更高版本运行时的任何平台上运行。 HornetQ一流的高性能日志以非持久消息传递通常看到的速度提供持久消息传递性能。 非持久消息传递性能也非常高。 HornetQ除了其他“性感”功能外还提供服务器复制和自动客户端故障转移功能以消除服务器故障时丢失或重复的消息可以配置成群集使用其中HornetQ服务器的地理位置分散的群集知道如何负载均衡消息并提供全面的信息。管理API用于管理和监视所有HornetQ服务器。 在本教程中我们将向您展示如何通过Spring框架利用HornetQ 。 为了使事情变得更有趣我们将从上一篇关于Spring GWT Hibernate JPA Infinispan集成的文章的 结尾处继续 。 我们将使用我们的GWTSpringInfinispan项目并通过消息传递功能对其进行授权 当然您可以阅读本文将基于Spring的项目与HornetQ集成。 我们将使用HornetQ 2.1.0.Final版本您可以从此处下载。 我们还将需要jboss-logging-spi库。 将使用JBoss Logging SPI 2.1.1.GA版本您可以在此处从JBoss Maven存储库下载该版本。 为了在运行时正确地集成Spring和HornetQ 我们必须为Web应用程序提供所有必需的库。 因此复制下面在/ war / WEB-INF / lib下列出的文件如果使用的是不同版本请复制相关文件 从HornetQ发行 /lib/hornetq-bootstrap.jar /lib/hornetq-core.jar /lib/hornetq-jms.jar /lib/hornetq-logging.jar /lib/jnpserver.jar /lib/netty.jar JBoss Logging SPI库 jboss-logging-spi-2.1.1.GA.jar 最后为了使HornetQ在运行时正常运行Web应用程序的类路径中必须有几个配置文件。 如本教程的介绍部分所述我们可以创建HornetQ服务器集群以实现负载平衡和高可用性消息传递也可以在非集群环境中使用HornetQ 。 两种情况都需要不同的配置。 HornetQ发行版包含/ config目录下的所有配置文件。 我们将使用jboss-as-5集群配置以便能够使用消息传递平台的全部功能。 将以下文件从/ config / jboss-as-5 / clustered目录复制到应用程序/ resources包中 hornetq-configuration.xml –这是主要的HornetQ配置文件 hornetq-jms.xml –服务器端JMS服务配置文件 除非您要在JBoss应用服务器中进行部署否则请编辑hornetq-configuration.xml文件并将“ $ {jboss.server.data.dir}”替换为“ $ {data.dir../ data}”。 将以下文件从/ config / stand-alone / clustered目录复制到应用程序/ resources包中 hornetq-users.xml – HornetQ安全管理器的用户凭证文件 在继续实际的集成和客户端实现示例之前让我们确定一些有关HornetQ服务器体系结构和上述配置文件的有用信息。 HornetQ服务器不会讲JMS 实际上对JMS一无所知它是一种协议不可知的消息传递服务器旨在与多种不同的协议一起使用。 HornetQ客户端可能在不同的物理计算机上与HornetQ服务器交互。 HornetQ当前提供两种API来在客户端进行消息传递 核心客户端API。 这是一个简单而直观的Java API可在没有JMS某些复杂性的情况下提供完整的消息传递功能集 JMS客户端API。 标准的JMS API在客户端可用 JMS语义由客户端上的瘦JMS外观层实现。 当用户在客户端上使用JMS API时所有JMS交互都将转换为HornetQ核心客户端API上的操作然后再使用HornetQ有线格式通过有线传输。 服务器始终只处理核心API交互。 标准的独立消息传递服务器配置包括核心消息传递服务器 JMS服务和JNDI服务。 JMS服务的作用是将任何服务器端hornetq-jms.xml配置文件中的任何JMS QueueTopic和ConnectionFactory实例部署并绑定到JNDI 。 它还提供了用于创建和销毁队列主题和ConnectionFactory实例的简单管理API可以通过JMX或连接对其进行访问。 由于核心服务器与JMS无关因此它是HornetQ核心服务器的一项独立服务。 如果您不想通过服务器端XML配置部署任何JMS QueueTopic或ConnectionFactory实例并且不需要在服务器端使用JMS管理API则可以禁用此服务。 还包括一个JNDI服务器因为在使用JMS查找队列主题和ConnectionFactory实例时 JNDI是常见的要求。 如果您不需要JNDI则也可以禁用此服务。 HornetQ允许您直接在客户端上以编程方式创建JMS和核心对象而不是从JNDI查找它们因此JNDI服务器并不总是必需的。 HornetQ附带了一个基本的安全管理器实现该实现可获取用户凭证 从hornetq-users.xml文件中。 该文件包含用户密码和角色信息。 我们将使用HornetQ JMS服务并在与命名服务器相同的JVM中执行JMS客户端代码因此我们必须创建一个“ jndi.properties”文件并将其与上述其余HornetQ配置文件一起放在我们的application / resources包下。 “ jndi.properties”文件的内容应如下所示 java.naming.factory.initialorg.jnp.interfaces.NamingContextFactory 在继续之前我们必须注意Eclipse项目的依赖关系。 以下jar应包含在项目的Java构建路径中 jms.jar 现在让我们将Spring与HornetQ集成。 找到您的applicationContext.xml文件/ war / WEB-INF文件夹然后添加以下bean bean namenamingServerImpl classorg.jnp.server.NamingBeanImpl init-methodstart destroy-methodstop /bean namenamingServer classorg.jnp.server.Main init-methodstart destroy-methodstopproperty namenamingInfo refnamingServerImpl /property nameport value1099 /property namebindAddress valuelocalhost /property namermiPort value1098 /property namermiBindAddress valuelocalhost / /beanbean namembeanServer classjava.lang.management.ManagementFactory factory-methodgetPlatformMBeanServer /bean namefileConfiguration classorg.hornetq.core.config.impl.FileConfiguration init-methodstart destroy-methodstop /bean namehornetQSecurityManagerImpl classorg.hornetq.spi.core.security.HornetQSecurityManagerImpl /!-- The core server -- bean namehornetQServerImpl classorg.hornetq.core.server.impl.HornetQServerImplconstructor-arg reffileConfiguration /constructor-arg refmbeanServer /constructor-arg refhornetQSecurityManagerImpl / /bean!-- The JMS server -- bean namejmsServerManagerImpl classorg.hornetq.jms.server.impl.JMSServerManagerImpl init-methodstart destroy-methodstop depends-onnamingServerconstructor-arg refhornetQServerImpl / /bean 如果您打算在独立环境中配置Spring和HornetQ 则上述配置就足够了。 在我们的例子中当我们在Apache – Tomcat上部署Web应用程序时应进行一些小的修改。 Apache – Tomcat为所有已部署的Web应用程序提供JNDI服务以配置环境属性和资源。 此外由于环境和资源管理是使用部署描述符文件例如web.xml和context.xml完成的因此在运行时可用的命名上下文是只读的。 另外在启动时 Apache – Tomcat使用系统属性初始化其JNDI环境。 结果使用JNDI InitialContext类不提供构造函数环境参数的“在VM中”客户端执行命名操作总是检索Apache – Tomcat JNDI实现Context接口。 为了使HornetQ JNDI服务器与Apache-Tomcat命名服务和HornetQ JMS服务共存以便将队列主题和ConnectionFactory实例绑定到JNDI 我们必须执行以下操作 对我们的Web应用程序禁用Apache – Tomcat命名服务 将HornetQ JNDI服务器配置为不使用现有的JNDI服务如果可用但始终创建​​一个新的服务 要为我们的Web应用程序禁用Apache – Tomcat命名服务我们必须执行以下操作 在我们项目的/ war文件夹下创建一个META-INF文件夹 创建一个包含以下context指令的context.xml文件 Context overridetrue useNamingfalse / 要配置HornetQ JNDI服务器不使用现有的JNDI服务如果可用我们必须在Spring bean的“ namingServerImpl”中添加以下属性 property nameuseGlobalService valuefalse / 为了通过Spring使用HornetQ消息服务我们可以创建一个连接工厂也可以从JNDI查找一个。 下面提供了连接工厂和“ JmsTemplate”示例 bean nameconnectionFactory classorg.hornetq.jms.client.HornetQConnectionFactory constructor-argbean classorg.hornetq.api.core.TransportConfigurationconstructor-arg valueorg.hornetq.integration.transports.netty.NettyConnectorFactory /constructor-argmap key-typejava.lang.String value-typejava.lang.Objectentry keyport value5445/entry/map/constructor-arg/bean/constructor-arg /beanbean namejmsTemplate classorg.springframework.jms.core.JmsTemplateproperty nameconnectionFactory refconnectionFactory/property /bean 连接工厂示例的JNDI查找如下所示 bean idinVMConnectionFactory classorg.springframework.jndi.JndiObjectFactoryBean depends-onjmsServerManagerImplproperty namejndiNamevaluejava:/ConnectionFactory/value/property /bean 我们将使用JNDI查找方法来获取连接工厂因此将上述配置添加到applicationContext.xml文件中。 这就是我们要做的所有配置让我们继续使用我们新集成的消息传递服务实施假设的业务案例。 我们的Web应用程序提供了添加更新和检索“员工”数据的功能。 假设我们希望在每次添加或更改“员工”数据时都收到通知。 为了简单起见该通知将是Apache – Tomcat控制台上的日志。 我们将实现一个JMS生产者以便在用户每次对“雇员”数据进行更新时将消息发送到“通知”队列。 另外必须实现JMS使用者以便处理“通知”队列消息并登录到控制台。 要创建“通知”队列并将其绑定到名称为“ / queue / Notifications”的JNDI 请将以下内容添加到hornetq-jms.xml文件中 queue nameNotificationsentry name/queue/Notifications/ /queue 为了能够通过Spring bean使用新创建的“ Notifications”队列请将以下JNDI查找指令添加到applicationContext.xml文件中 bean idnotificationsQueue classorg.springframework.jndi.JndiObjectFactoryBean depends-onjmsServerManagerImplproperty namejndiNamevalue/queue/Notifications/value/property /bean 由于JMS生产者和使用者都是服务器端组件因此必须将它们放在我们应用程序的/ server子包下。 我们选择在/ server / utils子包下创建它们因为它们本质上是实用程序类。 下面提供了示例JMS生产者和消费者类 package com.javacodegeeks.gwtspring.server.utils;import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;Service(notificationsProducer) public class NotificationsProducer {AutowiredQueue notificationsQueue;AutowiredConnectionFactory inVMConnectionFactory;private Connection notificationsQueueConnection;private Session notificationsQueueSession;private MessageProducer notificationsQueueProducer;PostConstructpublic void init() throws Exception {notificationsQueueConnection inVMConnectionFactory.createConnection();notificationsQueueSession notificationsQueueConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);notificationsQueueProducer notificationsQueueSession.createProducer(notificationsQueue);notificationsQueueProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);}PreDestroypublic void destroy() throws Exception {if(notificationsQueueConnection ! null)notificationsQueueConnection.close();}public void sendNotification(final String message) throws Exception {TextMessage textMessage notificationsQueueSession.createTextMessage(message);notificationsQueueProducer.send(textMessage);}} 还有消费者 package com.javacodegeeks.gwtspring.server.utils;import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;Service(notificationsConsumer) public class NotificationsConsumer implements MessageListener {AutowiredQueue notificationsQueue;AutowiredConnectionFactory inVMConnectionFactory;private Connection notificationsQueueConnection;PostConstructpublic void init() throws Exception {notificationsQueueConnection inVMConnectionFactory.createConnection();Session notificationsQueueSession notificationsQueueConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);MessageConsumer notificationsQueueConsumer notificationsQueueSession.createConsumer(notificationsQueue);notificationsQueueConsumer.setMessageListener(this);notificationsQueueConnection.start();}PreDestroypublic void destroy() throws Exception {if(notificationsQueueConnection ! null)notificationsQueueConnection.close();}Overridepublic void onMessage(Message message) {if (message instanceof TextMessage) {try {String text ((TextMessage) message).getText();System.out.println(The Notification Message is : \n text);} catch (JMSException ex) {throw new RuntimeException(ex);}} else {throw new IllegalArgumentException(Message must be of type TextMessage);}}} 总结我们的示例业务案例我们必须修改“ employeeService” Spring bean以便在用户每次请求保存或更新“ employee”数据时使用“ notificationsProducer”实用程序bean发送通知消息。 我们使用“ Autowire”注释在“ employeeService”内部连接“ notificationProducer”并从“ notificationProducer”调用“ sendNotification”操作以便每次请求“ employeeService”的saveOrUpdateEmployee“操作时发送通知。 完整的代码如下所示 package com.javacodegeeks.gwtspring.server.services;import javax.annotation.PostConstruct; import javax.annotation.PreDestroy;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional;import com.javacodegeeks.gwtspring.server.dao.EmployeeDAO; import com.javacodegeeks.gwtspring.server.utils.NotificationsProducer; import com.javacodegeeks.gwtspring.shared.dto.EmployeeDTO; import com.javacodegeeks.gwtspring.shared.services.EmployeeService;Service(employeeService) public class EmployeeServiceImpl implements EmployeeService {Autowiredprivate EmployeeDAO employeeDAO;AutowiredNotificationsProducer notificationsProducer;PostConstructpublic void init() throws Exception {}PreDestroypublic void destroy() {}Transactional(propagationPropagation.SUPPORTS, rollbackForException.class)public EmployeeDTO findEmployee(long employeeId) {return employeeDAO.findById(employeeId);}Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public void saveEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO employeeDAO.findById(employeeId);if(employeeDTO null) {employeeDTO new EmployeeDTO(employeeId, name,surname, jobDescription);employeeDAO.persist(employeeDTO);}}Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public void updateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO employeeDAO.findById(employeeId);if(employeeDTO ! null) {employeeDTO.setEmployeeName(name);employeeDTO.setEmployeeSurname(surname);employeeDTO.setJob(jobDescription);}}Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public void deleteEmployee(long employeeId) throws Exception {EmployeeDTO employeeDTO employeeDAO.findById(employeeId);if(employeeDTO ! null)employeeDAO.remove(employeeDTO);}Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public void saveOrUpdateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO new EmployeeDTO(employeeId, name,surname, jobDescription);employeeDAO.merge(employeeDTO);notificationsProducer.sendNotification(Save Or Update Employee with values : \nID : employeeId \nName : name \nSurname : surname \nJob description : jobDescription);}} 而已 要部署Web应用程序只需将/ war文件夹复制到Apache – Tomcat “ webapps”文件夹中。 您可以将war文件夹的名称更改为您喜欢的名称最好在项目名称之后将其重命名例如GWTSpringInfinispanHornetQ 在午餐之前应用程序不要忘记创建数据库模式这里是“ javacodegeeks”。 午餐应用程序将您的浏览器指向以下地址 http// localhost8080 / GWTSpringInfinispanHornetQ / 如果一切顺利您应该会看到您的主页。 应该显示两个文本框每个文本框后面都有一个按钮。 在第一个文本框中您可以将雇员保存或更新到数据库。 作为输入提供ID名称姓氏和职位描述并用空格字符分隔。 单击“ SaveOrUpdate”按钮将提供的信息存储到数据库中。 对于现有的“员工”条目相同的ID将执行更新。 在这两种情况下都应记录一个通知日志。 日志格式应如下 通知消息为 使用值保存或更新员工 编号xxx 名称xxx 姓xxx 职位描述xxx 其中“ xxx”应为您提供的“员工”信息。 请查看日志文件catalina.out。 第二个文本框用于检索现有的“雇员”条目。 提供一个“雇员” ID然后单击“检索”按钮。 如果“雇员”存在则应看到“雇员” ID姓名姓氏和职位描述。 您可以从此处下载该项目如开头所述并且不包含先前的文章所需的第三方库 玩得开心 贾斯汀 相关文章 GWT 2 Spring 3 JPA 2 Hibernate 3.5教程 GWT Spring和Hibernate进入数据网格世界 Spring3 RESTful Web服务 GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示 带有Spring和Maven教程的JAX–WS 翻译自: https://www.javacodegeeks.com/2010/06/spring-3-hornetq-21-integration.html
http://www.zqtcl.cn/news/354451/

相关文章:

  • 珠海网站开发定制常德网站建设详细策划
  • 做电影网站侵权哈尔滨网站开发
  • 中国联通网站备案系统Wordpress建立空白页面
  • 郑州网站建设 郑州网站制作wordpress删除模板
  • 北京网站设计培训wordpress vps 伪静态
  • 做网站和编程有关系吗seo百家外链网站
  • 网站新闻怎么写最新事故案例100例
  • 网站中的表格seo宣传网站
  • 河南锦路路桥建设有限公司网站网站建设会考什么
  • 高校网站建设研究意义餐饮vi设计案例
  • 触屏手机网站网站建设功能模块价格
  • 类似携程网的网站wordpress文章摘要调用
  • 好网站建设公司开发方案联盟营销的网络营销方式
  • logo免费生成网站洛阳网络建站公司
  • 建设工程部网站百度指数功能
  • 个人网站 商业时事新闻2022最新10月
  • 不会代码 怎么做网站网站视频管理系统
  • 网站空间 流量网上卡片制作
  • 网站排名seo软件机关网站源码
  • 网站手机端页面怎么做手机之家
  • 成都电子商务网站大庆城市投资建设网站
  • 电子商务网站费用wordpress 怎么手动更新
  • 中国空间站设计在轨飞行多少年南昌网站建设风格
  • 用php写的网站有哪些暖暖 视频 在线 观看 高清
  • 云空间网站怎么做海南旅游网网页制作
  • 常宁网站免费的ai作图软件
  • 网站建设讲师招聘如何做电商产品推广
  • 让百度收录网站网站开发流程进度表
  • 有几个网站能在百度做推广产品开发管理系统
  • 一个网站项目的价格表dz论坛seo