I am trying to connect to a foreign JMS provider from Websphere Application Server.
Can we connect to a remote JMS provider from Websphere Application Server without using Websphere MQ?
You don't need WebSphere MQ, if your provider supports JMS 1.1 you can configure it as Generic JMS Provider. See the following page as a startnig point: Choosing a messaging provider
Choose a third-party messaging provider. You can use any third-party
messaging provider that supports the JMS Version 1.1 unified
connection factory. You might want to do this, for example, because of
existing investments.
Notes:
To administer a third-party messaging provider, use the resource adaptor or client supplied by the third party. You can still use the
WebSphere Application Server administrative console to administer the
JMS connection factories and destinations that are within WebSphere
Application Server, but you cannot use the administrative console to
administer the JMS provider itself, or any of its resources that are
outside of WebSphere Application Server.
To use message-driven beans (MDBs), third-party messaging providers must include Application Server Facility (ASF), an optional feature that is part of the JMS Version 1.1 specification, or use an inbound resource adapter that conforms to the Java EE Connector Architecture (JCA) Version 1.5 or 1.6 specification.
Related
We have a requirement for one standalone Java application that can push JMS message to a JMS queue configured on Weblogic, Websphere and JBoss application server.
Is there any generic JMS client library available, that we can use in our application for pushing the messages to any or all of these servers?
As we understand, there is a specific JMS client for each server (for e.g. wljmsclient.jar required for Weblogic target server, as we would need weblogic.jndi.WLInitialContextFactory to be available as Initial Context factory class, similarly for Websphere and JBoss). And we would like to avoid having 3 different JMS client libraries (1 each for server) in the same application.
However, the catch here is, destination server is not known during compilation time. Only during runtime, it will be known whether the given message is to be pushed to Weblogic, Websphere or JBoss server or all of them. Hence, there is a need for a deployed application to support all 3 servers during runtime.
Is there any alternative generic JMS client library?
You can develop your own client that supports the 3 servers.
Basically you need to have for your standalone application :
The different JMS provider jar on the classpath
For example a jms_config.properties file which stores the configuration for each server (initial context factory, etc.)
Then from a generic code you can build the InitialContext, JMS Queues, etc. depending on the target server.
An earlier question on interoperating with MQ Series and a pure open-source solution was answered partly with:
"The one exception is that WebSphere App Server Messaging Engines can interoperate with WMQ. These are pure JMS messaging engines written in Java but they understand the WMQ formats and protocols and appear to WMQ as another QMgr. So if you have WAS you can talk to WMQ without a WMQ client or another QMgr."
(http://stackoverflow.com/questions/18236860/can-we-talk-to-remote-websphere-mqseries-purely-with-non-websphere-mqseries-soft)
The documentation I've read through says that
WebSphere Application Server using WebSphere MQ link can operate with a service integration messaging engine or queue-sharing group.
So as I understand it, if you have WAS and WebSphere MQ link you could connect an WebSphere esb to an exterior MQ Series QMgr and look like a QMgr to that exterior MQ Series QMgr.
Without a WebSphere esb though can WAS act like a MQ QMgr and somehow manage third-party JMS messaging providers like ActiveMQ?
Thanks for any help
I believe you are mixing up capabilities.
WAS can absolutely appear to WMQ as another QMgr when using the WMQ Link. The QMgr appears to WAS in this configuration as another Service Integration Bus.
Service Integration Bus or SIB is the WAS abstraction for a JMS transport provider. It isn't the same thing as IBM's Enterprise Service Bus (ESB) product. Both talk to WMQ but WAS is in no way dependent on the ESB product to do so.
Either WMQ or any other pure JMS transport can be configured in WAS as a Foreign JMS Provider. The administrator points WAS to the JMS classes provided by the transport provider. These can include Active MQ.
There is no concept of WAS seeing WMQ but managing some other transport such as Active MQ. WAS can use normal JMS API calls to interact with Active MQ or any other transport provider. It can also make use of whatever administration API is provided by that transport provider using that provider's administration API. Since both WAS and MQ are IBM products, the integration is a bit tighter between them which is why you can use WMQ natively whereas other JMS transports must be configured as foreign JMS providers.
I am developing a service for JMS messaging using IBM WMQ version 7.5 as Message oriented middleware. I am in a dilemma. The IBM specification says to use WebSphere MQ JMS API in JAVA EE environment. My sender and receivers will be in remote JBoss deployments. IBM provides a resource adapter to connect via JCA. This connection requires static administration of components such as Queue managers, queue channels, queue names.
Is JCA the best I can do ? Is there any other way where I can dynamically create the queues provided that I know other configuration details ? There will be multiple applications using this setup running on their own servers. If I use JCA, all have to make their own configurations. Can I make dynamic configurations ?
Typically within the application server environment resources would be created in some JNDI context. These would be Connection Factories and Destinations.
Depending on the app server, it may be possible to share this configuration across a network of individual servers. So typically there would be some set of static definitions.
However within say a servlet the MQConnectionFactory can be dynamically created.
In all cases the backing WMQ Resources do need to exist; though it is possible to send administrative command messages to WMQ to create queues and do other admin. The only exception is topics, accessing a topic string brings it into existence. Though this has default security properties that you might not want.
Is Oracle Service Bus supported by any application server in the backend - for eg: weblogic application server? Or does it have its own implementation of application server?
Tibco has something called EMS which is its implementation of JMS spec. Does OSB have its own implementation of JMS? Or does it utilize the capabilities of any application server which it is integrated with?
OSB runs on Weblogic and it is the only suppoorted application server. Some other fussion Middleware products can run on WebShpere. Details can be found in http://www.oracle.com/technetwork/middleware/downloads/fmw-11gr1certmatrix.xls
OSB don't have its own JMS implementation. It can use any standard JMS (e.g. one shipped with Weblogic). It has also adapters for IBM WebSphere MQ.
Currently I am working on a JMS application. But I use plain JMS API and Property file for configurations. My application is running in Weblogic and connects to MQ series server of my client.
Recently I got to know I can use Weblogic for JMS configurations.
Please explain.
What is "Foreign JMS provider"?
Is Weblogic also a JMS server or Foreign JMS provider or Both?
Weblogic provides the JMS Server features fully compliant with all JMS spec elements such as ConnectionFactory and Destinations. On this JMS Server you can connect and send messages to the client's Messaging Server via a configured Destination.
In addition using Weblogic as the JMS Server gives you lot many features such as Message Retry in case of failure, setting message quotas as well as enhanced monitoring of the JMS Server to track errors. The idea is to have more configuration driven settings for performance, deadlocks, tuning, filestore or database store etc.
A full list of such features is given at http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jms/fund.html#wp1071787
A Foreign JMS Provider in Weblogic is the term used to define JMS implementations other than Weblogic JMS. An example is IBM MQ in your case.
Once the Foreign Provider is configured within Weblogic, for all practical purposes within the code - it can be called as if it was on local JNDI lookup. Weblogic will make the remote calls transparent to your code. This allows you to change your destination via configuration on the Weblogic console.
You will need a Messaging Bridge within Weblogic JMS Server to connect a source destination from which messages are received, and a target destination to which messages are sent.
Some essential reading on this is at: http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jms_admin/advance_config.html#wp1075917
and an example of configuring IBM MQ as a Foreign Provider is at http://www.ibm.com/developerworks/websphere/library/techarticles/0604_kesavan/0604_kesavan.html#N1011D