Jboss EAR with EJB and webservice health monitoring and management - jboss

I am using Jboss5.1 and I have a EAR1 deployed which has a EJB3 component implemented using #Stateless annotation and the same EJB is also exposed as webservice using the annotation #webservice.
I want to check through a EJB service/management service bean(Packaged in another EAR2) from the start of deployment to un-deployment of EAR1 PERIODICALLY, if the EJB and Webservice is deployed and running properly and working normally and is not in deadlock/non responsive state.
I have looked into JMX and I am able to get notifications of create and destroy for EJB as well as webservice, but how to check periodically whether the EJB and webservice is working normally and is not in deadlock/non responsive state?
Also how to monitor Jboss ESB services?
Is the JMX is the only way or does jboss provides any other API's to do monitoring how about JBOSS MONITORING
Thanks in advance if you are looking at this.

Especially JBoss AS5.x is using the so called profile service (PS) as the main way to interact with the server. Unfortunately the PS is not JMX-based and on the other side you don't see all EJBs in the Platform MBean server.
RHQ has a plugin to monitor EJB instances inside AS5 as well as for other resource types like JBoss ESB or Apache Tomcat and is able to determine the availability of EJBs.
but how to check periodically whether the EJB and webservice is
working normally and is not in deadlock/non responsive state?
This is usually something that you can (only)(*) determine by hitting the relevant beans/methods and evaluating the outcome.
*) It may be possible to determine a bean in a deadlocked state by requesting a heap dump and looking for deadlocked periodically.

Related

REST Spring Boot Web Service on Websphere 9

I want to create a Spring Boot REST Web Service and deploy and publish it in Traditional Websphere 9 Application Server. Is it possible ?
What all challenges I might encounter? Can someone please provide me few pointers for reference?
Yes this can be done. It is not a good design, but yes it can be done. Back in the day when I was working for a big bank, they deployed java spring-boot microservices in IBM websphere(Not liberty).
How to do it?
1) Package your deployable as war. You can do this by editing your pom to package as WAR.
2) You can either add connection string config in your springboot starter class or get a JNDI created in the websphere instance. We observed that performance of the API's improved when the app used websphere JNDI as opposed to app created connection bean.
3) If you use IBM MQ, the best course of action is get a non-ssl and ssl based channel created at MQ and a JNDI for the MQ connection as well.
4) If you plan to create MQ connection beans within the app, like we did, ensure the JKS file has all the valid set of signers of your org.
Problems we faced
1) Our app used a lot of third party rule engine like drools, so ensure the websphere server.xml is configured to servlet version 3.1 or higher
2) Webshpere admin console is helpful, but don't just blindly believe if it says green to your container, always check your app logs for errors.
3) Common pain points are establishing a successful connection with IBM MQ host. Get a MQ server admin to troubleshoot all MQRC errors.
4) If you plan to use Oracle as backend, ensure the DBA has created a wallet for you to enable both SSL and Non SSL connections. Some organisations are picky with non-sssl db connections. It is easier to handle all this if you leverage webspehere JNDI for DB connections.
Let me know if this helped.
Both WebSphere Traditional and WebSphere Liberty support Spring boot.
Are you looking for something like this?
http://www.adeveloperdiary.com/java/spring-boot/deploy-spring-boot-application-ibm-liberty-8-5/

JMS web application with Eclipse and WebSphere Application Server

I am new to JMS and WAS. I am grateful if someone provides any reference that helps me to create a web application in eclipse with JMS and WAS 7.0.
Also want to get answers for below questions..
How to inject ConnectionFactory or Destination object (created in WAS) into application using jndi?
How to install and run JMS web application on WAS server?
First you need to decide on the provider for JMS. It could be WebSphere MQ, the JMS provider that comes inbuilt with WAS or some other provider too.
Refer to the redbooks https://www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/sg247770.html?Open.
You can use InitialContext to lookup connection factory and Destination.
You can deploy the JMS app just like any other app. But ensure that JNDI objects are configured.
This is also a nice info-center to use for reference: http://pic.dhe.ibm.com/infocenter/prodconn/v1r0m0/topic/com.ibm.scenarios.wmqwasusing.doc/topics/scenario_overview.htm

startup class (extends ServiceMBean) vs load-on-startup servlet

I am new to jboss and would like to know what are the differences between ServiceMBean and load-on-startup servlet tag in web.xml? Also, I would like to know which one will always get loaded first or they are loaded at the same time? In what situation, I should use MBean and when I should use startup servlet or it doesn't matter?
I need to write a a class/servlet to validate if all the required system properties (e.g -DINSTALL_DIR=blah ) is set. If not, then stop right there. else proceed and start the application.
Thanks in advance
-A
ServiceMBean is JMX, it is part of your JVM. load-on-startup servlet tag in web.xml is part of your J2EE application.
JMX is part of J2SE starting from JDK 1.5. So, you can have one ServiceMBean per JVM. not per application. JMX is used mostely for monitoring and managing the JVM. It provides access to information such as: number of classes loaded and threads running, memory consumption, garbage collection statistics, on-demand deadlock detection, and others. Another common use, is to refresh your cache.
JMX will allow you to instrument your application and control/monitor it using what-ever management console that your JMX container supports. An example would be a web application that implements a reference data cache...
A problem we had before was we would occasionally need to refresh the cache because a customer name changed in the database. If we had a refresh method on the MBean interface then we should be able to trigger this event using the JMX console. The JMX console may be a web or fat client that comes with our J2EE server. Our J2EE server may also support SNMP. This means that we may be able to invoke the method from a standard Tivoli or UniCenter console.
http://www.theserverside.com/news/1364664/J2EE-Application-Management-The-Power-of-JMX
You don't need remote access to ServiceMBean in order to trigger some asynchrious action. Moreover, you need validation on scope of application, not the whole JVM (while, you can, theoretically, handle this issue in the ServiceMBean). So, it is more naturally, to do it as load-on-startup servlet tag in web.xml. In this way, in every start up of your application validation will happen.
One more clarification: ServiceMBean is JBoss-way to write JMX. All MBeans are server wide (not application wide). That's why I use MBean and ServiceMBean freely above.

JMS queue in websphere

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.

How to monitor ejb deployments in jboss6

In Jboss4, I used to have an MDB listening to deployment messages for dynamically registering components in a system. I used the approach described at http://community.jboss.org/wiki/ExampleMinimalNotificationListener.
Apparently, this mechanism doesn't help anymore in JBoss 6.
So how can I get notified after an EJB has been deployed or before it gets undeployed?