We are developing a web application (we call it the image bank), for which we have identified the following needs:
- The application serves customers, which consist of a set of users.
- A new client can be created dynamically, and the client manages it.
- Clients have different sets of functions that can be dynamically changed.
- Customers can develop their own functions and deploy them.
- The application is homogeneous and has the current version, but access to client versions can still be processed individually.
- The application must be managed as a whole, and customers share resources that must be easily scalable.
Question:. Should we build it on the standard OSGi platform or will we better use one of the new application frameworks (Virgo, Aries or the upcoming OSGi standard)?
More background and some initial thoughts:
We are creating a web application that, we assume, will soon have hundreds of customers (companies) with hundreds of users (employees), otherwise why bother;). We want to make it modular, therefore, OSGi. In the future, customers themselves can develop and connect components to their application so that we need customer isolation. We may also want different clients to have different feature sets.
What is the “right” way to provide different service implementations for different application clients when different clients use the same packages?
We could use the app-server approach (we looked at Virgo) and download each set once for each client in our “application”. However, he does not want to hug OSGi. We do not have many applications, 99% of which will use the same. for all customers. We also want to manage (configure, control, etc.) the Application as one.
Each service can be registered (correctly configured) once for each client, along with some client-token property. Is this a bit dirty and will need to handle the expander pattern, or perhaps a ManagedServiceFactory? In addition, before registering services for client A, you will need to purchase an A-version of each of these dependencies.
The "current" client will be known to each request and can be tied to a thread. This is a bit of a mess that should supply a customer token every time you look for a service. This makes it difficult to use components such as a plan. To get around this problem, we could use service hooks to proxy each registered type of service and allow the proxy to be sent to the desired instance in accordance with the current client (stream).
The beginning of our entire OSGi experience by implementing a workaround (hack?) Above really seems like an indication that we're wrong. so what do we do? Return to Virgo? Try something similar to the one described above? Something completely different ?!
ps. Thank you for reading everything here!;)