import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.SocketTimeoutException;
import java.util.UUID;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.QueueConnection;
import javax.jms.QueueSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* JMS连接工具类
* JMS连接超时处理,通过线程控制JMS启动连接时failover不停重试的时间。
* @version [版本号,YYYY-MM-DD]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class ConnUtils
{
private ConnUtils()
{
}
/**
* get jms session
* @param conn jms connection
* @param timeout timeout
* @param unit time unit
* @param isTransaction isTransaction
* @param ack ack
* @return jms session
* @throws LogCollectionException LogCollectionException
* @throws IOException IOException
*/
public static QueueSession connectWithTimeout(final QueueConnection conn,
long timeout, TimeUnit unit, final Boolean isTransaction,
final int ack) throws LogCollectionException, IOException
{
final BlockingQueue<Object> mailbox = new ArrayBlockingQueue<Object>(1);
ExecutorService executor = Executors.newSingleThreadExecutor(new DaemonThreadFactory());
executor.submit(new Runnable()
{
public void run()
{
try
{
QueueSession session = conn.createQueueSession(isTransaction,
ack);
if (!mailbox.offer(session))
{
session = null;
}
}
catch (JMSException e)
{
mailbox.offer(e);
}
}
});
Object result;
try
{
result = mailbox.poll(timeout, unit);
if (result == null)
{
if (!mailbox.offer("time out"))
{
result = mailbox.take();
}
}
}
catch (InterruptedException e)
{
closeConn(conn);
throw initCause(new InterruptedIOException(e.getMessage()), e);
}
finally
{
executor.shutdownNow();
}
if (result == null)
{
closeConn(conn);
throw new SocketTimeoutException("Connect timed out");
}
if (result instanceof QueueSession)
{
return (QueueSession)result;
}
if (result instanceof JMSException)
{
closeConn(conn);
throw new LogCollectionException("IO Execption",
(JMSException)result);
}
throw new IOException("Unknown reason!");
}
import java.io.InterruptedIOException;
import java.net.SocketTimeoutException;
import java.util.UUID;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.QueueConnection;
import javax.jms.QueueSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* JMS连接工具类
* JMS连接超时处理,通过线程控制JMS启动连接时failover不停重试的时间。
* @version [版本号,YYYY-MM-DD]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class ConnUtils
{
private ConnUtils()
{
}
/**
* get jms session
* @param conn jms connection
* @param timeout timeout
* @param unit time unit
* @param isTransaction isTransaction
* @param ack ack
* @return jms session
* @throws LogCollectionException LogCollectionException
* @throws IOException IOException
*/
public static QueueSession connectWithTimeout(final QueueConnection conn,
long timeout, TimeUnit unit, final Boolean isTransaction,
final int ack) throws LogCollectionException, IOException
{
final BlockingQueue<Object> mailbox = new ArrayBlockingQueue<Object>(1);
ExecutorService executor = Executors.newSingleThreadExecutor(new DaemonThreadFactory());
executor.submit(new Runnable()
{
public void run()
{
try
{
QueueSession session = conn.createQueueSession(isTransaction,
ack);
if (!mailbox.offer(session))
{
session = null;
}
}
catch (JMSException e)
{
mailbox.offer(e);
}
}
});
Object result;
try
{
result = mailbox.poll(timeout, unit);
if (result == null)
{
if (!mailbox.offer("time out"))
{
result = mailbox.take();
}
}
}
catch (InterruptedException e)
{
closeConn(conn);
throw initCause(new InterruptedIOException(e.getMessage()), e);
}
finally
{
executor.shutdownNow();
}
if (result == null)
{
closeConn(conn);
throw new SocketTimeoutException("Connect timed out");
}
if (result instanceof QueueSession)
{
return (QueueSession)result;
}
if (result instanceof JMSException)
{
closeConn(conn);
throw new LogCollectionException("IO Execption",
(JMSException)result);
}
throw new IOException("Unknown reason!");
}
发表评论
-
NIO入门
2012-07-25 17:40 698见附件!!!! -
Axis-Webservice课程
2012-07-10 11:40 1916http://hi.baidu.com/annleecn/ ... -
SSL安全socket的通讯实例
2012-06-07 17:52 1084学习了SSL的基本原理后. ... -
使用keytool来创建管理密钥及证书
2012-06-07 17:51 1792使用SSL来实现安全加密通讯需要有密码对及公钥证书等.. ... -
SSL+socket
2012-06-07 17:20 955Java代码 服务器端代码: ... -
用SSL构建安全的Socket
2012-06-07 16:38 1373SSL(安全套接层)是 Netscape公司在1994年开发的 ... -
keytool 用法总结
2012-06-07 16:37 15112内容概览: keytool的几个常用的命令。 1.创建证书 ... -
XStream实现Object与XML转换解决方案
2012-06-05 11:16 1106方案说明: 1:特点 > 0 配置 > ... -
AAAA26
2012-04-28 11:19 0建议3 IO操作流使用有Buffer功能的class. (1. ... -
AAAA25
2012-04-28 11:19 03.5.2 建议 建议1 public类型的底层函数需对输入 ... -
AAAA24
2012-04-28 11:18 0规则5 对类中日志工具对象logger应声明为static. ... -
AAAA23
2012-04-28 11:18 0规则4 Java 1.4中大量字符串的“相加”操作应该使用St ... -
AAAA22
2012-04-28 11:18 03.5 性能与可靠性 3.5.1 规则 规则1 对Debu ... -
AAAA21
2012-04-28 11:17 0建议11 使用Java 5.0枚举来替代以前用数字与字符串的同 ... -
AAAA20
2012-04-28 11:16 0建议7 不要使用难懂的技巧性很高的语句,除非很有必要时。(1. ... -
AAAA19
2012-04-28 11:14 03.4.2 建议 建议1 记录异常不要保存exception ... -
AAAA18
2012-04-28 11:04 0规则14 判断语句不要使用”* == true”来判断为真 说 ... -
AAAA17
2012-04-28 11:04 0规则9 不要使用 System.out 与 System.er ... -
AAAA16
2012-04-28 11:03 0应改为如下形式: private final static i ... -
AAAA15
2012-04-28 11:03 0应改为如下形式: private final static i ...
相关推荐
3. **异常处理**:处理可能出现的JMS异常,如消息丢失或超时。 **六、应用场景** 1. **解耦系统**:在分布式系统中,通过消息传递实现组件间的解耦。 2. **异步处理**:后台任务处理,避免阻塞主线程。 3. **事件...
4. **错误处理**:客户端应具备错误处理机制,包括但不限于超时重试、异常捕获和日志记录,以确保消息传递的可靠性和服务的稳定性。 #### 服务器端的行为 服务器端接收到SOAP请求后,会根据消息的`contentType`和...
1. **消息中间件(JMS Provider)**:这是实现JMS协议的第三方组件,如Apache ActiveMQ、Kafka、RabbitMQ等,它们为应用提供消息传递服务。 2. **消息模式**:主要有两种,点对点(Point-to-Point, P2P)和发布/...
1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 ...
1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 ...
"Java并发编程与高并发解决方案"这一主题涵盖了多个重要的技术概念和实践策略,旨在提高系统处理大规模并发请求的能力,保证服务的稳定性和性能。 首先,线程池(threadpool)是Java并发编程中的核心组件。通过复用...
总结,利用Websphere MQ的持久化消息特性,结合SpringMVC,我们可以设计出一个可靠的同步处理方案。这种方案虽然牺牲了一定的性能,但确保了业务流程的顺序性和数据一致性,对于那些对实时性和准确性有较高要求的...
Atomikos是Java平台上的一个强健的事务管理解决方案,它支持JTA(Java Transaction API)标准,可以处理复杂的分布式事务场景。 首先,我们需要理解什么是XA事务。XA事务是一种两阶段提交(2PC)协议,用于协调跨多...
ActiveMQ作为JMS的一个实现,提供了一种标准化的消息传递解决方案,适用于构建高并发、高可靠性的分布式系统。其点对点和发布/订阅模式满足了不同场景下的需求,而丰富的特性和广泛的语言支持使其成为许多企业级应用...
【标题】:“activemq...总结起来,activemq作为强大的消息中间件,提供了一整套解决方案,帮助开发者构建可靠、高效、可扩展的分布式系统。理解并掌握JMS基础和activemq的特性和使用,是提升系统架构能力的重要一步。
3. **事务协调器**:Atomikos包含一个事务协调器,它负责监控和控制事务的生命周期,包括开始、提交、回滚和超时处理。协调器通过两阶段提交(2PC)协议确保所有参与事务的节点都能达成一致。 4. **可扩展性**:...
总的来说,`activemq-pool.jar`是ActiveMQ的重要组成部分,对于处理大量并发消息传递的Java应用来说,它提供了一种高效且可扩展的连接管理方案,降低了系统的资源消耗,提升了整体性能。正确理解和使用这个库,对于...
`receiver.receive(1000)`会阻塞等待1秒钟,直到接收到消息或超时。 ```java QueueReceiver receiver = session.createReceiver(queue); Message receiverMessage = receiver.receive(1000); ``` 这个简单的Java...
Atomikos Transactions Hibernate3是一个专为Java环境设计的事务处理解决方案,它主要为Hibernate3提供了一个强大的、可扩展的事务管理器。这个解决方案的核心在于Atomikos Transactions,这是一个开源的、企业级的...
1. **异常分类**:Java中的异常分为检查型异常(Exception)和运行时异常(RuntimeException)。检查型异常是程序在编译期间需要处理的,如IOException;运行时异常是程序运行时可能出现的错误,如...
Atomikos 是一个开源的JTA实现,它提供了全面的事务管理解决方案,支持分布式事务处理。Atomikos 可以无缝集成到Spring Boot应用中,为微服务架构中的事务管理提供强大的支持。它包括事务协调器、事务管理器以及对...
ActiveMQ 是一个流行的开源消息代理,它遵循JMS(Java消息服务)标准,用于在分布式系统中传递消息。在面试中,对ActiveMQ的理解和掌握是评估候选人技能的关键部分。以下是一些关于ActiveMQ面试中可能涉及的重要知识...
JMS API为消息的持久性、优先级、超时、交易、确认和消息选择器等提供了编程模型。而MQI编程则提供了直接与MQ队列管理器接口的编程模型。 WebSphere MQ 的安全性能是通过安全协议和数字证书来保障的。支持数据加密...
这个jar包包含了Atomikos Transactions Essentials的实现,版本为3.5.5,它是一个开源的、高性能的事务处理解决方案。 1. **事务管理**:Atomikos Transactions jar 提供了JTA(Java Transaction API)的实现,遵循...