I have an application which uses JMS api. The Application server used is jboss-5.0.0.CR2. Is there any way to get the version of JMS used?
Here is how to distinguish between JMS version 1.1 and 2.0.
JMS 2.0 API consists of three new interfaces: JMSContext,
JMSProducer, and JMSConsumer
JMSContext replaces the separate Connection and Session objects in
in version 1.1 with a single object.
JMSProducer replaces MessageProducer object in version 1.1
JMSConsumer replaces the MessageConsumer object in version 1.1
More details:
http://www.oracle.com/technetwork/articles/java/jms20-1947669.html
jboss-5.0.0.CR2 is the application server version - not the JMS provider. From what I know, HornetQ is the JMS implementation which JBoss uses. Anyway, since JBoss 5 is Java EE 5 compliant, the JMS API version has to be 1.0. Java EE 6 aligns with JMS 1.1 and Java EE 7 has the latest JMS specification version i.e. 2.0
Related
Currently in Weblogic we are running two applications and communicating through JMS Queue. Now one of the application we are moving to Liberty Server. What are the configuration we need to do for JMS Queue connection between Weblogic and Websphere.
Depending on which JMS Provider are you using, you have several options:
if provider has compatible JMS Resource Adapter (e.g. WebSphere MQ) - you can use that RA together with Liberty jca feature
if provider has a sort of thin client, you can embed that client libraries together with your application, and manually setup connection
if your current provider doesn't support any of above, you can use external JMS server that has compatible JMS RA (for example WebSphere MQ) and integrate it with both WebLogic and Liberty.
Update based on comments
There is no simple way to access Liberty JNDI externally - see this post Connect to Websphere Liberty jmsServer from remote application server
You could try to access embedded JMS via API. It is discussed here: https://www.ibm.com/mysupport/s/question/0D50z000062ktc3CAA/helloworld-jms-client-connecting-to-embedded-liberty-jms-server?language=en_US
But to be honest, if I were you I would either:
use external JMS Provider that is compatible with both runtimes e.g. WebSphere MQ
or rewrite interface between WebLogic and Liberty to REST, so that WebLogic invokes via REST simple application that reads the request and puts it to the queue in embedded Liberty JMS engine to avoid calling JMS engine externally.
I would like to avoid dependency on ActiveMQ. Is there a way to make JBossFuse to use WebSphereMQ ? (I'm assuming activeMQ is required for framework to run - internal dependency)
The description on jboss fuse site reads like..
Core messaging is provided by Apache ActiveMQ, services framework (SOAP, XML/HTTP, RESTful HTTP)...
PS:
Arguements like "it would be innefficient, expensive" etc, need not be considered at this stage. Reason for prefering WebSphereMQ is beyond my control.
No you can use JBoss Fuse without ActiveMQ at all. For example the minimal distribution does not come with AMQ pre-installed.
JBoss Fuse allows you to slice and dice what you want pre-installed.
If you want to use WebSphereMQ then you can do that, though that would be under the assumption that WebSphereMQ as a server is running in another JVM / box. And that JBoss Fuse would act as a client to that broker. If so you can install the WebSphereMQ Java Client JARs in Jboss Fuse and use that.
We have an old JBoss 3.2.3 server which hosted an application and exposed EJBs for remote access.
This application has only received minor maintenance in years, and we did not put some effort to migrate it to newer releases of the app server.
Now, we are integrating it with another application, and we have a requirement to also expose SOAP Web Services.
At first, I wasn't worried, since JBoss 3.2.3 announces compliance with the J2EE 1.4 spec (JSR151), which specifies the APIs for web services: web services (JSR109) and JAXRPC (JSR101).
However, my first deploy using the JAX-RPC api failed, because JBoss did not find the JAX-RPC classes.
So my questions are:
Is JBoss 3.2.3 really a J2EE 1.4 app server ? The lack of JAX-RPC classes seem to indicate otherwise.
What are the APIs for exposing a web services in JBoss 3.2.3 ?
What are the APIs for consuming a web services from an EJB deployed in JBoss 3.2.3 ?
In the end, I can always deploy additional APIs and libraries with my application, but I'd like to avoid overlapping existing libraries.
JBoss 3.2.3.GA is not a fully compliant J2EE 1.4 server. For instance, it does not implement the EJB 2.1 interface, only EJB 2.0 [1].
Also, JBoss 4.0 announces being the first J2EE 1.4 compliant server; I conclude that JBoss.org did not certify JBoss 3.2.3 as compliant.
Even though not-compliant, JBoss 3.2.3 has some features for consuming SOAP Web-Services. For instance, it ships with Apache Axis 1.1 and JAX-RPC apis, so one can easily generate java classes for a WS client outside the server and have them run in an enterprise app.
Exposing web services is a more difficult task. One way of exposing web services is to create a Stateless EJB and expose it as a webservice endpoint. However, that's part of the EJB2.1 spec, which is not available in 3.2.3.
Too bad ! In the end, we will look for other alternatives in exposing our web services.
The newer JavaEE specs and servers are so much easier to develop for. It's the old specs and servers that gave JavaEE a bad rep.
I have a topic in the WSO2 ESB 4.6.0 that I want to create subscriptions to at runtime using JMS, to allow pub-sub.
It is documented that the event-broker in 4.6.0 is based on Apache Qpid, however, it doesn't appear to be bundled. By default, an in-memory event broker is configured.
http://docs.wso2.org/wiki/display/ESB460/Eventing
I am using ActiveMQ as my JMS message broker, however, if required, it is possible to change to Qpid.
Has anyone managed to get this working?
Yes. You can use apache Qpid as your JMS broker with WSO2 ESB. It has been tested in production enviornments as well. You can follow the same steps as mentioned in the samples which uses ActiveMQ as the JMS broker.
We are currently using JMS queue in Weblogic.
Can we use same JMS queue in Websphere as part of weblogic to websphere migration.
Is there any other concept available in websphere which can replace JMS queue?
WebSphere Application Server has a built-in JMS provider, due to the Java EE standard which defines it as mandatory (as Arjan Tijms already stated).
Setting up the JMS provider requires a so called Service Integration Bus, which is a simple Messaging Bus inside WebSphere. The Service Integration Bus also allows to setup High Available JMS queues/topics when using WebSphere Application Server Network Deployment.
Using this queues/topics outside of a WebSphere context - by putting messages into the queues from external clients or reading them from external clients - is hard.
Mainly due to the WebSphere internal CORBA communication it is quite tricky to setup a working and stable
configuration - and you need to know some internal WebSphere tricks.
My recommandation is to use internal jms configuration only for applications which are deployed on the same WebSphere Application Server-Configuration.
If you really need external access to the JMS queues/topics, you should write a adapter to access it.
This blog post describes in detail how to setup a simple WebSphere internal JMS configuration.
WebSphere has indeed an internal JMS provider. It's accessed using the SIB (Service Integration Bus). See http://www.packtpub.com/article/messaging-with-websphere-application-server-7.0-part1
WepSphere has JMS queues as well. Are you wanting to have the queue running within WebSphere, or are you trying to point to a queue running elsewhere?
Yes, you can.
Configuration depends on your JMS System.
If your JMS Middleware is running external like ApacheMQ or Swift JMS, you can normally install an Resource Adapter and then use that specific configuration (at least for the Jms configuration). Then you can use Websphere's JMS Configuration (like Queues and Topics) and therefor your normal MDB configuration.
Besides ActivationSpec (like above) at least with Websphere MQ you could use Listener Ports. I don't know if Listener Ports are available for other JMS Products.
If you want to use a built in Messaging System, you can use SIB I guess.
So plenty of options depending on your System.
A JMS provider is mandated by the Java EE specs so every application server has an inbuilt JMS Provider.
You have to make the right calls about your application needs. There might be valid reasons to use an external JMS provider such as WebSphere MQ.