-
Notifications
You must be signed in to change notification settings - Fork 3
WebProtégé Next Generation Overview
The newest version of WebProtege is built using a microservices architecture. We are gradually transitioning WebProtege away from being a monolithic application to one that is composed as a bunch of small services. This will make WebProtege more extensible going forward and will allow it to scale better as we receive more and more projects on webprotege.stanford.edu and as ontologies and knowledge graphs get larger and larger.
The table below outlines the backend micro-services along with the default ports that they run on. Any WebProtégé installation will need to set up and run these sevices along with any external dependencies. This is currently a manual process, but going forward we will be automating the build and deployment process.
Executable JARs are Spring Boot Applications. The default port can be overriden using -Dserver.port
Service Name | Brief Description | Default Port | Form | External Dependencies |
---|---|---|---|---|
webprotege-backend | Represents the current backend monolith. We are gradually transitioning away from this monolithic service using the strangler vine pattern (see Fowler). Note that the current backend lies on the "spring" branch | 7770 | Spring Boot Application (Executable JAR) | MongoDB, MinIO |
webprotege-authorization-service | Manages user roles and capabilities | 7771 | Spring Boot Application (Executable JAR) | MongoDB |
webprotege-ontology-processing-service | Processes uploaded ontologies by parsing them, resolving owl:imports and converting them to a format that can be quickly parsed and loaded into a project and revision history | 7772 | Spring Boot Application (Executable JAR) | MinIO |
webprotege-snapshot-generator-service | Generates snapshots of a particular project revision for download or downstream processing | 7773 | Spring Boot Application (Executable JAR) | MinIO |
webprotege-gwt-api-gateway | Provides a unified API for the webprotege-gwt-frontend | 7777 | Spring Boot Application (Executable JAR) | |
webprotege-gwt-ui | Serves the user interface and translates requests from GWT, sent via GWT-RPC, to backend requests routed via the API Gate Way service | 8080 | WAR |
Service | Description | Default Port |
---|---|---|
Apache Kafka | WebProtege uses asynchronous messaging for inter-service communication on the backend. This is facilitated by Apache Kafka | 9092 |
Apache Zoo Keeper | Used in combination with Apache Kafka | 2181 |
MongoDB | MongoDB is used to store a variety of json documents that represent structured information that WebProtege uses for things like forms, tags, user-roles and capabilities, user-activity, | 27019 |
MinIO | MinIO is used for blob storage of project snapshots (for download) and uploaded and processed ontologies. MinIO can be run locally or, more commonly, it is used as an interface to something like Amazon S3. | 9000 |
Apache Tomcat | The main WebProtege user interface is written using The Google Web Tooklit (GWT) and this runs as a container based web-app. | 8080 (Note this clashes with Keycloak) |
Keycloak | Provides authentication services | 8080 |
WebProtégé also requires access to the local file system for storing ontology change logs. Change logs are currently stored using the BinaryOWL log format. WebProtégé needs to be able to create and append changes to files in order for this functionality to be available.
The table below lists WebProtégé libraries that are common to various services
Library (Maven Artifact Id) | Description |
---|---|
webprotege-common | Contains POJO definitions, such as ProjectId, UserId and some Java interfaces that a required by multiple services |
webprotege-jackson | Jackson JSON serialization specifications for OWL API objects, e.g. axioms and class expressions, along with some JSON serialization specification WebProtege objects |
webprotege-ipc | Functionality for interprocess communication of backend services |
webprotege-entity | Basic data structures for OWL Entity Data Transfer Objects (DTOs) |
webprotege-entity-frames | Basic data structures for OWL Entity Frame Data Transfer Objects (DTOs) |
webprotege-change | Contains low level axiom change application objects such as AddAxiom and RemoveAxiom |
webprotege-criteria | Contains POJOs pertaining to describing entity matching criteria |
Dependency Name (Maven Artifact Id) |
Remarks | Relevant API Requests/Responses |
---|---|---|
webprotege-authorization-service-api | Request/Response objects for getting the authorization status for users | GetAssignedRolesResponse GetRolesRequest GetAuthorizedSubjectsRequest GetAuthorizedSubjectsResponse GetRolesResponse GetAuthorizedResourcesRequest GetAuthorizedActionsResponse GetAuthorizedResourcesResponse GetAuthorizedActionsRequest GetAssignedRolesRequest GetAuthorizationStatusRequest GetAuthorizationStatusResponse SetAssignedRolesRequest SetAssignedRolesResponse |
webprotege-forms-api | CopyFormDescriptorsAction CopyFormDescriptorsResult CreateEntityFromFormDataAction CreateEntityFromFormDataResult DeleteFormAction DeleteFormResult DeprecateEntityByFormAction DeprecateEntityByFormResult GetEntityCreationFormsAction GetEntityCreationFormsResult GetEntityDeprecationFormsAction GetEntityDeprecationFormsResult GetEntityFormDescriptorAction GetEntityFormDescriptorResult GetEntityFormsAction GetEntityFormsResult GetProjectFormDescriptorsAction GetProjectFormDescriptorsResult SetEntityFormDescriptorAction SetEntityFormDescriptorResult SetEntityFormsDataAction SetEntityFormsDataResult SetProjectFormDescriptorsAction SetProjectFormDescriptorsResult UpdateFormDescriptorAction UpdateFormDescriptorResult |
|
webprotege-backend-api | Currently a catch all. This will gradually be divided in the long run. | GetApplicationSettingsAction GetApplicationSettingsResult SetApplicationSettingsAction SetApplicationSettingsResult AddAxiomsRequest AddAxiomsResponse RemoveAxiomsRequest RemoveAxiomsResponse EditAnnotationsAction EditAnnotationsResult MoveEntitiesToParentAction MoveEntitiesToParentResult SetAnnotationValueAction SetAnnotationValueResult GetProjectChangesAction GetProjectChangesResult RevertRevisionAction RevertRevisionResult GetEntityCrudKitsAction GetEntityCrudKitSettingsAction GetEntityCrudKitSettingsResult GetEntityCrudKitsResult SetEntityCrudKitSettingsAction SetEntityCrudKitSettingsResult LookupEntitiesResult EntityLookupResult CreateNamedIndividualsResult CreateNamedIndividualsAction CreateAnnotationPropertiesAction GetDeprecatedEntitiesResult DeleteEntitiesResult EntityLookupRequest CreateDataPropertiesResult LookupEntitiesAction CreateClassesAction CreateDataPropertiesAction GetDeprecatedEntitiesAction CreateAnnotationPropertiesResult DeleteEntitiesAction CreateClassesResult CreateObjectPropertiesResult CreateObjectPropertiesAction MergeEntitiesAction MergeEntitiesResult SetEntityDeprecatedRequest SetEntityDeprecatedResponse GetHierarchyChildrenAction GetHierarchyChildrenResult GetHierarchyPathsToRootAction GetHierarchyPathsToRootResult GetHierarchyRootsAction GetHierarchyRootsResult GetHierarchySiblingsAction GetHierarchySiblingsResult GetIndividualsAction GetIndividualsPageContainingIndividualAction GetIndividualsPageContainingIndividualResult GetIndividualsResult GetEntityDiscussionThreadsResult CreateEntityDiscussionThreadAction DeleteCommentResult CreateEntityDiscussionThreadResult GetCommentedEntitiesResult GetEntityDiscussionThreadsAction DeleteCommentAction GetCommentedEntitiesAction SetDiscussionThreadStatusAction SetDiscussionThreadStatusResult UpdateCommentAction UpdateCommentResult GetProjectLangTagsAction GetProjectLangTagsResult MergeUploadedProjectAction MergeUploadedProjectResult GetUploadedOntologiesAction GetUploadedOntologiesResult MergeOntologiesAction MergeOntologiesResult GetOntologyAnnotationsAction GetOntologyAnnotationsResult GetRootOntologyIdAction GetRootOntologyIdResult ProcessOntologySourcesRequest ProcessOntologySourcesResponse SetOntologyAnnotationsAction SetOntologyAnnotationsResult GetPerspectiveDetailsAction GetPerspectiveDetailsResult GetPerspectiveLayoutAction GetPerspectiveLayoutResult GetPerspectivesAction GetPerspectivesResult ResetPerspectiveLayoutAction ResetPerspectiveLayoutResult ResetPerspectivesAction ResetPerspectivesResult SetPerspectiveDetailsAction SetPerspectiveDetailsResult SetPerspectiveLayoutAction SetPerspectiveLayoutResult SetPerspectivesAction SetPerspectivesResult GetAvailableProjectsWithPermissionAction GetAvailableProjectsWithPermissionResult GetProjectPrefixDeclarationsRequest GetProjectPrefixDeclarationsResponse MoveProjectsToTrashAction MoveProjectsToTrashResult RemoveProjectFromTrashAction RemoveProjectFromTrashResult SetProjectPrefixDeclarationsAction SetProjectPrefixDeclarationsResult GetProjectSettingsAction GetProjectSettingsResult SetProjectSettingsAction SetProjectSettingsResult GetEntityHtmlRenderingAction GetEntityHtmlRenderingResult GetEntityRenderingAction GetEntityRenderingResult GetHeadRevisionNumberAction GetHeadRevisionNumberResult GetRevisionSummariesAction GetRevisionSummariesResult GetSearchSettingsAction GetSearchSettingsResult PerformEntitySearchAction PerformEntitySearchResult SetSearchSettingsAction SetSearchSettingsResult GetProjectSharingSettingsAction GetProjectSharingSettingsResult SetProjectSharingSettingsAction SetProjectSharingSettingsResult CreateSnapshotRequest CreateSnapshotResponse AddProjectTagAction AddProjectTagResult GetEntityTagsAction GetEntityTagsResult GetProjectTagsAction GetProjectTagsResult SetProjectTagsAction SetProjectTagsResult UpdateEntityTagsAction UpdateEntityTagsResult GetEntityUsageAction GetEntityUsageResult GetUserIdCompletionsAction GetUserIdCompletionsResult GetProjectEntityGraphDefaultEdgeCriteriaAction GetProjectEntityGraphDefaultEdgeCriteriaResult GetUserProjectEntityGraphCriteriaAction GetUserProjectEntityGraphCriteriaResult SetEntityGraphActiveFiltersAction SetEntityGraphActiveFiltersResult SetUserProjectEntityGraphSettingsAction SetUserProjectEntityGraphSettingsResult GetWatchesAction GetWatchesResult SetEntityWatchesAction SetEntityWatchesResult |
webprotege-entity-frame-api | Request/Response objects for getting and updating entity frames | GetAnnotationPropertyFrameAction GetAnnotationPropertyFrameResult GetClassFrameAction GetClassFrameResult GetDataPropertyFrameAction GetDataPropertyFrameResult GetNamedIndividualFrameAction GetNamedIndividualFrameResult GetObjectPropertyFrameAction GetObjectPropertyFrameResult GetOntologyFramesAction GetOntologyFramesResult UpdateAnnotationPropertyFrameAction UpdateAnnotationPropertyFrameResult UpdateClassFrameAction UpdateClassFrameResult UpdateDataPropertyFrameAction UpdateDataPropertyFrameResult UpdateNamedIndividualFrameAction UpdateNamedIndividualFrameResult UpdateObjectPropertyFrameAction UpdateObjectPropertyFrameResult |