JNDI support differences between Tibco EMS and ActiveMQ
Introduction
Recently our team was working on Veracity Quick Start sprint, when I was trying to migrate the JMS provider implementation from Tibco EMS to ActiveMQ. I found that there are notable differences between these two JMS implementations on their JNDI support, which will be illustrated below.
Code to demonstrate
Code below is a main function which use Java JNDI API to retrieve JMS queue and topic. We will try each implementation by put relevant INITIAL_CONTEXT_FACTORY and PROVIDER_URL into the props object.
public class Main { public static void main(String[] args) throws Exception { Properties props = new Properties(); // ActiveMQ // props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); // props.put(Context.PROVIDER_URL, "tcp://localhost:61616"); // Tibco props.put(Context.INITIAL_CONTEXT_FACTORY, "com.tibco.tibjms.naming.TibjmsInitialContextFactory"); props.put(Context.PROVIDER_URL, "tibjmsnaming://localhost:7222"); // create a new intial context javax.naming.Context ctx = new javax.naming.InitialContext(props); // lookup an existing topic javax.jms.Topic myTopic = (javax.jms.Topic) ctx.lookup("MyTopic"); System.out.println(myTopic); // lookup an existing queue javax.jms.Queue myQueue = (javax.jms.Topic) ctx.lookup("MyQueue"); System.out.println(myQueue); } }
Try Tibco EMS
When using Tibco EMS, in order to let the code run successfully, i.e. retrieved myTopic and myQueue objects:
1) There must be a Tibco JMS server running on localhost:7222.
2) A topic named MyTopic and a queue named MyQueue must already be defined.
No other configuration files needed.
Try ActiveMQ
When you try ActiveMQ(uncomment line 5 and 6, and comment line 9 and 10), things are little different:
1) You don’t need to have MyTopic and MyQueue already exists on ActiveMQ server.
2) You even needn’t have a server running at localhost:61616.
3) Put a jndi.properties file on your class path, in which you predefined the wanted queues and topics:
Or use a little different syntax when invoke lookUp in your java code: use dynamicTopics/MyTopic instead of MyTopic, and dynamicQueues/MyQueue instead of MyQueue.
Conclusion
I checked the documentation of both products, also relevant sections in the book ActionMQ in action, and figure out the differences about their JNDI capability:
1) Tibco EMS implements a server-side JNDI provider, you actually need to communicate to server to get your defined queues and topics.
2) ActiveMQ implements a client-side JNDI provider, no communication with server is needed.
When you get queue or topic object by a name passing to lookUp(), it doesn’t means they already exist on server, nor they will be created at that moment. ActiveMQ queues and topics are dynamically created when you actually use them, for example, when you actually send a message to a queue.
Suffice to say, the JNDI support is completely local and has nothing to do with server.
JNDI support differences between Tibco EMS and ActiveMQ的更多相关文章
- tibco EMS 8.2.0安装
安装环境 序号 项目 值 1 OS版本 Red Hat Enterprise Linux Server release 7.1 (Maipo) 2 内核版本 3.10.0-229.el7.x86_64 ...
- Spring 整合 Tibco EMS
参考文档: http://haohaoxuexi.iteye.com/blog/1893038 http://www.blogjava.net/chenhui7502/archive/2011/08 ...
- TIBCO EMS安装部署
创建用户 groupadd -g 800 tibcouseradd -u 801 -g tibco -d /home/tibco/ -s /bin/bash tibco 目前关于sharedatast ...
- ActiveMQ(5.10.0) - JNDI Support
1. Place the jndi.properties file on the classpath. java.naming.factory.initial = org.apache.activem ...
- python 使用 tibco ems
emshelper.py #encoding=utf-8 import jpype jvmpath=r"C:\Program Files\Java\jre1.8.0_161\bin\serv ...
- 使用Tomcat、JNDI与ActiveMQ实现JMS消息通信服务
前言 之所以使用JNDI 是出于通用性考虑,该例子使用JMS规范提供的通用接口,没有使用具体JMS提供者的接口,这样可以保证我们编写的程序适用于任何一种JMS实现(ActiveMQ.HornetQ等) ...
- Table of Contents - ActiveMQ
Getting Started ActiveMQ 的安装 Hello World Configuring Standard ActiveMQ Components Connecting to Acti ...
- eclipse内嵌jetty(run-jetty-run插件) 配置jndi数据源
运行环境 java 6,eclipse juno,ssh(spring,hibernate,springmvc ) 1.离线安装 下载地址:http://pan.baidu.com/s/1qX67wO ...
- 基于ActiveMQ的统一日志服务
概述 以ActiveMQ + Log4j + Spring的技术组合,实现基于消息队列的统一日志服务. 参考:Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析 与参考文章的比较 ...
随机推荐
- Repeater实现数据绑定
Repeater基础 在aspx文件中加入Repeater 控件,在<ItemTemplate></ItemTemplate>包含的范围里加入自己控制的代码,需要替换的变量使用 ...
- PHP学习笔记13淘宝接口开发一例(tmall.items.discount.search),PHP
程序设计,因为接口是有请求次数限制的,正式接口也只有2W次每天的请求次数,所以我们需要把从接口返回的数据缓存起来. 采用的接口是http://api.taobao.com/apidoc/api.htm ...
- UVA 10375 Choose and divide
n! 分解素因子 快速幂 ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n] 其中[]为取整 ei 为数 N!中pi 因子的个数: #include <iostream& ...
- Windows下Node.js开发环境搭建
1.http://nodejs.org/下载node.js运行环境安装 2.打开DOS命令行 .安装express框架 1 >npm install express 末尾显示如下为安装成功 .安 ...
- MFC 遍历FTP服务器目录中文乱码问题
在编写FTP客户端的时候我用的是server u来做我的测试服务器,而server u 默认使用utf-8作为默认字符集,vs则使用unicode作为默认字符集,所以会产生乱码,将server u的默 ...
- COB(Chip On Board)的製程簡單介紹
前面提及 COB 的生產與 IC 的封裝製程幾乎是一致的,除了把 leadframe 改成了 PCB,把封膠由 molding 改成 dispensing,少了 triming & marki ...
- DotNet 资源大全(Awesome最新版)
发表时间:2016-09-20 21:34:58 编辑:机器猫 阅读:136次 目录 API 应用框架(Application Frameworks) 应用模板(Application T ...
- xhost
xhost 是用来控制X server访问权限的. 通常当你从hostA登陆到hostB上运行hostB上的应用程序时,做为应用程序来说,hostA是client,但是作为图形来说,是在hostA上显 ...
- VC++自绘界面
// MySkinDlg.cpp : implementation file // #include "stdafx.h" #include "MySkin.h" ...
- linux服务器开发浅谈
[开发前准备] 在进行linux服务器开发之前,必须很清楚地了解所开发的对象需要考虑的相关问题比如:功能架构:提供服务的模块体系结构稳定性:服务器的出core率,内存泄露情况性能:请求与返回的速度与正 ...