I've inherited a pretty interesting project where there is a good opportunity to take an existing piece of software and turn it into a SaaS web app. As the project is inherited, the code base/ framework is already defined as C++ and MySQL. The app itself is compiled and run as an EXE on Windows Server. The UI is web based and the app works as a kind of server. From what I do know of modern web apps, this is perhaps an unusual choice. These days, most people seem to opt for a PHP framework or Ruby on Rails. Certainly that is the impression I get from reading blogs on the subject. So, I'm very interested to know if a C++ EXE backed by MySQL is a solid foundation for a web app, or whether we should be looking to build in another way?
Web App Development – Drawbacks of Using C++ and MySQL?
cMySQLsoftware-as-a-serviceweb-applications
Related Solutions
In OSGi there are a variety of available solutions for provisioning OSGi modules/plugins.
One of the approaches is the OSGi Bundle Repository (OBR). This is a system that can contain OSGi modules and serve as a provisioning system for your applications. It can be accessed from shell or an OBR Service API to resolve resources. It seems as a good foundation for a pluggable framework. You would need to have a central OBR which contains your plugins and an update module that uses the API to connect to it and resolve.
OBR is used in e.g. Bndtools for provision resources to Eclipse OSGi projects. Applications such as Artifactory and Nexus also provide support for OBR. More on OBR, OBR explained in OSGi In Action book.
As mentioned in the beginning there are other provisioning systems. Most runtimes (Eclipse Virgo, Apache Karaf) offer some sort of repository system (not always OBR) to provision bundles. They already have web applications available to view and interract with them. More on this in the answer given on this SO question. From OSGi R5 there are standardisation services for interacting with a lot of them. See these slides at eclipsecon.org about Subsystem Service, Repository Service and Resolver Service.
Finally I'd like to mention the Apache Sling project. It is a framework to build OSGi web applications but the interesting thing is that it uses the Java Content Repository specification to manage content. You can deploy Sling to any servlet container and it has a admin web application where you can manage OSGi bundles. It is fast to get up and running and try it out. You just have to deploy the Sling launchpad war. See more about Sling launchpad at sling.apache.org. I do not have much experience with developing with Sling, I have just used it to deploy OSGi web applications.
Basically, when using OSGi a plugin system is at your fingertips without implementing all of it yourself. Although it is hard to find real world examples I recommend using an existing provisioning system from an OSGi runtime or Sling to get your started quickly. A good resource are the Manning books on OSGi (OSGi In Action, In Depth & Enterprise) they helped me a lot in grasping the concepts and the examples are really good.
Your primary difficulties I feel are that you have a mismatch between a very linear and custom workflow in an older application that do not coincide with the user interaction workflows that are common on the web.
Web applications that interact with a server application that contain the business logic communicate in a Request/Response messaging style. The client browser and the server running an application that has the business logic are separate processes. The client requests a resource (html page, jpg image, JSON data, etc...) and the server provides that resource in an inherently stateless way. This is a much different paradigm from your self contained desktop application that has a concept of global state for a users session. The users session in a desktop application lives and dies by the running process on the workstation.
So basically there are two ways you can handle the maintenance of state in a web application that always has a client/server relationship.
Server Centric
A server centric web application will maintain stateful information for an individual user's session. They do this typically by serving a session cookie once the user is authenticated. The client application (browser) will include its unique session token with each request which allows the server to retrieve stateful information about the clients state from the last time they received a request for this client.
Further the server will contain most if not all of the business logic behind performing actions that the typical business user will want to achieve, actions that have real business value. This is not to be confused with presentation logic which is most client side code (Eg. Javascript) that performs user interface interaction like hiding a particular menu in a form if a specific checkbox has been checked.
Client Centric
While you might have a server to maintain authentication of a user and maintaing an active session, you could use a client side scripting framework (Eg. Javascript framework like AngularJS to perform most if not all of the business logic operations and presentation logic operations. The advantages of this model are that you can program your web application in much the same way as one might program a desktop application. Client state will live and die by the browser navigation to the current page in much the same way that it will live and die on the running process of a desktop application. For communication with a database you can expose stateless webservices on the server that can proxy for a database.
Some important considerations with this approach are that users on client browsers have the ability to modify or change how Javascript can behave which might be potentially dangerous and introduce unknown exception cases to your application. It is highly recommended that if this approach is taken that great care should be taken on interactions with servers to sanitize inputs and validate all data going back and forth.
Summary
In summary, the application you specified is very old. It sounds like you are making the right choice in capturing the current workflows and trying to assess what the user needs are. The next step would be to try and follow Agile principles and capture business value in user stories. I would start on clean slate and try to discover other means and workflows that can also attain the same business value captured in the user stories. This application is so old that it was likely limited by the technology of its day to where technical constraints influenced the user workflows in a negative or archaic way. Basically there are probably better ways, more intuitive workflows and user interfaces that the business can use that will also achieve the same end goals.
Best Answer
It is OK to make a web application using C++ IF the benefits outweighs the cost, obviously. Google, Amazon, Facebook are all built with C++ for efficiency in speed, memory and energy - aka servers costs.
However as you guessed, there are drawbacks to using C++ for this. It depends on your tools though.
First let me cite cppcms website on this:
The drawbacks specific to C++ are:
Maybe take a look at CPPCMS? Or maybe wt if you want to make a GUI-style website?
Also check these questions: