my application has a distributed fat client making RMI calls to Weblogic server 7.0. Under high usage we expect the user load to cross 1000 connections. Will Weblogic scale up to support such connections and yet maintain satisfactory performance metrics is the question.
Would love to have feedback/suggestions from people who have seen a similar functional deployed solution.
Any pointers about some kinda server/side pooling, or persistence of TCP connections between RMI calls from the same client would also help
I have currently a problem with RMI. My application which is Swing a GUI connects to the Weblogic Server using RMI. The architecture is similar your's with the Swing GUI calling Remote Objects residing on the server by using just using pure RMI.
However, I have this phenomenon of Weblogic Server Garbage collecting the Remote objects in case the client is inactive (not making any calls to the server) for more than 20 mins or so. The client then simply throws NullPointerExceptions. Have you ever experienced this problem?
Our application is still in the architecture phase, and we wanted to weed out the possible design problems at this stage itself.
However you problem might indicate that you are using stale handles on the client side. Are you persisting the handles between RMI calls? 20 mts seems to be a short interval for GC for Remote objects.
I would be interested in knowing more about yr design, as we are planning something similar.
Our code is something like this.
The client does a look up for the remote interface's reference using a jndi lookup like this. The class which contains the method named connectToServer() is a Singleton Class and the this method is called from it's constructor. Thus the method connectToServer() is called only once during the client app's life-cycle.
/** Instance of the ODRMIServer which is created by doing a jndi lookup */
private ODRMIMonitorService obj = null;
* This happens only once during the applications life cylce
* @throws javax.naming.NamingException
private void connectToServer() throws javax.naming.NamingException
InitialContext ic = new InitialContext();
obj = (ODRMIMonitorService) ic.lookup("ODRMIMonitorServer");
The client code then just calls on obj.getXXX(param1...) to recieve data from the server. However after some time the call obj.getXXX creates a null pointer exception. The server throws a stack trace stating that ODRMIMonitorServiceImpl which is implementation of this interface has been garbage collected. Please note that ODRMIMonitorServiceImpl is also a singleton class!