WildFly 9 EJB Client/Server Configuration Advice
jfisherdev Nov 4, 2016 1:12 PMMy organization is currently migrating an application from JBoss AS 4.2.2 to WildFly 9.0.2.final.
We need some guidance in the area of EJB client and server configuration, as the default configuration that ships with WildFly is most likely unsuitable for our purposes.
I will describe the application and deployment configuration, and then identify the three areas where we need some guidance.
The application is an EAR application deployed to a standalone WildFly 9 server. Most interactions with the server side are remote EJB invocations on stateless session beans from a standalone Swing GUI client application. Some areas of the client application make use of SwingWorker objects to make remote EJB invocations in the background/concurrently to keep the client responsive. The JBoss EJB Client API with scoped contexts is being used to make these remote calls.
The application deploys two stateless session beans--one for container managed transactions and one for bean managed transactions--that receive invocation metadata and use that to reflectively invoke the business object targeted by the client. This keeps the number of EJB components small, though it does mean the target business objects that would normally be deployed as stateless session bean components do not have the benefits of being a true EJB component; however, this has not been an issue for us.
The minimum number of clients being served is around 300, the maximum is around 1000, and the average is about 650.
The three areas I believe we need some guidance are as follows:
1. EJB3/Remoting subsystem configuration. From what I have read, these seem to be closely related. There are some attributes that seem important for tuning, but I am not sure how to determine what these should be.
- For EJB3, the max threads attribute of the thread pool as well as the max pool size in the slsb-strict-max-pool.
- In the Remoting subsystem, the number of max inbound/outbound channels and messages.
2. EJB client configuration. I have looked over the client properties documentation https://docs.jboss.org/author/display/EJBCLIENT/Overview+of+Client+properties
but there are some properties I am not sure how to configure that seem like they would be important. In particular, the MAX_INBOUND_MESSAGES and MAX_OUTBOUND_MESSAGES as well as the various timeout properties.
3. IO subsystem and general considerations for NIO/XNIO. NIO/XNIO worker and buffer pool configuration seems to be important, as the EJB3, Remoting, and Undertow subsystems ultimately appear to be tied to the worker(s) configured in the IO subsystem. As far as I know, NIO was not a consideration that needed to be made in JBoss AS 4.2.2, and it is fairly new to me, though I am learning more about it. I am curious if any considerations for NIO need to be made on the application side.
Any guidance or information on this subject would be very much appreciated.