/**
* set client id
* @param conn jms connection
* @param timeout timeout
* @param unit time unit
* @return Boolean true or false
* @throws LogCollectionException LogCollectionException
* @throws IOException IOException
*/
public static Boolean setClientId(final QueueConnection conn, long timeout,
TimeUnit unit) 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
{
conn.setClientID(UUID.randomUUID().toString());
mailbox.offer(Boolean.TRUE);
}
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 Boolean)
{
return (Boolean)result;
}
if (result instanceof JMSException)
{
closeConn(conn);
throw new LogCollectionException("IO Execption",
(JMSException)result);
}
throw new IOException("Unknown reason!");
}
/**
* wrapper cause.
* @param <T> throwable
* @param wrapper cause wrapper
* @param wrapped throwable
* @return
*/
private static <T extends Throwable> T initCause(T wrapper,
Throwable wrapped)
{
wrapper.initCause(wrapped);
return wrapper;
}
/**
* close connection
*
* @param conn jms connection
*/
private static void closeConn(Connection conn)
{
if (conn != null)
{
try
{
conn.close();
}
catch (JMSException e)
{
LOGGER.error(e.toString(), e);
}
}
}
}
/**
* 内部私有类
* 线程工厂,ExecutorService调用newThread方法自动创建线程。
* @version [版本号,YYYY-MM-DD]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
class DaemonThreadFactory implements ThreadFactory
{
public Thread newThread(Runnable r)
{
Thread t = Executors.defaultThreadFactory().newThread(r);
t.setDaemon(true);
return t;
}
}
* set client id
* @param conn jms connection
* @param timeout timeout
* @param unit time unit
* @return Boolean true or false
* @throws LogCollectionException LogCollectionException
* @throws IOException IOException
*/
public static Boolean setClientId(final QueueConnection conn, long timeout,
TimeUnit unit) 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
{
conn.setClientID(UUID.randomUUID().toString());
mailbox.offer(Boolean.TRUE);
}
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 Boolean)
{
return (Boolean)result;
}
if (result instanceof JMSException)
{
closeConn(conn);
throw new LogCollectionException("IO Execption",
(JMSException)result);
}
throw new IOException("Unknown reason!");
}
/**
* wrapper cause.
* @param <T> throwable
* @param wrapper cause wrapper
* @param wrapped throwable
* @return
*/
private static <T extends Throwable> T initCause(T wrapper,
Throwable wrapped)
{
wrapper.initCause(wrapped);
return wrapper;
}
/**
* close connection
*
* @param conn jms connection
*/
private static void closeConn(Connection conn)
{
if (conn != null)
{
try
{
conn.close();
}
catch (JMSException e)
{
LOGGER.error(e.toString(), e);
}
}
}
}
/**
* 内部私有类
* 线程工厂,ExecutorService调用newThread方法自动创建线程。
* @version [版本号,YYYY-MM-DD]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
class DaemonThreadFactory implements ThreadFactory
{
public Thread newThread(Runnable r)
{
Thread t = Executors.defaultThreadFactory().newThread(r);
t.setDaemon(true);
return t;
}
}
发表评论
-
NIO入门
2012-07-25 17:40 698见附件!!!! -
Axis-Webservice课程
2012-07-10 11:40 1917http://hi.baidu.com/annleecn/ ... -
SSL安全socket的通讯实例
2012-06-07 17:52 1084学习了SSL的基本原理后. ... -
使用keytool来创建管理密钥及证书
2012-06-07 17:51 1794使用SSL来实现安全加密通讯需要有密码对及公钥证书等.. ... -
SSL+socket
2012-06-07 17:20 956Java代码 服务器端代码: ... -
用SSL构建安全的Socket
2012-06-07 16:38 1373SSL(安全套接层)是 Netscape公司在1994年开发的 ... -
keytool 用法总结
2012-06-07 16:37 15114内容概览: keytool的几个常用的命令。 1.创建证书 ... -
XStream实现Object与XML转换解决方案
2012-06-05 11:16 1107方案说明: 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`和...
JMS的这两种模式为企业级应用提供了灵活的异步通信解决方案,适用于需要解耦组件、提高系统稳定性和容错能力的场景。例如,P2P模式适合对消息处理顺序有要求且每个消息必须被唯一处理的场景,而Pub/Sub模式适合需要...
11.11.2 解决方案 472 11.11.3 工作原理 472 11.12 使用GORM查询 475 11.12.1 问题 475 11.12.2 解决方案 475 11.12.3 工作原理 475 11.13 创建自定义标记 477 11.13.1 问题 477 11.13.2 解决方案...
11.11.2 解决方案 472 11.11.3 工作原理 472 11.12 使用GORM查询 475 11.12.1 问题 475 11.12.2 解决方案 475 11.12.3 工作原理 475 11.13 创建自定义标记 477 11.13.1 问题 477 11.13.2 解决方案...
"Java并发编程与高并发解决方案"这一主题涵盖了多个重要的技术概念和实践策略,旨在提高系统处理大规模并发请求的能力,保证服务的稳定性和性能。 首先,线程池(threadpool)是Java并发编程中的核心组件。通过复用...
总结,利用Websphere MQ的持久化消息特性,结合SpringMVC,我们可以设计出一个可靠的同步处理方案。这种方案虽然牺牲了一定的性能,但确保了业务流程的顺序性和数据一致性,对于那些对实时性和准确性有较高要求的...
Atomikos是Java平台上的一个强健的事务管理解决方案,它支持JTA(Java Transaction API)标准,可以处理复杂的分布式事务场景。 首先,我们需要理解什么是XA事务。XA事务是一种两阶段提交(2PC)协议,用于协调跨多...
ActiveMQ作为JMS的一个实现,提供了一种标准化的消息传递解决方案,适用于构建高并发、高可靠性的分布式系统。其点对点和发布/订阅模式满足了不同场景下的需求,而丰富的特性和广泛的语言支持使其成为许多企业级应用...
2. **activemq消息确认机制**:activemq允许消费者确认消息的接收,以确保消息已被正确处理,可以选择自动或手动确认模式。 3. **activemq持久化机制**:activemq通过将消息写入磁盘来实现持久化,即使服务器重启,...
3. **事务协调器**:Atomikos包含一个事务协调器,它负责监控和控制事务的生命周期,包括开始、提交、回滚和超时处理。协调器通过两阶段提交(2PC)协议确保所有参与事务的节点都能达成一致。 4. **可扩展性**:...
总的来说,`activemq-pool.jar`是ActiveMQ的重要组成部分,对于处理大量并发消息传递的Java应用来说,它提供了一种高效且可扩展的连接管理方案,降低了系统的资源消耗,提升了整体性能。正确理解和使用这个库,对于...
Atomikos Transactions Hibernate3是一个专为Java环境设计的事务处理解决方案,它主要为Hibernate3提供了一个强大的、可扩展的事务管理器。这个解决方案的核心在于Atomikos Transactions,这是一个开源的、企业级的...
2. **sleep()和wait()的区别**:sleep()是Thread类的一个静态方法,用于暂停当前线程的执行一段时间,不释放锁;wait()是Object类的方法,它使当前线程等待,直到被其他线程唤醒或超时,会释放持有的锁。 3. **线程...
【Java与TIBCO EMS Queue交互】 在Java应用程序中,使用TIBCO Enterprise Message Service (EMS) 来...此外,理解JMS API的其他部分,如Topic、MessageListener和持久化,将有助于构建更健壮的分布式消息传递解决方案。
这个jar包包含了Atomikos Transactions Essentials的实现,版本为3.5.5,它是一个开源的、高性能的事务处理解决方案。 1. **事务管理**:Atomikos Transactions jar 提供了JTA(Java Transaction API)的实现,遵循...
2. 配置Atomikos,包括设置事务超时时间、数据源等。 3. 在服务层,使用`UserTransaction`接口或`@Transactional`注解来声明事务边界。 4. Atomikos会自动检测到这些事务边界,并在后台处理事务的提交或回滚。 通过...
JMS API为消息的持久性、优先级、超时、交易、确认和消息选择器等提供了编程模型。而MQI编程则提供了直接与MQ队列管理器接口的编程模型。 WebSphere MQ 的安全性能是通过安全协议和数字证书来保障的。支持数据加密...
2. 容错与故障恢复:使用心跳检测、超时重试、幂等性设计等手段保证系统的高可用性。 3. 性能优化:通过缓存、异步处理、批量操作等方式提高分布式系统性能。 六、实战案例分析 本教程还将包含实际项目中的分布式...