
Leading the Way: Payara Platform Community 7 Beta Now Fully Jakarta EE 11 Certified
We’re excited to announce that Payara Platform Community 7 Beta application server is now fully certified as Jakarta EE 11 […]
Payara Server 171 was a huge release with lots of new features and improvements on many others. We’ve already written about improvements to the Request Tracing service and had a guest blog about using the email notifier.
The email notifier is just one of a whole host of notifiers we now have available. A lot were added in the 171 release and more are on their way in the imminent 172 release!
The current list of notifiers is:
In this blog, I would like to focus on just one of these notifiers: the JMS notifier.
Since we are on the cusp of the 172 release of Payara Server and Payara Micro, this blog will take a look at an upcoming feature in Payara Micro – the ability to use Payara Micro as a JMS client!
Being derived from GlassFish, Payara Server inherited several editions, including “Full” and “Web” which, for GlassFish, correspond to the Java EE Full and Web Profiles. The Payara Server Full and Web editions contain the same set of APIs, but with the addition of JCache provided by Hazelcast being the sole change.
When we created Payara Micro, we started with the Payara Web edition and added Concurrency utilities and JBatch on top of the already-added JCache API. With the forthcoming 172 release of Payara Micro, we have added the ability to deploy JCA adapters – meaning you can now deploy a JMS resource adaptor (RAR) and use Payara Micro as a JMS client!
{{cta(’77fcdb65-ef13-465d-9e31-cabe74480ece’)}}
Setting up this demo is relatively straightforward, although there are a few things to gather together first. We will use an example I prepared which listens on a specific queue for JMS messages using the JMS 1.1 API (this is because ActiveMQ does not yet support JMS 2.0)
The key parts of the relevant class – JMS11NotificationConsumer.java – are shown below:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "jms/notifierQueue"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "notifierQueue"),
@ActivationConfigProperty(propertyName = "resourceAdapter", propertyValue = "activemq-rar-5.14.5")
})
public class JMS11NotificationConsumer implements MessageListener {
public JMS11NotificationConsumer() { }
@Override
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message;
System.out.println("Read Message: " + txtMsg.getText());
}
} catch (Exception ex) {
Logger.getLogger(JMS11NotificationConsumer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
You will need to make sure you have everything prepared in advance before following along with this blog. Do be aware that you need version 172 of Payara Micro, which may mean you need to download our snapshot build to preview the feature we’re looking at. Our snapshot builds are always available from the website and track the master branch from our public GitHub repository:
Below is a checklist of everything you will need to download to follow along with this blog:
If you haven’t already cloned the Payara Examples repository, then you will need to do that now:
git clone https://github.com/payara/Payara-Examples.git
Next, change to the JMS11NotificationConsumer directory where the module’s pom.xml is located and check out the right tag:
cd Payara-Examples/payara-services/notification-service-examples/JMS11NotificationConsumer
git checkout 2017.05.18
And finally, use Maven to build the JAR and install to your local Maven repository:
mvn clean install
Once that has completed, you should have an EJB JAR file that you can deploy to Payara Micro. It can’t be deployed yet, however, because Payara Micro doesn’t ship with any JMS RAR file.
Payara Micro 171 introduced the ability to supply asadmin commands in files. Since you can’t interact with Payara Micro on the command line after it has been started, we had to consider timing; certain commands need to be run later than others. For this example, we need to create a post-deploy.asadmin file with the following contents:
create-resource-adapter-config --property ServerUrl=tcp://127.0.0.1:61616:UserName='admin':Password='admin' activemq-rar-5.14.5
create-connector-connection-pool --raname activemq-rar-5.14.5 --connectiondefinition javax.jms.ConnectionFactory jms/myConnectionPool
create-connector-resource --poolname jms/myConnectionPool jms/myConnectionFactory
create-admin-object --raname activemq-rar-5.14.5 --restype javax.jms.Queue --property PhysicalName=notifierQueue jms/notifierQueue
deploy /home/mike/.m2/repository/fish/payara/examples/JMS11NotificationConsumer/1.0-SNAPSHOT/JMS11NotificationConsumer-1.0-SNAPSHOT.jar
It’s important to note that you may need to change the version number of your ActiveMQ RAR if you are using a different version, and you will need to change the deploy command to point to the resulting JAR file that you have built in step 2. Here, I am using the path to the JAR installed in my local Maven repository, so the path will never change in my environment, even if I run this example from a different directory.
By now, you should have downloaded Payara Micro, built the JMS11NotificationConsumer JAR and downloaded ActiveMQ.
Before we can run Payara Micro, we need to start ActiveMQ. It’s not problematic to start them the other way round, but you will get periodic errors from Payara Micro as it tries and fails to connect to the local ActiveMQ broker every 30 seconds. If you haven’t already extracted ActiveMQ, do that now and then start it with the following command:
java -jar apache-activemq-5.14.5/activemq-all-5.14.5.jar start
Assuming you are in the directory that you downloaded Payara Micro to, you can now start Payara Micro with the following command:
java -jar payara-micro.jar
--deploy activemq-rar-5.14.5.rar
--postdeploycommandfile post-deploy.asadmin --port 9090
This command will result in Payara Micro:
You should now see a message similar to the following at the bottom of the Payara Micro output:
2017-05-16 09:17:25,701 [l #1): worker-3] INFO ActiveMQEndpointWorker - Successfully established connection to broker [tcp://127.0.0.1:61616]
Now, we can configure Payara Server to push notifications to the ActiveMQ queue where our EJB is listening. First, we need to deploy the same RAR to Payara Server (make sure Payara Server is started first!)
asadmin deploy
activemq-rar-5.14.5.rar
Next, rather than create connection resources ourselves, we can simply modify the default connection pool to use the ActiveMQ RAR we have just deployed, either through the admin console, or with the following asadmin command:
asadmin set resources.connector-connection-pool.jms/__defaultConnectionFactory-Connection-Pool.resource-adapter-name=activemq-rar-5.14.5
Now we have connection resources which use the ActiveMQ RAR, we can point the JMS notifier to our broker endpoint:
asadmin notification-jms-configure --password=admin --connectionFactoryName=jms/__defaultConnectionFactory --queueName=notifierQueue --contextFactoryClass=com.sun.enterprise.naming.SerialInitContextFactory --dynamic=true --enabled=true --url=localhost:61616 --username=admin --target=server-config
That’s all the set up we need! Our next step is to prove that it works so, for that, we will enable the CPU checker in the HealthCheck service since we can reliably get regular notifications from it.
To configure the HealthCheck service to log CPU activity every 5 seconds, use the following asadmin commands:
asadmin healthcheck-service-configure-checker-with-thresholds --thresholdWarning=50 --unit=MILLISECONDS --thresholdCritical=80 --checkerName=CPUC --dynamic=true --time=5000 --serviceName=healthcheck-cpu --thresholdGood=0 --enabled=true --target=server-config
asadmin healthcheck-configure --historicalTraceEnabled=false --notifierEnabled=true --dynamic=true --enabled=true --historicalTraceStoreSize=20 --target=server-config
You should now find both the Payara Server logs and our Payara Micro instance begin to log the same CPU checker notifications:
Read Message: Health Check notification with severity level: INFO. (host:mike-payara, server:server, domain:domain1,instance:server)
CPUC:Health Check Result:[[status=GOOD, message='CPU%: .57, Time CPU used: 28 milliseconds'']']
Read Message: Health Check notification with severity level: INFO. (host:mike-payara, server:server, domain:domain1,instance:server)
CPUC:Health Check Result:[[status=GOOD, message='CPU%: .40, Time CPU used: 19 milliseconds'']']
Read Message: Health Check notification with severity level: INFO. (host:mike-payara, server:server, domain:domain1,instance:server)
CPUC:Health Check Result:[[status=GOOD, message='CPU%: .54, Time CPU used: 26 milliseconds'']']
Read Message: Health Check notification with severity level: INFO. (host:mike-payara, server:server, domain:domain1,instance:server)
CPUC:Health Check Result:[[status=GOOD, message='CPU%: .47, Time CPU used: 23 milliseconds'']']
[2017-05-10T08:43:33.320+0100] [Payara 4.1] [INFO] [] [fish.payara.nucleus.notification.log.LogNotifierService] [tid: _ThreadID=71 _ThreadName=healthcheck-service-1] [timeMillis: 1494402213320] [levelValue: 800] [[
Health Check notification with severity level: INFO - CPUC:Health Check Result:[[status=GOOD, message='CPU%: .57, Time CPU used: 28 milliseconds'']']]]
[2017-05-10T08:43:38.320+0100] [Payara 4.1] [INFO] [] [fish.payara.nucleus.notification.log.LogNotifierService] [tid: _ThreadID=71 _ThreadName=healthcheck-service-1] [timeMillis: 1494402218320] [levelValue: 800] [[
Health Check notification with severity level: INFO - CPUC:Health Check Result:[[status=GOOD, message='CPU%: .40, Time CPU used: 19 milliseconds'']']]]
[2017-05-10T08:43:43.319+0100] [Payara 4.1] [INFO] [] [fish.payara.nucleus.notification.log.LogNotifierService] [tid: _ThreadID=71 _ThreadName=healthcheck-service-1] [timeMillis: 1494402223319] [levelValue: 800] [[
Health Check notification with severity level: INFO - CPUC:Health Check Result:[[status=GOOD, message='CPU%: .54, Time CPU used: 26 milliseconds'']']]]
[2017-05-10T08:43:48.319+0100] [Payara 4.1] [INFO] [] [fish.payara.nucleus.notification.log.LogNotifierService] [tid: _ThreadID=71 _ThreadName=healthcheck-service-1] [timeMillis: 1494402228319] [levelValue: 800] [[
Health Check notification with severity level: INFO - CPUC:Health Check Result:[[status=GOOD, message='CPU%: .47, Time CPU used: 23 milliseconds'']']]]
Using Payara Micro as a JMS client, you can now create your own microservice to listen for HealthCheck events and action them based on your own rules. You may notice from the above output that the log notifier from Payara Server will simply show the Healthcheck message, but the JMS notifier also sends out information on the server that is sending the notification. This can help you distinguish between which server is sending events and allow you to take action on a specific server if your conditions are met.
{{cta(‘9e1cfc58-6eae-43d2-8ebd-c1825e874e70’)}}
Share:
We’re excited to announce that Payara Platform Community 7 Beta application server is now fully certified as Jakarta EE 11 […]
Welcome aboard the August 2025 issue of The Payara Monthly Catch! With summer in full swing, things may have felt […]
Enterprise Java applications power global commerce, healthcare, government and countless other industries. These systems must be scalable, secure and […]
Great article
well, activemq artemis does support JMS 2.0, any plans for supporting that in payara micro? https://activemq.apache.org/artemis/
It seems that Artemis provides a resource adapter so it could be used with Payara Micro as well. See the Artemis example project at https://github.com/apache/activemq-artemis/tree/master/examples/features/sub-modules/artemis-ra-rar
The example resource adapter is also available in maven: http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.activemq.examples.modules%22%20AND%20a%3A%22artemis-rar%22
The problem is that there’s little official documentation for it. If you manage to configure it with Payara Micro, you can have a look at our JMS 2.0 based notification consumer: https://github.com/payara/Payara-Examples/tree/master/payara-services/notification-service-examples/JMSNotificationConsumer
We plan to try Artemis RAR with Payara Micro and write a blog about it but we don’t have any time schedule for that. If you try it successfully, we’ll be glad if you share a guide with us.
I have the next error when try to connect to activemq: “Resource adapter jmsra is not deployed”, can you help me please.