Architecture Overview

Last modified by Scott Gagan on 2021/09/10 23:34

iSymphony is composed of a central application (the main server), and multiple OSGi instances running in servlets (the servlets). 

The Main Server

The primary application and entry point to the application is the main server. This is a plain Java application, with a standard main method. It performs a number of tasks:

  • Loading, activating, and managing licenses for core servers
  • Creating and launching the embedded Jetty servlet container
  • Creating, removing, and managing core server OSGI instances (in a distributed system, each main server will handle this for the core servers running on that JVM)
  • Creating and managing the other OSGi instances for other servlets

The main server is not a publicly accessible system, and cannot be modified by 3rd parties. It provides baseline functionality, just enough to run the rest of the system, and should not be necessary to modify to add or remove functionality from iSymphony. 

The Servlets

The main functionality of the iSymphony platform lives within several different OSGi instances, each of which is running in a separate servlet in the embedded Jetty instance. These OSGi instances are functionally separate, each providing a different piece of the functionality as a whole. They have separate class loaders due to the servlet containers, and can communication with each other only through the communication manager (see the documentation for the communication manager for details). In most situations, the servlets will all run under the same JVM (main server instance), but each servlet can be moved to a separate JVM on the same server, or onto an entirely different server. There are 5 primary types of servlets in iSymphony:

The Core Server Servlet

At the heart of the system is the Core Server Servlet. This provides the central management location for a core server in iSymphony. Each core server will have a separate core server servlet and OSGi instance. Core server servlets handle loading/managing/saving configuration information, processing requests and events, and managing the live state of the system for that core server. The core server servlet is the only servlet that is commonly instantiated multiple times in one install. 

The Client Servlet

The client servlet is responsible for constructing and delivering the user interface that most iSymphony users use. It receives events and model updates from the communication system, and translates them into user-interface updates, which are then delivered to the browser by the Vaadin application. If an iSymphony module requires a front-facing interface, as most do, it will require developing in the client servlet. See Client Servlet Development for more information on that process. There is typically only one client servlet in each iSymphony system, but for load balancing or related reasons, it is possible to launch multiple client servlets. 

The Administration Servlet

Similar to the client servlet, the administration servlet provides the user interface for the administration interface of iSymphony. It is typically accessed only by system administrators to configure users and phone system objects. Much of the servlet and framework is similar to the client servlet. If an iSymphony module requires configuration of any sort, or permissions, it will need at least one bundle in the administration servlet. 

The Communication Servlet

The communication servlet should handle all intra- and inter-system communication. This includes the JMS/ActiveMQ instance that handles communication between the different pieces of the iSymphony system, and also the integration pieces between iSymphony and external systems, such as the REST API and the Asterisk connections. 

The Agent Servlet

The agent servlet is intended to be a lightweight, minimal servlet that handles tasks that can only be performed locally on a particular server. For example, watching a directory for new voicemail files, or serving those voicemail files over the web, should be done in the agent servlet. It is separate from the other servlets so that a minimal iSymphony instance can be installed onto a PBX (or other machine), and will have a minimal impact on the other software running on that server. Unless there is a specific need to have software running locally on a machine, you should not use the agent servlet. 

   
iSymphony