title: advice choosing a networking framework for java
body: <p><strong>Short version:</strong> Need advice(pros/cons) on choosing a java networking framework for a client/server application with low number of users/requests and relatively big amount of data.</p>
  
  <p>Possible options:</p>
  
  <ol>
  <li>RMI</li>
  <li>Apache River</li>
  <li>Netty (this seems more asynchronous oriented, can it do synchronous calls?)</li>
  <li>Some other framework that will make my life easier? :)</li>
  </ol>
  
  <p><strong>Long version:</strong> The current project I work on is a desktop application written in java that allows the user to optimize a part of the supply chain. Note that the application, up until now, was desktop only. It had a database installed on the local machine and that was it. Now we have new requirements to change the code to support a shared/network database. Installing a database on a network server and firing up several instances of the application revealed (as expected) a lot of problems. The biggest problems come from the fact that the database interaction was not developed with concurrency in mind. We have a lot of lock waiting and several deadlocks occurring. A decision was taken that the data access layer will be modified to account for the new requirements. </p>
  
  <p>It seems that it will not be possible to write a DAL to allow for concurrent access without separating the application in a client and a server which will handle data access and possibly some business logic. We don't need a very high performance solution, there aren't that many messages, but the problem lies in the amount of data. </p>
  
  <p>A typical usage scenario looks like this:</p>
  
  <ol>
  <li>Start the application</li>
  <li>Import data from a CSV file (usually between 600MB-1GB) and store it for future use</li>
  <li>Add scenario configurations (very small amount of data) and store them</li>
  <li>Fire up the optimization (takes the data from step 1, applies the configuration, applies some optimizations/restrictions)</li>
  <li>Display the optimization result.</li>
  </ol>
  
  <p>Step 4 will be done on the server, steps 1-3 and 5 will be executed on the client.</p>
  
  <p>Do you guys have an suggestions/advice?
  Thanks.</p>