Using JMS in .Net Applications

I was asked recently what we could do about allowing .Net applications to participate in pub/sub environments alongside Java applications.  It turns out that WebLogic Server, since 10.3, has a built-in .Net JMS client, which allows us to easily write JMS programs in C#.  This client supports most of the JMS 1.1 standard (the exceptions being to do with temporary queues and topics) and several of the WebLogic extensions too.  It supports pub/sub and persistent and non-persistent messaging.  Even durable subscriptions!

You can find some documentation on the client at http://download.oracle.com/docs/cd/E15523_01/web.1111/e13746/develop.htm

In this post, I will show you how easy it is to build a simple JMS client in C#.  In the images I am using Visual C# 2008 Express Edition, which is freely available from Microsoft’s web site for anyone who would like to try this out, but does not have access to a full install of Visual Studio.  Everything will work with the Express Edition.

Preparation

First of all, you will need a WebLogic Server (10.3 or later) with JMS set up.  At the very least you need a Connection Factory and a Queue.  If you don’t know how to set it up, take a look at this earlier post.

You will also need the WebLogic JMS .NET client, which is installed in the following directory on the WebLogic Server platform:

MW_HOME/modules/com.bea.weblogic.jms.dotnetclient_x.x.x.x

There is a WebLogic.Messaging.dll in that directory.  Take a copy of that file, you will need it later.  There is also a pdb if you want to be able to debug!

Note that the library will be there regardless of the server platform.  In this post, I am using a WebLogic Server running on Oracle Enterprise Linux.  The server does not need to be running on Windows.

Creating the Client

Now we are ready to create our C# JMS client.  In Visual Studio, create a New Project.  I chose Console Application, you may want to be more creative!

I called my project JMS.  An empty project will be displayed, as shown below.

Now we need to add a reference to our WebLogic.Messaging.dll.  This is done by right clicking on the References in the Solution Explorer and selecting Add Reference…

In the dialog box, switch to the Browse tab, and locate the dll you copied earlier.  Click on OK to add it to your project.

Now you are ready to add the code to your Class.  You can copy my code from below.  The comments explain what is going on.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebLogic.Messaging;
namespace JMS
{
class Program
{
private static string host = "ec2-67-202-24-135.compute-1.amazonaws.com";
private static int port = 8001;
private static string cfName = "weblogic.jms.ConnectionFactory";
private static string queueName = "jms/marksQueue";
private static string username = "weblogic";
private static string password = "welcome1";
static void Main(string[] args)
{
// create properties dictionary
IDictionary<string, Object> paramMap = new Dictionary<string, Object>();
// add necessary properties
paramMap[Constants.Context.PROVIDER_URL] =
"t3://" + host + ":" + port;
paramMap[Constants.Context.SECURITY_PRINCIPAL] = username;
paramMap[Constants.Context.SECURITY_CREDENTIALS] = password;
// get the initial context
IContext context = ContextFactory.CreateContext(paramMap);
// lookup the connection factory
IConnectionFactory cf = context.LookupConnectionFactory(cfName);
// lookup the queue
IQueue queue = (IQueue)context.LookupDestination(queueName);
// create a connection
IConnection connection = cf.CreateConnection();
// start the connection
connection.Start();
// create a session
ISession session = connection.CreateSession(
Constants.SessionMode.AUTO_ACKNOWLEDGE);
// create a message producer
IMessageProducer producer = session.CreateProducer(queue);
producer.DeliveryMode = Constants.DeliveryMode.PERSISTENT;
// create a text message
ITextMessage textMessage = session.CreateTextMessage("Hello from .Net!!");
// send the message
producer.Send(textMessage);
// CLEAN UP
connection.Close();
context.CloseAll();
}
}
}

You can now Build (F6) and Run(F5) your code.  If all went well, it should have put a message on the queue containing the text “Hello from .Net!!” which we should be able to see from the WebLogic console.

In the WebLogic console (again, see this earlier post if you are not sure how to get there) navigate to your queue.

Click on the name of the queue to view details, and then open the Monitoring tab.

You should see that you have a message in the queue.  Click on the check box beside the queue and the click on the Show Messages button.  You will now see a list of messages in the queue.

Click on the message ID to view more details of the message, including the content (payload).

There it is!  So you see that it can be very easy to create a C# JMS client.  The documentation that I mentioned at the beginning of this post contains a lot more information and some sample code.  There is also API level documentation there to help you explore further.  Good luck!



											

About Mark Nelson

Mark Nelson is an Architect ("IC6") in the Platform Architecture Team in Oracle Development. Mark's focus area is continuous delivery, configuration management and provisioning - making it simple to manage the configuration of complex environments and applications built with Oracle Database, Fusion Middleware and Fusion Applications, on-premise and in the cloud. Before joining the Platform Architecture team, Mark was a senior member of the A-Team since 2010, and worked in Sales Consulting at Oracle since 2006 and various roles at IBM since 1994.
This entry was posted in Uncategorized and tagged , , , . Bookmark the permalink.

One Response to Using JMS in .Net Applications

  1. Pingback: An updated simple WebLogic JMS client in .Net (C#) « RedStack

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s