Skip to content

WebProtégé Next Generation Overview

Matthew Horridge edited this page Oct 5, 2021 · 28 revisions

Introduction

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.

Services

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

Third Party External Services

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.

Common WebProtégé Libraries

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

WebProtégé API Dependencies

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
Clone this wiki locally