SD Ruby, I've decided to pull apart an app I've been working on for a long time into the main front-end Rails app using MRI Ruby and a back-end service API using JRuby.
If anyone remembers my JRuby talk from a year or so ago, this is the same app. I'm using JRuby because I need the Apache POI library to update and retrieve formula values from a complex financial analysis Excel spreadsheet. My goal is to separate the spreadsheet engine from the rest of the app, which will help with several memory and scalability issues. Here's what I'm trying to achieve: - When the user wants to interact with the financial analysis an initial request will be made to the service API. A unique ID for their session will be passed in that call. - The service will create an instance of the Ruby class that interfaces with the spreadsheet library and load up a copy of the spreadsheet. - The user can then make API calls to set input values in the spreadsheet and retrieve the recalculated formula values for display in a Rails view back in the client. What I'm wrestling with is the stateful nature of this interaction. The creation of the in-memory POI spreadsheet classes is expensive, so I only want to have to do that once for each "session" in which the user interacts with the financial analysis. Once the spreadsheet interface classes are loaded up the setting of input values and retrieving of formula values is pretty speedy. In production there could be dozens or hundreds of users all working with their own copy of the financial analysis spreadsheet model via the service API. I also want to keep from blowing up the memory requirements for keeping possibly hundreds of the financial analysis service models around longer than necessary. The typical user interaction will only need them to be around for a short while, say, 20-30 minutes. What approach do you recommend for keeping the service-side models around between API requests? I should probably consider a sweeper of some sort as well to clean up instances that haven't been used in a while. Any suggested approaches would be greatly appreciated. If I get an elegant implementation of this working I'll be happy to share it via an SD Ruby talk. Thanks! Chris -- -- SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby --- You received this message because you are subscribed to the Google Groups "SD Ruby" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
