You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ya...@apache.org on 2025/12/11 16:09:52 UTC
(airavata) 02/19: add spring boot to airavata-api and streamline service and background process launches
This is an automated email from the ASF dual-hosted git repository.
yasith pushed a commit to branch service-layer-improvements
in repository https://gitbox.apache.org/repos/asf/airavata.git
commit 2f5d196f2b651237b73109efa10b4d7bd5eccfd0
Author: yasithdev <ya...@icloud.com>
AuthorDate: Sat Dec 6 15:08:12 2025 -0600
add spring boot to airavata-api and streamline service and background process launches
---
airavata-api/pom.xml | 21 ++
.../org/apache/airavata/AiravataApplication.java | 78 +++++++
.../api/thrift/handler/AiravataServiceHandler.java | 12 +-
.../thrift/handler/CredentialServiceHandler.java | 12 +-
.../thrift/handler/GroupManagerServiceHandler.java | 37 ++--
.../api/thrift/handler/IamAdminServiceHandler.java | 19 +-
.../thrift/handler/OrchestratorServiceHandler.java | 17 +-
.../api/thrift/handler/RegistryServiceHandler.java | 8 +-
.../handler/SharingRegistryServerHandler.java | 14 +-
.../handler/TenantProfileServiceHandler.java | 17 +-
.../thrift/handler/UserProfileServiceHandler.java | 6 +-
.../api/thrift/server/AiravataServiceServer.java | 16 +-
.../api/thrift/server/CredentialServiceServer.java | 10 +-
.../thrift/server/OrchestratorServiceServer.java | 10 +-
.../api/thrift/server/ProfileServiceServer.java | 21 +-
.../api/thrift/server/RegistryServiceServer.java | 10 +-
.../api/thrift/server/SharingRegistryServer.java | 12 +-
.../config/BackgroundServicesLauncher.java | 234 +++++++++++++++++++++
.../java/org/apache/airavata/config/JpaConfig.java | 167 +++++++++++++++
.../airavata/config/RegistryServiceProvider.java | 47 +++++
.../airavata/config/ThriftServerLauncher.java | 87 ++++++++
.../helix/impl/workflow/PostWorkflowManager.java | 13 +-
.../helix/impl/workflow/PreWorkflowManager.java | 2 +-
.../helix/impl/workflow/WorkflowManager.java | 15 +-
.../java/org/apache/airavata/main/ThriftAPI.java | 67 +++++-
.../core/repositories/TenantProfileRepository.java | 2 +
.../core/repositories/UserProfileRepository.java | 2 +
.../appcatalog/AppCatAbstractRepository.java | 10 +-
.../ApplicationDeploymentRepository.java | 2 +
.../appcatalog/ApplicationInputRepository.java | 2 +
.../appcatalog/ApplicationInterfaceRepository.java | 2 +
.../appcatalog/ApplicationModuleRepository.java | 2 +
.../appcatalog/ApplicationOutputRepository.java | 2 +
.../appcatalog/BatchQueuePolicyRepository.java | 2 +
.../appcatalog/BatchQueueRepository.java | 2 +
.../ComputeResourcePolicyRepository.java | 2 +
.../appcatalog/ComputeResourcePrefRepository.java | 2 +
.../appcatalog/ComputeResourceRepository.java | 2 +
.../appcatalog/DataMovementRepository.java | 2 +
.../appcatalog/GatewayGroupsRepository.java | 2 +
.../appcatalog/GroupResourceProfileRepository.java | 2 +
.../appcatalog/GrpComputePrefRepository.java | 2 +
.../appcatalog/GwyResourceProfileRepository.java | 2 +
.../JobSubmissionInterfaceRepository.java | 2 +
.../appcatalog/ParserInputRepository.java | 2 +
.../appcatalog/ParserOutputRepository.java | 2 +
.../repositories/appcatalog/ParserRepository.java | 2 +
.../appcatalog/ParsingTemplateRepository.java | 2 +
.../appcatalog/ResourceJobManagerRepository.java | 2 +
.../appcatalog/StoragePrefRepository.java | 2 +
.../appcatalog/StorageResourceRepository.java | 2 +
.../UserComputeResourcePreferenceRepository.java | 2 +
.../appcatalog/UserResourceProfileRepository.java | 2 +
.../UserStoragePreferenceRepository.java | 2 +
.../expcatalog/ExpCatAbstractRepository.java | 10 +-
.../expcatalog/ExperimentErrorRepository.java | 2 +
.../expcatalog/ExperimentInputRepository.java | 2 +
.../expcatalog/ExperimentOutputRepository.java | 2 +
.../expcatalog/ExperimentRepository.java | 2 +
.../expcatalog/ExperimentStatusRepository.java | 2 +
.../expcatalog/ExperimentSummaryRepository.java | 2 +
.../repositories/expcatalog/GatewayRepository.java | 2 +
.../GatewayUsageReportingCommandRepository.java | 2 +
.../repositories/expcatalog/JobRepository.java | 2 +
.../expcatalog/JobStatusRepository.java | 2 +
.../expcatalog/NotificationRepository.java | 2 +
.../expcatalog/ProcessErrorRepository.java | 2 +
.../expcatalog/ProcessInputRepository.java | 2 +
.../expcatalog/ProcessOutputRepository.java | 2 +
.../repositories/expcatalog/ProcessRepository.java | 8 +-
.../expcatalog/ProcessStatusRepository.java | 2 +
.../expcatalog/ProcessWorkflowRepository.java | 2 +
.../repositories/expcatalog/ProjectRepository.java | 2 +
.../expcatalog/QueueStatusRepository.java | 2 +
.../expcatalog/TaskErrorRepository.java | 2 +
.../repositories/expcatalog/TaskRepository.java | 8 +-
.../expcatalog/TaskStatusRepository.java | 2 +
.../repositories/expcatalog/UserRepository.java | 2 +
.../replicacatalog/DataProductRepository.java | 13 +-
.../DataReplicaLocationRepository.java | 2 +
.../replicacatalog/RepCatAbstractRepository.java | 10 +-
.../WorkflowCatAbstractRepository.java | 10 +-
.../workflowcatalog/WorkflowRepository.java | 2 +
.../apache/airavata/service/AiravataService.java | 33 ++-
.../airavata/service/CredentialStoreService.java | 2 +
.../airavata/service/GroupManagerService.java | 44 ++--
.../apache/airavata/service/IamAdminService.java | 31 +--
.../service/OrchestratorRegistryService.java | 12 +-
.../airavata/service/OrchestratorService.java | 5 +-
.../apache/airavata/service/RegistryService.java | 106 +++++++---
.../airavata/service/SharingRegistryService.java | 2 +
.../airavata/service/TenantProfileService.java | 17 +-
.../airavata/service/UserProfileService.java | 27 +--
.../sharing/db/repositories/DomainRepository.java | 2 +
.../sharing/db/repositories/EntityRepository.java | 2 +
.../db/repositories/EntityTypeRepository.java | 2 +
.../db/repositories/GroupAdminRepository.java | 2 +
.../db/repositories/GroupMembershipRepository.java | 2 +
.../db/repositories/PermissionTypeRepository.java | 2 +
.../sharing/db/repositories/SharingRepository.java | 2 +
.../db/repositories/UserGroupRepository.java | 2 +
.../sharing/db/repositories/UserRepository.java | 2 +
pom.xml | 9 +
103 files changed, 1190 insertions(+), 239 deletions(-)
diff --git a/airavata-api/pom.xml b/airavata-api/pom.xml
index b64be1d8aa..148e064ed9 100644
--- a/airavata-api/pom.xml
+++ b/airavata-api/pom.xml
@@ -346,6 +346,27 @@ under the License.
</exclusion>
</exclusions>
</dependency>
+
+ <!-- Spring Boot Dependencies -->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
+ <exclusions>
+ <!-- Exclude Hibernate as we're using OpenJPA -->
+ <exclusion>
+ <groupId>org.hibernate.orm</groupId>
+ <artifactId>hibernate-core</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-aop</artifactId>
+ </dependency>
</dependencies>
<build>
diff --git a/airavata-api/src/main/java/org/apache/airavata/AiravataApplication.java b/airavata-api/src/main/java/org/apache/airavata/AiravataApplication.java
new file mode 100644
index 0000000000..f9ef1fc752
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/AiravataApplication.java
@@ -0,0 +1,78 @@
+/**
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.airavata;
+
+import org.apache.airavata.common.utils.ApplicationSettings;
+import org.apache.airavata.common.utils.ServerSettings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * Spring Boot application entry point for Airavata API.
+ * This class initializes the Spring application context and enables
+ * dependency injection for services, repositories, and entities.
+ * All services (Thrift servers, workflow managers, helix controllers, etc.)
+ * are started automatically via BackgroundServicesLauncher and ThriftAPI integration.
+ */
+@SpringBootApplication
+@EnableTransactionManagement
+@ComponentScan(basePackages = {
+ "org.apache.airavata.service",
+ "org.apache.airavata.registry.core.repositories",
+ "org.apache.airavata.profile",
+ "org.apache.airavata.sharing.db.repositories",
+ "org.apache.airavata.config",
+ "org.apache.airavata.api.thrift"
+})
+@EntityScan(basePackages = {
+ "org.apache.airavata.registry.core.entities",
+ "org.apache.airavata.profile.commons",
+ "org.apache.airavata.sharing.db.entities"
+})
+public class AiravataApplication {
+
+ private static final Logger logger = LoggerFactory.getLogger(AiravataApplication.class);
+
+ public static void main(String[] args) {
+ // Ensure properties are loaded before Spring context starts
+ try {
+ // Merge command line args into settings
+ ServerSettings.mergeSettingsCommandLineArgs(args);
+ // Trigger static initialization of ApplicationSettings
+ ApplicationSettings.getSetting("servers", "all");
+ logger.info("Airavata properties loaded successfully");
+ } catch (Exception e) {
+ logger.warn("Failed to pre-load properties, will rely on ApplicationSettings static initialization", e);
+ }
+
+ // Start Spring Boot application - this will initialize all beans and run CommandLineRunners
+ SpringApplication app = new SpringApplication(AiravataApplication.class);
+ // Don't exit immediately - keep running for background services
+ app.setRegisterShutdownHook(true);
+ app.run(args);
+ }
+
+}
+
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/AiravataServiceHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/AiravataServiceHandler.java
index daacc87973..a46d0e7895 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/AiravataServiceHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/AiravataServiceHandler.java
@@ -75,14 +75,18 @@ import org.apache.airavata.security.interceptor.SecurityCheck;
import org.apache.airavata.service.AiravataService;
import org.apache.airavata.service.ServiceFactoryException;
import org.apache.airavata.sharing.models.SharingRegistryException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class AiravataServiceHandler implements Airavata.Iface {
- private AiravataService airavataService;
+ private final AiravataService airavataService;
- public AiravataServiceHandler() throws AiravataException, ServiceFactoryException {
- airavataService = new AiravataService();
- airavataService.init();
+ @Autowired
+ public AiravataServiceHandler(AiravataService airavataService) throws AiravataException {
+ this.airavataService = airavataService;
+ this.airavataService.init();
}
/**
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/CredentialServiceHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/CredentialServiceHandler.java
index 2779751ba0..53549b7c77 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/CredentialServiceHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/CredentialServiceHandler.java
@@ -27,19 +27,19 @@ import org.apache.airavata.credential.exception.CredentialStoreException;
import org.apache.airavata.model.credential.store.*;
import org.apache.airavata.model.error.AiravataSystemException;
import org.apache.airavata.service.CredentialStoreService;
-import org.apache.airavata.service.ServiceFactory;
-import org.apache.airavata.service.ServiceFactoryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class CredentialServiceHandler implements org.apache.airavata.credential.cpi.CredentialStoreService.Iface {
protected static Logger log = LoggerFactory.getLogger(CredentialServiceHandler.class);
+
+ @Autowired
private CredentialStoreService credentialStoreService;
- public CredentialServiceHandler()
- throws ApplicationSettingsException, IllegalAccessException, ClassNotFoundException, InstantiationException,
- ServiceFactoryException {
- credentialStoreService = ServiceFactory.getInstance().getCredentialStoreService();
+ public CredentialServiceHandler() {
}
@Override
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/GroupManagerServiceHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/GroupManagerServiceHandler.java
index ec2aab0494..50e772ed78 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/GroupManagerServiceHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/GroupManagerServiceHandler.java
@@ -32,14 +32,19 @@ import org.apache.airavata.service.ServiceFactoryException;
import org.apache.airavata.sharing.models.SharingRegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class GroupManagerServiceHandler implements GroupManagerService.Iface {
private static final Logger logger = LoggerFactory.getLogger(GroupManagerServiceHandler.class);
- private org.apache.airavata.service.GroupManagerService groupManagerService;
+ private final org.apache.airavata.service.GroupManagerService groupManagerService;
- public GroupManagerServiceHandler() {
- groupManagerService = new org.apache.airavata.service.GroupManagerService();
+ @Autowired
+ public GroupManagerServiceHandler(org.apache.airavata.service.GroupManagerService groupManagerService) {
+ this.groupManagerService = groupManagerService;
+ logger.info("GroupManagerServiceHandler initialized with Spring-injected GroupManagerService");
}
@Override
@@ -53,7 +58,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.createGroup(authzToken, groupModel);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error creating group: " + e.getMessage());
ex.initCause(e);
@@ -67,7 +72,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.updateGroup(authzToken, groupModel);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error updating group: " + e.getMessage());
ex.initCause(e);
@@ -81,7 +86,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.deleteGroup(authzToken, groupId, ownerId);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error deleting group: " + e.getMessage());
ex.initCause(e);
@@ -95,7 +100,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.getGroup(authzToken, groupId);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error getting group: " + e.getMessage());
ex.initCause(e);
@@ -109,7 +114,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.getGroups(authzToken);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error getting groups: " + e.getMessage());
ex.initCause(e);
@@ -123,7 +128,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.getAllGroupsUserBelongs(authzToken, userName);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error getting user groups: " + e.getMessage());
ex.initCause(e);
@@ -136,7 +141,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.addUsersToGroup(authzToken, userIds, groupId);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error adding users to group: " + e.getMessage());
ex.initCause(e);
@@ -149,7 +154,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.removeUsersFromGroup(authzToken, userIds, groupId);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error removing users from group: " + e.getMessage());
ex.initCause(e);
@@ -163,7 +168,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.transferGroupOwnership(authzToken, groupId, newOwnerId);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error transferring group ownership: " + e.getMessage());
ex.initCause(e);
@@ -177,7 +182,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.addGroupAdmins(authzToken, groupId, adminIds);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error adding group admins: " + e.getMessage());
ex.initCause(e);
@@ -191,7 +196,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.removeGroupAdmins(authzToken, groupId, adminIds);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error removing group admins: " + e.getMessage());
ex.initCause(e);
@@ -205,7 +210,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.hasAdminAccess(authzToken, groupId, adminId);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error checking admin access: " + e.getMessage());
ex.initCause(e);
@@ -219,7 +224,7 @@ public class GroupManagerServiceHandler implements GroupManagerService.Iface {
throws GroupManagerServiceException, AuthorizationException {
try {
return groupManagerService.hasOwnerAccess(authzToken, groupId, ownerId);
- } catch (SharingRegistryException | ServiceFactoryException e) {
+ } catch (SharingRegistryException e) {
GroupManagerServiceException ex =
new GroupManagerServiceException("Error checking owner access: " + e.getMessage());
ex.initCause(e);
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/IamAdminServiceHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/IamAdminServiceHandler.java
index 2dc3ace75a..ba6171c047 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/IamAdminServiceHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/IamAdminServiceHandler.java
@@ -34,22 +34,19 @@ import org.apache.airavata.security.interceptor.SecurityCheck;
import org.apache.airavata.service.IamAdminService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class IamAdminServiceHandler implements IamAdminServices.Iface {
private static final Logger logger = LoggerFactory.getLogger(IamAdminServiceHandler.class);
- private IamAdminService iamAdminService;
+ private final IamAdminService iamAdminService;
- public IamAdminServiceHandler() throws IamAdminServicesException {
- try {
- iamAdminService = new org.apache.airavata.service.IamAdminService();
- } catch (Throwable e) {
- String msg = "Error initializing IamAdminServicesHandler, reason: " + e.getMessage();
- logger.error(msg, e);
- var exception = new IamAdminServicesException(msg);
- exception.initCause(e);
- throw exception;
- }
+ @Autowired
+ public IamAdminServiceHandler(IamAdminService iamAdminService) {
+ this.iamAdminService = iamAdminService;
+ logger.info("IamAdminServiceHandler initialized with Spring-injected IamAdminService");
}
@Override
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/OrchestratorServiceHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/OrchestratorServiceHandler.java
index 5861cfa679..e89b969d10 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/OrchestratorServiceHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/OrchestratorServiceHandler.java
@@ -26,13 +26,15 @@ import org.apache.airavata.model.error.LaunchValidationException;
import org.apache.airavata.model.process.ProcessModel;
import org.apache.airavata.orchestrator.util.OrchestratorServerThreadPoolExecutor;
import org.apache.airavata.service.OrchestratorService;
-import org.apache.airavata.service.ServiceFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class OrchestratorServiceHandler implements org.apache.airavata.orchestrator.cpi.OrchestratorService.Iface {
private static Logger log = LoggerFactory.getLogger(OrchestratorServiceHandler.class);
- private OrchestratorService orchestratorService;
+ private final OrchestratorService orchestratorService;
/**
* Query orchestrator server to fetch the CPI version
@@ -42,13 +44,10 @@ public class OrchestratorServiceHandler implements org.apache.airavata.orchestra
return org.apache.airavata.orchestrator.cpi.orchestrator_cpiConstants.ORCHESTRATOR_CPI_VERSION;
}
- public OrchestratorServiceHandler() {
- try {
- orchestratorService = ServiceFactory.getInstance().getOrchestratorService();
- } catch (Exception e) {
- log.error("Error while initializing orchestrator service", e);
- throw new RuntimeException("Error while initializing orchestrator service", e);
- }
+ @Autowired
+ public OrchestratorServiceHandler(OrchestratorService orchestratorService) {
+ this.orchestratorService = orchestratorService;
+ log.info("OrchestratorServiceHandler initialized with Spring-injected OrchestratorService");
}
/**
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/RegistryServiceHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/RegistryServiceHandler.java
index 19e7db537c..a98d8588af 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/RegistryServiceHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/RegistryServiceHandler.java
@@ -67,11 +67,15 @@ import org.apache.airavata.registry.api.registry_apiConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
public class RegistryServiceHandler implements RegistryService.Iface {
private static final Logger logger = LoggerFactory.getLogger(RegistryServiceHandler.class);
- private org.apache.airavata.service.RegistryService registryService =
- new org.apache.airavata.service.RegistryService();
+ @Autowired
+ private org.apache.airavata.service.RegistryService registryService;
// Helper method to convert domain exceptions to Thrift exceptions
private RegistryServiceException convertToRegistryServiceException(Throwable e, String context) {
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/SharingRegistryServerHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/SharingRegistryServerHandler.java
index aa53a3e85d..bd9be91a75 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/SharingRegistryServerHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/SharingRegistryServerHandler.java
@@ -27,20 +27,18 @@ import org.apache.airavata.sharing.models.*;
import org.apache.airavata.sharing.service.cpi.SharingRegistryService;
import org.apache.airavata.sharing.service.cpi.sharing_cpiConstants;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
public class SharingRegistryServerHandler implements SharingRegistryService.Iface {
+ @Autowired
private org.apache.airavata.service.SharingRegistryService sharingRegistryService;
public static String OWNER_PERMISSION_NAME =
org.apache.airavata.service.SharingRegistryService.OWNER_PERMISSION_NAME;
- public SharingRegistryServerHandler() throws ApplicationSettingsException {
- this(new SharingRegistryDBInitConfig());
- }
-
- public SharingRegistryServerHandler(SharingRegistryDBInitConfig sharingRegistryDBInitConfig)
- throws ApplicationSettingsException {
- DBInitializer.initializeDB(sharingRegistryDBInitConfig);
- sharingRegistryService = new org.apache.airavata.service.SharingRegistryService();
+ public SharingRegistryServerHandler() {
}
@Override
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/TenantProfileServiceHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/TenantProfileServiceHandler.java
index 32c34fcd1f..538b64bc4f 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/TenantProfileServiceHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/TenantProfileServiceHandler.java
@@ -35,22 +35,19 @@ import org.slf4j.LoggerFactory;
/**
* Created by goshenoy on 3/6/17.
*/
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
public class TenantProfileServiceHandler implements TenantProfileService.Iface {
private static final Logger logger = LoggerFactory.getLogger(TenantProfileServiceHandler.class);
+
+ @Autowired
private org.apache.airavata.service.TenantProfileService tenantProfileService;
- public TenantProfileServiceHandler() throws TenantProfileServiceException {
+ public TenantProfileServiceHandler() {
logger.debug("Initializing TenantProfileServiceHandler");
- try {
- tenantProfileService = new org.apache.airavata.service.TenantProfileService();
- } catch (Throwable e) {
- String msg = "Error initializing TenantProfileServiceHandler, reason: " + e.getMessage();
- logger.error(msg, e);
- var exception = new TenantProfileServiceException(msg);
- exception.initCause(e);
- throw exception;
- }
}
@Override
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/UserProfileServiceHandler.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/UserProfileServiceHandler.java
index b39e5b9550..826a48c657 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/UserProfileServiceHandler.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/handler/UserProfileServiceHandler.java
@@ -29,12 +29,16 @@ import org.apache.airavata.profile.user.cpi.exception.UserProfileServiceExceptio
import org.apache.airavata.profile.user.cpi.profile_user_cpiConstants;
import org.apache.airavata.security.interceptor.SecurityCheck;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
public class UserProfileServiceHandler implements org.apache.airavata.profile.user.cpi.UserProfileService.Iface {
+ @Autowired
private org.apache.airavata.service.UserProfileService userProfileService;
public UserProfileServiceHandler() {
- userProfileService = new org.apache.airavata.service.UserProfileService();
}
@Override
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/AiravataServiceServer.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/AiravataServiceServer.java
index bb21d2bbb2..cb8aa5db72 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/AiravataServiceServer.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/AiravataServiceServer.java
@@ -33,6 +33,9 @@ import org.apache.airavata.common.utils.ServerSettings;
import org.apache.airavata.model.error.AiravataErrorType;
import org.apache.airavata.model.error.AiravataSystemException;
import org.apache.airavata.security.interceptor.SecurityModule;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TSSLTransportFactory;
@@ -42,6 +45,7 @@ import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@Component
public class AiravataServiceServer implements IServer {
private static final Logger logger = LoggerFactory.getLogger(AiravataServiceServer.class);
@@ -52,6 +56,9 @@ public class AiravataServiceServer implements IServer {
private TServer server, TLSServer;
+ @Autowired
+ private ApplicationContext applicationContext;
+
public AiravataServiceServer() {
setStatus(ServerStatus.STOPPED);
}
@@ -138,11 +145,12 @@ public class AiravataServiceServer implements IServer {
@Override
public void start() throws Exception {
setStatus(ServerStatus.STARTING);
- // Obtain a AiravataServerHandl
- // er object from Guice which is wrapped with interception logic.
- Injector injector = Guice.createInjector(new SecurityModule());
+ // Get AiravataServiceHandler from Spring context
+ AiravataServiceHandler handler = applicationContext.getBean(AiravataServiceHandler.class);
+ // TODO: Migrate SecurityModule to Spring AOP for security interception
+ // For now, we use the handler directly. Security checks are still applied via @SecurityCheck annotations
Airavata.Processor<Airavata.Iface> airavataAPIServer =
- new Airavata.Processor<Airavata.Iface>(injector.getInstance(AiravataServiceHandler.class));
+ new Airavata.Processor<Airavata.Iface>(handler);
startAiravataServer(airavataAPIServer);
}
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/CredentialServiceServer.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/CredentialServiceServer.java
index 59c2f04cde..f264da38fb 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/CredentialServiceServer.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/CredentialServiceServer.java
@@ -31,7 +31,11 @@ import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+@Component
public class CredentialServiceServer implements IServer {
private static final Logger logger = LoggerFactory.getLogger(CredentialServiceServer.class);
private static final String SERVER_NAME = "Credential Store Server";
@@ -40,6 +44,9 @@ public class CredentialServiceServer implements IServer {
private IServer.ServerStatus status;
private TServer server;
+ @Autowired
+ private ApplicationContext applicationContext;
+
public CredentialServiceServer() {
setStatus(IServer.ServerStatus.STOPPED);
}
@@ -60,8 +67,9 @@ public class CredentialServiceServer implements IServer {
setStatus(ServerStatus.STARTING);
final int serverPort = Integer.parseInt(ServerSettings.getCredentialStoreServerPort());
final String serverHost = ServerSettings.getCredentialStoreServerHost();
+ CredentialServiceHandler handler = applicationContext.getBean(CredentialServiceHandler.class);
CredentialStoreService.Processor processor =
- new CredentialStoreService.Processor(new CredentialServiceHandler());
+ new CredentialStoreService.Processor(handler);
TServerTransport serverTransport;
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/OrchestratorServiceServer.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/OrchestratorServiceServer.java
index 29afa7a963..4b82939269 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/OrchestratorServiceServer.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/OrchestratorServiceServer.java
@@ -37,7 +37,11 @@ import org.apache.thrift.transport.TTransportException;
import org.quartz.SchedulerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+@Component
public class OrchestratorServiceServer implements IServer {
private static final Logger logger = LoggerFactory.getLogger(OrchestratorServiceServer.class);
@@ -54,6 +58,9 @@ public class OrchestratorServiceServer implements IServer {
private static DataInterpreterService dataInterpreterService;
+ @Autowired
+ private ApplicationContext applicationContext;
+
// private ClusterStatusMonitorJobScheduler clusterStatusMonitorJobScheduler;
public OrchestratorServiceServer() {
@@ -179,8 +186,9 @@ public class OrchestratorServiceServer implements IServer {
}
setStatus(ServerStatus.STARTING);
+ OrchestratorServiceHandler handler = applicationContext.getBean(OrchestratorServiceHandler.class);
OrchestratorService.Processor<OrchestratorServiceHandler> orchestratorService =
- new OrchestratorService.Processor<OrchestratorServiceHandler>(new OrchestratorServiceHandler());
+ new OrchestratorService.Processor<OrchestratorServiceHandler>(handler);
StartOrchestratorServer(orchestratorService);
}
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/ProfileServiceServer.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/ProfileServiceServer.java
index 83bd5f54d7..67950c43cc 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/ProfileServiceServer.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/ProfileServiceServer.java
@@ -48,10 +48,14 @@ import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
/**
* Created by goshenoy on 03/08/2017.
*/
+@Component
public class ProfileServiceServer implements IServer {
private static final Logger logger = LoggerFactory.getLogger(ProfileServiceServer.class);
@@ -63,6 +67,9 @@ public class ProfileServiceServer implements IServer {
private TServer server;
private List<DBInitConfig> dbInitConfigs = Arrays.asList(new UserProfileCatalogDBInitConfig());
+ @Autowired
+ private ApplicationContext applicationContext;
+
public ProfileServiceServer() {
setStatus(ServerStatus.STOPPED);
}
@@ -94,11 +101,17 @@ public class ProfileServiceServer implements IServer {
final int serverPort = Integer.parseInt(ServerSettings.getProfileServiceServerPort());
+ // Get handlers from Spring context
+ UserProfileServiceHandler userProfileHandler = applicationContext.getBean(UserProfileServiceHandler.class);
+ TenantProfileServiceHandler tenantProfileHandler = applicationContext.getBean(TenantProfileServiceHandler.class);
+ IamAdminServiceHandler iamAdminHandler = applicationContext.getBean(IamAdminServiceHandler.class);
+ GroupManagerServiceHandler groupManagerHandler = applicationContext.getBean(GroupManagerServiceHandler.class);
+
// create multiple processors for each profile-service
- var userProfileProcessor = new UserProfileService.Processor<>(new UserProfileServiceHandler());
- var teneantProfileProcessor = new TenantProfileService.Processor<>(new TenantProfileServiceHandler());
- var iamAdminServicesProcessor = new IamAdminServices.Processor<>(new IamAdminServiceHandler());
- var groupmanagerProcessor = new GroupManagerService.Processor<>(new GroupManagerServiceHandler());
+ var userProfileProcessor = new UserProfileService.Processor<>(userProfileHandler);
+ var teneantProfileProcessor = new TenantProfileService.Processor<>(tenantProfileHandler);
+ var iamAdminServicesProcessor = new IamAdminServices.Processor<>(iamAdminHandler);
+ var groupmanagerProcessor = new GroupManagerService.Processor<>(groupManagerHandler);
// create a multiplexed processor
TMultiplexedProcessor profileServiceProcessor = new TMultiplexedProcessor();
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/RegistryServiceServer.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/RegistryServiceServer.java
index 6e340998d1..54b2f27538 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/RegistryServiceServer.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/RegistryServiceServer.java
@@ -40,7 +40,11 @@ import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+@Component
public class RegistryServiceServer implements IServer {
private static final Logger logger = LoggerFactory.getLogger(RegistryServiceServer.class);
@@ -51,6 +55,9 @@ public class RegistryServiceServer implements IServer {
private TServer server;
+ @Autowired
+ private ApplicationContext applicationContext;
+
private List<DBInitConfig> dbInitConfigs =
Arrays.asList(new ExpCatalogDBInitConfig(), new AppCatalogDBInitConfig(), new ReplicaCatalogDBInitConfig());
@@ -138,8 +145,9 @@ public class RegistryServiceServer implements IServer {
@Override
public void start() throws Exception {
setStatus(ServerStatus.STARTING);
+ RegistryServiceHandler handler = applicationContext.getBean(RegistryServiceHandler.class);
RegistryService.Processor<RegistryServiceHandler> orchestratorService =
- new RegistryService.Processor<RegistryServiceHandler>(new RegistryServiceHandler());
+ new RegistryService.Processor<RegistryServiceHandler>(handler);
StartRegistryServer(orchestratorService);
}
diff --git a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/SharingRegistryServer.java b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/SharingRegistryServer.java
index 9a45e13324..bff0064444 100644
--- a/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/SharingRegistryServer.java
+++ b/airavata-api/src/main/java/org/apache/airavata/api/thrift/server/SharingRegistryServer.java
@@ -38,7 +38,11 @@ import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+@Component
public class SharingRegistryServer implements IServer {
private static final Logger logger = LoggerFactory.getLogger(SharingRegistryServer.class);
@@ -52,6 +56,9 @@ public class SharingRegistryServer implements IServer {
private TServer server;
private boolean testMode = false;
+ @Autowired
+ private ApplicationContext applicationContext;
+
public SharingRegistryServer() {
setStatus(IServer.ServerStatus.STOPPED);
}
@@ -73,8 +80,9 @@ public class SharingRegistryServer implements IServer {
final int serverPort = Integer.parseInt(ServerSettings.getSetting(SHARING_REG_SERVER_PORT));
final String serverHost = ServerSettings.getSetting(SHARING_REG_SERVER_HOST);
- SharingRegistryService.Processor processor = new SharingRegistryService.Processor(
- new SharingRegistryServerHandler(createSharingRegistryDBInitConfig()));
+ // SharingRegistryServerHandler doesn't need DBInitConfig anymore - it's a Spring bean
+ SharingRegistryServerHandler handler = applicationContext.getBean(SharingRegistryServerHandler.class);
+ SharingRegistryService.Processor processor = new SharingRegistryService.Processor(handler);
TServerTransport serverTransport;
TThreadPoolServer.Args options;
diff --git a/airavata-api/src/main/java/org/apache/airavata/config/BackgroundServicesLauncher.java b/airavata-api/src/main/java/org/apache/airavata/config/BackgroundServicesLauncher.java
new file mode 100644
index 0000000000..5e94cbc8c1
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/config/BackgroundServicesLauncher.java
@@ -0,0 +1,234 @@
+/**
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.airavata.config;
+
+import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.helix.impl.controller.HelixController;
+import org.apache.airavata.helix.impl.participant.GlobalParticipant;
+import org.apache.airavata.helix.impl.workflow.PostWorkflowManager;
+import org.apache.airavata.helix.impl.workflow.PreWorkflowManager;
+import org.apache.airavata.helix.impl.workflow.ParserWorkflowManager;
+import org.apache.airavata.monitor.email.EmailBasedMonitor;
+import org.apache.airavata.monitor.platform.MonitoringServer;
+import org.apache.airavata.monitor.realtime.RealtimeMonitor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+
+/**
+ * Configuration class to launch all background services when Spring Boot starts.
+ * Services are started in the correct order based on dependencies.
+ */
+@Configuration
+public class BackgroundServicesLauncher {
+
+ private static final Logger logger = LoggerFactory.getLogger(BackgroundServicesLauncher.class);
+
+ @Bean
+ @Order(1)
+ public CommandLineRunner startHelixController() {
+ return args -> {
+ if (shouldStartService("helix.controller.enabled", true)) {
+ logger.info("Starting Helix Controller...");
+ Thread controllerThread = new Thread(() -> {
+ try {
+ HelixController controller = new HelixController();
+ controller.startServer();
+ } catch (Exception e) {
+ logger.error("Failed to start Helix Controller", e);
+ }
+ });
+ controllerThread.setName("HelixController");
+ controllerThread.setDaemon(true);
+ controllerThread.start();
+ logger.info("Helix Controller thread started");
+ }
+ };
+ }
+
+ @Bean
+ @Order(2)
+ public CommandLineRunner startGlobalParticipant() {
+ return args -> {
+ if (shouldStartService("helix.participant.enabled", true)) {
+ logger.info("Starting Global Participant...");
+ Thread participantThread = new Thread(() -> {
+ try {
+ GlobalParticipant.main(new String[0]);
+ } catch (Exception e) {
+ logger.error("Failed to start Global Participant", e);
+ }
+ });
+ participantThread.setName("GlobalParticipant");
+ participantThread.setDaemon(true);
+ participantThread.start();
+ logger.info("Global Participant thread started");
+ }
+ };
+ }
+
+ @Bean
+ @Order(3)
+ public CommandLineRunner startPreWorkflowManager() {
+ return args -> {
+ if (shouldStartService("workflow.pre.enabled", true)) {
+ logger.info("Starting Pre Workflow Manager...");
+ Thread preWmThread = new Thread(() -> {
+ try {
+ PreWorkflowManager manager = new PreWorkflowManager();
+ manager.startServer();
+ // Keep thread alive
+ Thread.currentThread().join();
+ } catch (Exception e) {
+ logger.error("Failed to start Pre Workflow Manager", e);
+ }
+ });
+ preWmThread.setName("PreWorkflowManager");
+ preWmThread.setDaemon(true);
+ preWmThread.start();
+ logger.info("Pre Workflow Manager thread started");
+ }
+ };
+ }
+
+ @Bean
+ @Order(4)
+ public CommandLineRunner startParserWorkflowManager() {
+ return args -> {
+ if (shouldStartService("workflow.parser.enabled", true)) {
+ logger.info("Starting Parser Workflow Manager...");
+ Thread parserWmThread = new Thread(() -> {
+ try {
+ ParserWorkflowManager.main(new String[0]);
+ } catch (Exception e) {
+ logger.error("Failed to start Parser Workflow Manager", e);
+ }
+ });
+ parserWmThread.setName("ParserWorkflowManager");
+ parserWmThread.setDaemon(true);
+ parserWmThread.start();
+ logger.info("Parser Workflow Manager thread started");
+ }
+ };
+ }
+
+ @Bean
+ @Order(5)
+ public CommandLineRunner startPostWorkflowManager() {
+ return args -> {
+ if (shouldStartService("workflow.post.enabled", true)) {
+ logger.info("Starting Post Workflow Manager...");
+ Thread postWmThread = new Thread(() -> {
+ try {
+ PostWorkflowManager manager = new PostWorkflowManager();
+ manager.startServer();
+ Thread.currentThread().join();
+ } catch (Exception e) {
+ logger.error("Failed to start Post Workflow Manager", e);
+ }
+ });
+ postWmThread.setName("PostWorkflowManager");
+ postWmThread.setDaemon(true);
+ postWmThread.start();
+ logger.info("Post Workflow Manager thread started");
+ }
+ };
+ }
+
+ @Bean
+ @Order(6)
+ public CommandLineRunner startRealtimeMonitor() {
+ return args -> {
+ if (shouldStartService("monitor.realtime.enabled", true)) {
+ logger.info("Starting Realtime Monitor...");
+ Thread monitorThread = new Thread(() -> {
+ try {
+ RealtimeMonitor.main(new String[0]);
+ } catch (Exception e) {
+ logger.error("Failed to start Realtime Monitor", e);
+ }
+ });
+ monitorThread.setName("RealtimeMonitor");
+ monitorThread.setDaemon(true);
+ monitorThread.start();
+ logger.info("Realtime Monitor thread started");
+ }
+ };
+ }
+
+ @Bean
+ @Order(7)
+ public CommandLineRunner startEmailMonitor() {
+ return args -> {
+ if (shouldStartService("monitor.email.enabled", true)) {
+ logger.info("Starting Email Monitor...");
+ Thread emailThread = new Thread(() -> {
+ try {
+ EmailBasedMonitor monitor = new EmailBasedMonitor();
+ monitor.startServer();
+ } catch (Exception e) {
+ logger.error("Failed to start Email Monitor", e);
+ }
+ });
+ emailThread.setName("EmailMonitor");
+ emailThread.setDaemon(true);
+ emailThread.start();
+ logger.info("Email Monitor thread started");
+ }
+ };
+ }
+
+ @Bean
+ @Order(8)
+ public CommandLineRunner startMonitoringServer() {
+ return args -> {
+ if (ServerSettings.getBooleanSetting("api.server.monitoring.enabled")) {
+ logger.info("Starting Monitoring Server...");
+ try {
+ MonitoringServer monitoringServer = new MonitoringServer(
+ ServerSettings.getSetting("api.server.monitoring.host"),
+ ServerSettings.getIntSetting("api.server.monitoring.port"));
+ monitoringServer.start();
+ Runtime.getRuntime().addShutdownHook(new Thread(monitoringServer::stop));
+ logger.info("Monitoring Server started successfully");
+ } catch (Exception e) {
+ logger.error("Failed to start Monitoring Server", e);
+ }
+ }
+ };
+ }
+
+ private boolean shouldStartService(String propertyKey, boolean defaultValue) {
+ try {
+ String value = ServerSettings.getSetting(propertyKey);
+ if (value != null) {
+ return Boolean.parseBoolean(value);
+ }
+ return defaultValue;
+ } catch (Exception e) {
+ logger.debug("Property {} not found, using default: {}", propertyKey, defaultValue);
+ return defaultValue;
+ }
+ }
+}
+
diff --git a/airavata-api/src/main/java/org/apache/airavata/config/JpaConfig.java b/airavata-api/src/main/java/org/apache/airavata/config/JpaConfig.java
new file mode 100644
index 0000000000..bd3dfc4eca
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/config/JpaConfig.java
@@ -0,0 +1,167 @@
+/**
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.airavata.config;
+
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import org.apache.airavata.common.utils.JDBCConfig;
+import org.apache.airavata.common.utils.JPAUtils;
+import org.apache.airavata.profile.commons.utils.ProfileServiceJDBCConfig;
+import org.apache.airavata.registry.core.utils.AppCatalogJDBCConfig;
+import org.apache.airavata.registry.core.utils.ExpCatalogJDBCConfig;
+import org.apache.airavata.registry.core.utils.ReplicaCatalogJDBCConfig;
+import org.apache.airavata.registry.core.utils.WorkflowCatalogJDBCConfig;
+import org.apache.airavata.sharing.db.utils.SharingRegistryJDBCConfig;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Scope;
+import org.springframework.orm.jpa.JpaTransactionManager;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * Configuration for multiple JPA persistence units.
+ * Spring Boot typically expects a single persistence unit, so we need
+ * custom configuration for each of the 6 persistence units.
+ */
+@Configuration
+@EnableTransactionManagement
+public class JpaConfig {
+
+ // Persistence unit names
+ public static final String PROFILE_SERVICE_PU = "profile_service";
+ public static final String APPCATALOG_PU = "appcatalog_data_new";
+ public static final String EXPCATALOG_PU = "experiment_data_new";
+ public static final String REPLICACATALOG_PU = "replicacatalog_data_new";
+ public static final String WORKFLOWCATALOG_PU = "workflowcatalog_data_new";
+ public static final String SHARING_REGISTRY_PU = "airavata-sharing-registry";
+
+ @Bean(name = "profileServiceEntityManagerFactory")
+ @Primary
+ public EntityManagerFactory profileServiceEntityManagerFactory() {
+ JDBCConfig jdbcConfig = new ProfileServiceJDBCConfig();
+ return JPAUtils.getEntityManagerFactory(PROFILE_SERVICE_PU, jdbcConfig);
+ }
+
+ @Bean(name = "appCatalogEntityManagerFactory")
+ public EntityManagerFactory appCatalogEntityManagerFactory() {
+ JDBCConfig jdbcConfig = new AppCatalogJDBCConfig();
+ return JPAUtils.getEntityManagerFactory(APPCATALOG_PU, jdbcConfig);
+ }
+
+ @Bean(name = "expCatalogEntityManagerFactory")
+ public EntityManagerFactory expCatalogEntityManagerFactory() {
+ JDBCConfig jdbcConfig = new ExpCatalogJDBCConfig();
+ return JPAUtils.getEntityManagerFactory(EXPCATALOG_PU, jdbcConfig);
+ }
+
+ @Bean(name = "replicaCatalogEntityManagerFactory")
+ public EntityManagerFactory replicaCatalogEntityManagerFactory() {
+ JDBCConfig jdbcConfig = new ReplicaCatalogJDBCConfig();
+ return JPAUtils.getEntityManagerFactory(REPLICACATALOG_PU, jdbcConfig);
+ }
+
+ @Bean(name = "workflowCatalogEntityManagerFactory")
+ public EntityManagerFactory workflowCatalogEntityManagerFactory() {
+ JDBCConfig jdbcConfig = new WorkflowCatalogJDBCConfig();
+ return JPAUtils.getEntityManagerFactory(WORKFLOWCATALOG_PU, jdbcConfig);
+ }
+
+ @Bean(name = "sharingRegistryEntityManagerFactory")
+ public EntityManagerFactory sharingRegistryEntityManagerFactory() {
+ JDBCConfig jdbcConfig = new SharingRegistryJDBCConfig();
+ return JPAUtils.getEntityManagerFactory(SHARING_REGISTRY_PU, jdbcConfig);
+ }
+
+ // Transaction managers for each persistence unit
+ @Bean(name = "profileServiceTransactionManager")
+ @Primary
+ public PlatformTransactionManager profileServiceTransactionManager() {
+ return new JpaTransactionManager(profileServiceEntityManagerFactory());
+ }
+
+ @Bean(name = "appCatalogTransactionManager")
+ public PlatformTransactionManager appCatalogTransactionManager() {
+ return new JpaTransactionManager(appCatalogEntityManagerFactory());
+ }
+
+ @Bean(name = "expCatalogTransactionManager")
+ public PlatformTransactionManager expCatalogTransactionManager() {
+ return new JpaTransactionManager(expCatalogEntityManagerFactory());
+ }
+
+ @Bean(name = "replicaCatalogTransactionManager")
+ public PlatformTransactionManager replicaCatalogTransactionManager() {
+ return new JpaTransactionManager(replicaCatalogEntityManagerFactory());
+ }
+
+ @Bean(name = "workflowCatalogTransactionManager")
+ public PlatformTransactionManager workflowCatalogTransactionManager() {
+ return new JpaTransactionManager(workflowCatalogEntityManagerFactory());
+ }
+
+ @Bean(name = "sharingRegistryTransactionManager")
+ public PlatformTransactionManager sharingRegistryTransactionManager() {
+ return new JpaTransactionManager(sharingRegistryEntityManagerFactory());
+ }
+
+ // EntityManager beans for injection into repositories
+ // Note: EntityManagers are thread-safe when used with Spring's transaction management
+ // We use prototype scope to create new instances as needed
+ @Bean(name = "appCatalogEntityManager")
+ @Scope("prototype")
+ public EntityManager appCatalogEntityManager(@Qualifier("appCatalogEntityManagerFactory") EntityManagerFactory emf) {
+ return emf.createEntityManager();
+ }
+
+ @Bean(name = "expCatalogEntityManager")
+ @Scope("prototype")
+ public EntityManager expCatalogEntityManager(@Qualifier("expCatalogEntityManagerFactory") EntityManagerFactory emf) {
+ return emf.createEntityManager();
+ }
+
+ @Bean(name = "replicaCatalogEntityManager")
+ @Scope("prototype")
+ public EntityManager replicaCatalogEntityManager(@Qualifier("replicaCatalogEntityManagerFactory") EntityManagerFactory emf) {
+ return emf.createEntityManager();
+ }
+
+ @Bean(name = "workflowCatalogEntityManager")
+ @Scope("prototype")
+ public EntityManager workflowCatalogEntityManager(@Qualifier("workflowCatalogEntityManagerFactory") EntityManagerFactory emf) {
+ return emf.createEntityManager();
+ }
+
+ @Bean(name = "profileServiceEntityManager")
+ @Scope("prototype")
+ @Primary
+ public EntityManager profileServiceEntityManager(@Qualifier("profileServiceEntityManagerFactory") EntityManagerFactory emf) {
+ return emf.createEntityManager();
+ }
+
+ @Bean(name = "sharingRegistryEntityManager")
+ @Scope("prototype")
+ public EntityManager sharingRegistryEntityManager(@Qualifier("sharingRegistryEntityManagerFactory") EntityManagerFactory emf) {
+ return emf.createEntityManager();
+ }
+}
+
diff --git a/airavata-api/src/main/java/org/apache/airavata/config/RegistryServiceProvider.java b/airavata-api/src/main/java/org/apache/airavata/config/RegistryServiceProvider.java
new file mode 100644
index 0000000000..9e5953f9e5
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/config/RegistryServiceProvider.java
@@ -0,0 +1,47 @@
+/**
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.airavata.config;
+
+import org.apache.airavata.service.RegistryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * Provider to make RegistryService available to components that can't use Spring injection
+ * (e.g., workflow managers started via main methods).
+ */
+@Component
+public class RegistryServiceProvider {
+
+ private static RegistryService instance;
+
+ @Autowired
+ public void setRegistryService(RegistryService registryService) {
+ RegistryServiceProvider.instance = registryService;
+ }
+
+ public static RegistryService getInstance() {
+ if (instance == null) {
+ throw new IllegalStateException("RegistryService not initialized. Spring context may not be ready.");
+ }
+ return instance;
+ }
+}
+
diff --git a/airavata-api/src/main/java/org/apache/airavata/config/ThriftServerLauncher.java b/airavata-api/src/main/java/org/apache/airavata/config/ThriftServerLauncher.java
new file mode 100644
index 0000000000..82a436b641
--- /dev/null
+++ b/airavata-api/src/main/java/org/apache/airavata/config/ThriftServerLauncher.java
@@ -0,0 +1,87 @@
+/**
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.apache.airavata.config;
+
+import org.apache.airavata.common.utils.ApplicationSettings;
+import org.apache.airavata.main.ThriftAPI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * Launches Thrift API servers using Spring context.
+ * This runs after background services are started (Order 10).
+ */
+@Component
+@Order(10)
+public class ThriftServerLauncher implements CommandLineRunner {
+
+ private static final Logger logger = LoggerFactory.getLogger(ThriftServerLauncher.class);
+ private static final String SERVERS_KEY = "servers";
+
+ @Autowired
+ private ApplicationContext applicationContext;
+
+ @Override
+ public void run(String... args) throws Exception {
+ logger.info("Starting Thrift API servers via Spring integration...");
+
+ // Set Spring context in ThriftAPI for server loading
+ ThriftAPI.setSpringContext((org.springframework.context.ConfigurableApplicationContext) applicationContext);
+
+ // Parse server names from args
+ String serverNames = "all";
+ for (String string : args) {
+ logger.info("Server Arguments: " + string);
+ if (string.startsWith("--servers=")) {
+ serverNames = string.substring("--servers=".length());
+ }
+ }
+ serverNames = ApplicationSettings.getSetting(SERVERS_KEY, serverNames);
+
+ // Start all Thrift servers using ThriftAPI's logic
+ // This will use Spring context for server instances
+ ThriftAPI.startAllServers(serverNames);
+
+ // Keep the application running
+ logger.info("All Airavata services started successfully. Application will continue running...");
+ keepAlive();
+ }
+
+ private void keepAlive() {
+ // Keep the main thread alive so Spring application doesn't exit
+ // Background services run in daemon threads, so we need to keep main thread alive
+ try {
+ synchronized (this) {
+ while (!Thread.currentThread().isInterrupted()) {
+ this.wait();
+ }
+ }
+ } catch (InterruptedException e) {
+ logger.info("ThriftServerLauncher interrupted, shutting down...");
+ Thread.currentThread().interrupt();
+ }
+ }
+}
+
diff --git a/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/PostWorkflowManager.java b/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/PostWorkflowManager.java
index 09e1086486..1ede009214 100644
--- a/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/PostWorkflowManager.java
+++ b/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/PostWorkflowManager.java
@@ -114,10 +114,15 @@ public class PostWorkflowManager extends WorkflowManager {
RegistryService registryService;
try {
- registryService = ServiceFactory.getInstance().getRegistryService();
- } catch (ServiceFactoryException e) {
- logger.error("Failed to get RegistryService from ServiceFactory", e);
- return false;
+ registryService = org.apache.airavata.config.RegistryServiceProvider.getInstance();
+ } catch (Exception e) {
+ // Fallback to ServiceFactory for backward compatibility
+ try {
+ registryService = ServiceFactory.getInstance().getRegistryService();
+ } catch (ServiceFactoryException ex) {
+ logger.error("Failed to get RegistryService from ServiceFactory", ex);
+ return false;
+ }
}
var jobId = jobStatusResult.getJobId();
diff --git a/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/PreWorkflowManager.java b/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/PreWorkflowManager.java
index f05f9c6060..c3278c7001 100644
--- a/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/PreWorkflowManager.java
+++ b/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/PreWorkflowManager.java
@@ -93,7 +93,7 @@ public class PreWorkflowManager extends WorkflowManager {
private String createAndLaunchPreWorkflow(String processId, boolean forceRun) throws Exception {
prewfCounter.inc();
- RegistryService registryService = ServiceFactory.getInstance().getRegistryService();
+ RegistryService registryService = getRegistryService();
ProcessModel processModel;
ExperimentModel experimentModel;
diff --git a/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/WorkflowManager.java b/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/WorkflowManager.java
index 62a3bd9869..fda4fee9ac 100644
--- a/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/WorkflowManager.java
+++ b/airavata-api/src/main/java/org/apache/airavata/helix/impl/workflow/WorkflowManager.java
@@ -103,9 +103,18 @@ public class WorkflowManager {
}
private void initRegistryService()
- throws ApplicationSettingsException, IllegalAccessException, ClassNotFoundException, InstantiationException,
- ServiceFactoryException {
- this.registryService = ServiceFactory.getInstance().getRegistryService();
+ throws ApplicationSettingsException, IllegalAccessException, ClassNotFoundException, InstantiationException {
+ // Try to get from Spring context first, fallback to ServiceFactory for backward compatibility
+ try {
+ this.registryService = org.apache.airavata.config.RegistryServiceProvider.getInstance();
+ } catch (Exception e) {
+ // Fallback to ServiceFactory if Spring context not available
+ try {
+ this.registryService = ServiceFactory.getInstance().getRegistryService();
+ } catch (ServiceFactoryException ex) {
+ throw new IllegalStateException("Failed to get RegistryService", ex);
+ }
+ }
}
public Publisher getStatusPublisher() {
diff --git a/airavata-api/src/main/java/org/apache/airavata/main/ThriftAPI.java b/airavata-api/src/main/java/org/apache/airavata/main/ThriftAPI.java
index c2c87aceea..251a9d7eca 100644
--- a/airavata-api/src/main/java/org/apache/airavata/main/ThriftAPI.java
+++ b/airavata-api/src/main/java/org/apache/airavata/main/ThriftAPI.java
@@ -35,6 +35,9 @@ import org.apache.airavata.common.utils.StringUtil.CommandLineParameters;
import org.apache.airavata.monitor.platform.MonitoringServer;
import org.apache.commons.cli.ParseException;
import org.apache.zookeeper.server.ServerCnxnFactory;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.apache.airavata.AiravataApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,6 +51,20 @@ public class ThriftAPI {
private static final String serverStartedFileNamePrefix = "server_start";
private static boolean systemShutDown = false;
private static String STOP_COMMAND_STR = "stop";
+ private static ConfigurableApplicationContext springContext;
+
+ /**
+ * Set the Spring application context for server loading.
+ * Called by AiravataApplication after Spring context is initialized.
+ */
+ public static void setSpringContext(ConfigurableApplicationContext context) {
+ springContext = context;
+ logger.info("Spring context set in ThriftAPI");
+ }
+
+ public static ConfigurableApplicationContext getSpringContext() {
+ return springContext;
+ }
private static final String ALL_IN_ONE = "all";
private static final String API_ORCH = "api-orch";
@@ -78,12 +95,24 @@ public class ThriftAPI {
Class<?> classInstance;
try {
classInstance = ThriftAPI.class.getClassLoader().loadClass(serverClassName);
- servers.add((IServer) classInstance.newInstance());
+ // Try to get from Spring context first, otherwise use reflection
+ IServer server = null;
+ if (springContext != null) {
+ try {
+ server = springContext.getBean(classInstance.asSubclass(IServer.class));
+ } catch (Exception e) {
+ // Not a Spring bean, use reflection
+ logger.debug("Server {} not found in Spring context, using reflection", serverClassName);
+ }
+ }
+ if (server == null) {
+ server = (IServer) classInstance.getDeclaredConstructor().newInstance();
+ }
+ servers.add(server);
} catch (ClassNotFoundException e) {
logger.error("Error while locating server implementation \"" + serverString + "\"!!!", e);
- } catch (InstantiationException e) {
- logger.error("Error while initiating server instance \"" + serverString + "\"!!!", e);
- } catch (IllegalAccessException e) {
+ } catch (InstantiationException | IllegalAccessException |
+ java.lang.reflect.InvocationTargetException | NoSuchMethodException e) {
logger.error("Error while initiating server instance \"" + serverString + "\"!!!", e);
} catch (ClassCastException e) {
logger.error("Invalid server \"" + serverString + "\"!!!", e);
@@ -104,7 +133,7 @@ public class ThriftAPI {
});
}
- private static List<String> handleServerDependencies(String serverNames) {
+ public static List<String> handleServerDependencies(String serverNames) {
List<String> serverList = new ArrayList<>(Arrays.asList(serverNames.split(",")));
if (serverList.indexOf(ALL_IN_ONE) > -1) {
serverList.clear();
@@ -168,9 +197,33 @@ public class ThriftAPI {
}
}
- private static void performServerStart(String[] args) {
+ public static void performServerStart(String[] args) {
setServerStarted();
logger.info("Airavata server instance starting...");
+
+ // Spring context should already be initialized by AiravataApplication
+ // Try to get it from Spring's ApplicationContextAware or use a static reference
+ if (springContext == null) {
+ logger.warn("Spring context not available, attempting to initialize...");
+ try {
+ springContext = new AnnotationConfigApplicationContext(AiravataApplication.class);
+ logger.info("Spring application context initialized successfully");
+
+ // Register shutdown hook for Spring context
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (springContext != null) {
+ logger.info("Closing Spring application context...");
+ springContext.close();
+ }
+ }));
+ } catch (Exception e) {
+ logger.error("Failed to initialize Spring application context", e);
+ throw new RuntimeException("Failed to initialize Spring context", e);
+ }
+ } else {
+ logger.info("Using existing Spring application context");
+ }
+
String serverNames = "all";
for (String string : args) {
logger.info("Server Arguments: " + string);
@@ -342,7 +395,7 @@ public class ThriftAPI {
private static final int SERVER_STATUS_CHANGE_WAIT_INTERVAL = 500;
- private static void waitForServerToStart(IServer server, Integer maxWait) throws Exception {
+ public static void waitForServerToStart(IServer server, Integer maxWait) throws Exception {
int count = 0;
// if (server.getStatus()==ServerStatus.STARTING) {
// logger.info("Waiting for " + server.getName() + " to start...");
diff --git a/airavata-api/src/main/java/org/apache/airavata/profile/tenant/core/repositories/TenantProfileRepository.java b/airavata-api/src/main/java/org/apache/airavata/profile/tenant/core/repositories/TenantProfileRepository.java
index 63290314fc..40787ba4d4 100644
--- a/airavata-api/src/main/java/org/apache/airavata/profile/tenant/core/repositories/TenantProfileRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/profile/tenant/core/repositories/TenantProfileRepository.java
@@ -30,10 +30,12 @@ import org.apache.airavata.profile.commons.tenant.entities.GatewayEntity;
import org.apache.airavata.profile.commons.utils.QueryConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
/**
* Created by goshenoy on 3/8/17.
*/
+@Repository
public class TenantProfileRepository extends AbstractRepository<Gateway, GatewayEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(TenantProfileRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/profile/user/core/repositories/UserProfileRepository.java b/airavata-api/src/main/java/org/apache/airavata/profile/user/core/repositories/UserProfileRepository.java
index 5be2a54db6..979c27dd19 100644
--- a/airavata-api/src/main/java/org/apache/airavata/profile/user/core/repositories/UserProfileRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/profile/user/core/repositories/UserProfileRepository.java
@@ -31,7 +31,9 @@ import org.apache.airavata.profile.commons.utils.ObjectMapperSingleton;
import org.apache.airavata.profile.commons.utils.QueryConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class UserProfileRepository extends AbstractRepository<UserProfile, UserProfileEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(UserProfileRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/AppCatAbstractRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/AppCatAbstractRepository.java
index 9a1bafbeb9..140685059a 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/AppCatAbstractRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/AppCatAbstractRepository.java
@@ -20,17 +20,23 @@
package org.apache.airavata.registry.core.repositories.appcatalog;
import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import org.apache.airavata.registry.core.repositories.AbstractRepository;
-import org.apache.airavata.registry.core.utils.JPAUtil.AppCatalogJPAUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
public class AppCatAbstractRepository<T, E, Id> extends AbstractRepository<T, E, Id> {
+ @Autowired
+ @Qualifier("appCatalogEntityManagerFactory")
+ private EntityManagerFactory entityManagerFactory;
+
public AppCatAbstractRepository(Class<T> thriftGenericClass, Class<E> dbEntityGenericClass) {
super(thriftGenericClass, dbEntityGenericClass);
}
@Override
protected EntityManager getEntityManager() {
- return AppCatalogJPAUtils.getEntityManager();
+ return entityManagerFactory.createEntityManager();
}
}
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationDeploymentRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationDeploymentRepository.java
index 3c5f050ec9..7c47c6752a 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationDeploymentRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationDeploymentRepository.java
@@ -33,7 +33,9 @@ import org.apache.airavata.registry.cpi.AppCatalogException;
import org.apache.airavata.registry.cpi.ApplicationDeployment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ApplicationDeploymentRepository
extends AppCatAbstractRepository<ApplicationDeploymentDescription, ApplicationDeploymentEntity, String>
implements ApplicationDeployment {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationInputRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationInputRepository.java
index 4917721dc2..5070124008 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationInputRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationInputRepository.java
@@ -22,7 +22,9 @@ package org.apache.airavata.registry.core.repositories.appcatalog;
import org.apache.airavata.model.application.io.InputDataObjectType;
import org.apache.airavata.registry.core.entities.appcatalog.ApplicationInputEntity;
import org.apache.airavata.registry.core.entities.appcatalog.ApplicationInputPK;
+import org.springframework.stereotype.Repository;
+@Repository
public class ApplicationInputRepository
extends AppCatAbstractRepository<InputDataObjectType, ApplicationInputEntity, ApplicationInputPK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationInterfaceRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationInterfaceRepository.java
index 091ac4723e..abbfb1d33c 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationInterfaceRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationInterfaceRepository.java
@@ -38,7 +38,9 @@ import org.apache.airavata.registry.cpi.AppCatalogException;
import org.apache.airavata.registry.cpi.ApplicationInterface;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ApplicationInterfaceRepository
extends AppCatAbstractRepository<ApplicationInterfaceDescription, ApplicationInterfaceEntity, String>
implements ApplicationInterface {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationModuleRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationModuleRepository.java
index 8ede093beb..c96dd40c00 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationModuleRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationModuleRepository.java
@@ -18,10 +18,12 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule;
import org.apache.airavata.registry.core.entities.appcatalog.ApplicationModuleEntity;
+@Repository
public class ApplicationModuleRepository
extends AppCatAbstractRepository<ApplicationModule, ApplicationModuleEntity, String> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationOutputRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationOutputRepository.java
index fd20205630..b77f2fbfee 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationOutputRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ApplicationOutputRepository.java
@@ -18,11 +18,13 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.application.io.OutputDataObjectType;
import org.apache.airavata.registry.core.entities.appcatalog.ApplicationOutputEntity;
import org.apache.airavata.registry.core.entities.appcatalog.ApplicationOutputPK;
+@Repository
public class ApplicationOutputRepository
extends AppCatAbstractRepository<OutputDataObjectType, ApplicationOutputEntity, ApplicationOutputPK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/BatchQueuePolicyRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/BatchQueuePolicyRepository.java
index 6bae50c6c1..25c501bfbf 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/BatchQueuePolicyRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/BatchQueuePolicyRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.groupresourceprofile.BatchQueueResourcePolicy;
import org.apache.airavata.registry.core.entities.appcatalog.BatchQueueResourcePolicyEntity;
@@ -25,6 +26,7 @@ import org.apache.airavata.registry.core.entities.appcatalog.BatchQueueResourceP
/**
* Created by skariyat on 2/10/18.
*/
+@Repository
public class BatchQueuePolicyRepository
extends AppCatAbstractRepository<BatchQueueResourcePolicy, BatchQueueResourcePolicyEntity, String> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/BatchQueueRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/BatchQueueRepository.java
index 339aeebefa..6e14746910 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/BatchQueueRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/BatchQueueRepository.java
@@ -18,11 +18,13 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.computeresource.BatchQueue;
import org.apache.airavata.registry.core.entities.appcatalog.BatchQueueEntity;
import org.apache.airavata.registry.core.entities.appcatalog.BatchQueuePK;
+@Repository
public class BatchQueueRepository extends AppCatAbstractRepository<BatchQueue, BatchQueueEntity, BatchQueuePK> {
public BatchQueueRepository() {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourcePolicyRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourcePolicyRepository.java
index 7fbb4db3e8..8f7fa264b5 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourcePolicyRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourcePolicyRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.groupresourceprofile.ComputeResourcePolicy;
import org.apache.airavata.registry.core.entities.appcatalog.ComputeResourcePolicyEntity;
@@ -25,6 +26,7 @@ import org.apache.airavata.registry.core.entities.appcatalog.ComputeResourcePoli
/**
* Created by skariyat on 2/10/18.
*/
+@Repository
public class ComputeResourcePolicyRepository
extends AppCatAbstractRepository<ComputeResourcePolicy, ComputeResourcePolicyEntity, String> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourcePrefRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourcePrefRepository.java
index bd89c4bc09..a0dea442e8 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourcePrefRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourcePrefRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.Map;
@@ -26,6 +27,7 @@ import org.apache.airavata.registry.core.entities.appcatalog.ComputeResourcePref
import org.apache.airavata.registry.core.entities.appcatalog.ComputeResourcePreferencePK;
import org.apache.airavata.registry.core.entities.appcatalog.SSHAccountProvisionerConfiguration;
+@Repository
public class ComputeResourcePrefRepository
extends AppCatAbstractRepository<
ComputeResourcePreference, ComputeResourcePreferenceEntity, ComputeResourcePreferencePK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourceRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourceRepository.java
index a75ce4488f..7584726735 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourceRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ComputeResourceRepository.java
@@ -67,7 +67,9 @@ import org.apache.airavata.registry.cpi.AppCatalogException;
import org.apache.airavata.registry.cpi.ComputeResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ComputeResourceRepository
extends AppCatAbstractRepository<ComputeResourceDescription, ComputeResourceEntity, String>
implements ComputeResource {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/DataMovementRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/DataMovementRepository.java
index 5476698b23..bad0701df4 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/DataMovementRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/DataMovementRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import com.github.dozermapper.core.Mapper;
import org.apache.airavata.model.data.movement.DataMovementInterface;
@@ -25,6 +26,7 @@ import org.apache.airavata.registry.core.entities.appcatalog.DataMovementInterfa
import org.apache.airavata.registry.core.entities.appcatalog.DataMovementInterfacePK;
import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
+@Repository
public class DataMovementRepository
extends AppCatAbstractRepository<DataMovementInterface, DataMovementInterfaceEntity, DataMovementInterfacePK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GatewayGroupsRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GatewayGroupsRepository.java
index a8ba315fde..c485f45ad7 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GatewayGroupsRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GatewayGroupsRepository.java
@@ -18,10 +18,12 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.gatewaygroups.GatewayGroups;
import org.apache.airavata.registry.core.entities.appcatalog.GatewayGroupsEntity;
+@Repository
public class GatewayGroupsRepository extends AppCatAbstractRepository<GatewayGroups, GatewayGroupsEntity, String> {
public GatewayGroupsRepository() {
super(GatewayGroups.class, GatewayGroupsEntity.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepository.java
index b2521277f2..a2d014e01f 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GroupResourceProfileRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.Collections;
@@ -46,6 +47,7 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
/**
* Created by skariyat on 2/8/18.
*/
+@Repository
public class GroupResourceProfileRepository
extends AppCatAbstractRepository<GroupResourceProfile, GroupResourceProfileEntity, String> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GrpComputePrefRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GrpComputePrefRepository.java
index dcd7a29736..d57b73db0a 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GrpComputePrefRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GrpComputePrefRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.groupresourceprofile.AwsComputeResourcePreference;
import org.apache.airavata.model.appcatalog.groupresourceprofile.EnvironmentSpecificPreferences;
@@ -32,6 +33,7 @@ import org.apache.airavata.registry.core.entities.appcatalog.SlurmGroupComputeRe
/**
* Created by skariyat on 2/10/18.
*/
+@Repository
public class GrpComputePrefRepository
extends AppCatAbstractRepository<
GroupComputeResourcePreference, GroupComputeResourcePrefEntity, GroupComputeResourcePrefPK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GwyResourceProfileRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GwyResourceProfileRepository.java
index b5aaf0b245..2f1ee0e5a7 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GwyResourceProfileRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/GwyResourceProfileRepository.java
@@ -36,7 +36,9 @@ import org.apache.airavata.registry.cpi.AppCatalogException;
import org.apache.airavata.registry.cpi.GwyResourceProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class GwyResourceProfileRepository
extends AppCatAbstractRepository<GatewayResourceProfile, GatewayProfileEntity, String>
implements GwyResourceProfile {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/JobSubmissionInterfaceRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/JobSubmissionInterfaceRepository.java
index f10bb006f9..8a7f268973 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/JobSubmissionInterfaceRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/JobSubmissionInterfaceRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import com.github.dozermapper.core.Mapper;
import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionInterface;
@@ -25,6 +26,7 @@ import org.apache.airavata.registry.core.entities.appcatalog.JobSubmissionInterf
import org.apache.airavata.registry.core.entities.appcatalog.JobSubmissionInterfacePK;
import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
+@Repository
public class JobSubmissionInterfaceRepository
extends AppCatAbstractRepository<
JobSubmissionInterface, JobSubmissionInterfaceEntity, JobSubmissionInterfacePK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserInputRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserInputRepository.java
index 6c73093619..9ca3e0a3dc 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserInputRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserInputRepository.java
@@ -24,7 +24,9 @@ import org.apache.airavata.registry.core.entities.appcatalog.ParserInputEntity;
import org.apache.airavata.registry.cpi.AppCatalogException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ParserInputRepository extends AppCatAbstractRepository<ParserInput, ParserInputEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(ParserInputRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserOutputRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserOutputRepository.java
index 0ef087514f..418d370c43 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserOutputRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserOutputRepository.java
@@ -24,7 +24,9 @@ import org.apache.airavata.registry.core.entities.appcatalog.ParserOutputEntity;
import org.apache.airavata.registry.cpi.AppCatalogException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ParserOutputRepository extends AppCatAbstractRepository<ParserOutput, ParserOutputEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(ParserInputRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserRepository.java
index 989e704203..5a31ff63f9 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParserRepository.java
@@ -31,7 +31,9 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.AppCatalogException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ParserRepository extends AppCatAbstractRepository<Parser, ParserEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(ParserRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParsingTemplateRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParsingTemplateRepository.java
index bfd2d38d3f..d9847bb9c9 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParsingTemplateRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ParsingTemplateRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import java.util.HashMap;
import java.util.List;
@@ -27,6 +28,7 @@ import org.apache.airavata.registry.core.entities.appcatalog.ParsingTemplateEnti
import org.apache.airavata.registry.core.utils.DBConstants;
import org.apache.airavata.registry.core.utils.QueryConstants;
+@Repository
public class ParsingTemplateRepository
extends AppCatAbstractRepository<ParsingTemplate, ParsingTemplateEntity, String> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ResourceJobManagerRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ResourceJobManagerRepository.java
index 70f9f7239c..a819c6debf 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ResourceJobManagerRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/ResourceJobManagerRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import jakarta.persistence.Query;
import java.util.HashMap;
@@ -30,6 +31,7 @@ import org.apache.airavata.registry.core.entities.appcatalog.*;
import org.apache.airavata.registry.core.utils.DBConstants;
import org.apache.airavata.registry.core.utils.QueryConstants;
+@Repository
public class ResourceJobManagerRepository
extends AppCatAbstractRepository<ResourceJobManager, ResourceJobManagerEntity, String> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/StoragePrefRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/StoragePrefRepository.java
index b2c70bd1ff..18ed3e9c3f 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/StoragePrefRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/StoragePrefRepository.java
@@ -18,11 +18,13 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference;
import org.apache.airavata.registry.core.entities.appcatalog.StoragePreferenceEntity;
import org.apache.airavata.registry.core.entities.appcatalog.StoragePreferencePK;
+@Repository
public class StoragePrefRepository
extends AppCatAbstractRepository<StoragePreference, StoragePreferenceEntity, StoragePreferencePK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/StorageResourceRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/StorageResourceRepository.java
index 475e414226..12c44b6a5d 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/StorageResourceRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/StorageResourceRepository.java
@@ -37,10 +37,12 @@ import org.apache.airavata.registry.cpi.AppCatalogException;
import org.apache.airavata.registry.cpi.StorageResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
/**
* Created by skariyat on 3/12/18.
*/
+@Repository
public class StorageResourceRepository
extends AppCatAbstractRepository<StorageResourceDescription, StorageResourceEntity, String>
implements StorageResource {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserComputeResourcePreferenceRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserComputeResourcePreferenceRepository.java
index c7dabc76da..e2034053aa 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserComputeResourcePreferenceRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserComputeResourcePreferenceRepository.java
@@ -18,11 +18,13 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference;
import org.apache.airavata.registry.core.entities.appcatalog.UserComputeResourcePreferenceEntity;
import org.apache.airavata.registry.core.entities.appcatalog.UserComputeResourcePreferencePK;
+@Repository
public class UserComputeResourcePreferenceRepository
extends AppCatAbstractRepository<
UserComputeResourcePreference, UserComputeResourcePreferenceEntity, UserComputeResourcePreferencePK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserResourceProfileRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserResourceProfileRepository.java
index 8091926915..d547709fa2 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserResourceProfileRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserResourceProfileRepository.java
@@ -36,7 +36,9 @@ import org.apache.airavata.registry.cpi.AppCatalogException;
import org.apache.airavata.registry.cpi.UsrResourceProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class UserResourceProfileRepository
extends AppCatAbstractRepository<UserResourceProfile, UserResourceProfileEntity, UserResourceProfilePK>
implements UsrResourceProfile {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserStoragePreferenceRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserStoragePreferenceRepository.java
index 66060ad772..e5c76f3ec6 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserStoragePreferenceRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/appcatalog/UserStoragePreferenceRepository.java
@@ -18,11 +18,13 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.appcatalog;
+import org.springframework.stereotype.Repository;
import org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePreference;
import org.apache.airavata.registry.core.entities.appcatalog.UserStoragePreferenceEntity;
import org.apache.airavata.registry.core.entities.appcatalog.UserStoragePreferencePK;
+@Repository
public class UserStoragePreferenceRepository
extends AppCatAbstractRepository<UserStoragePreference, UserStoragePreferenceEntity, UserStoragePreferencePK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExpCatAbstractRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExpCatAbstractRepository.java
index 52a6a313a3..a226f09fe6 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExpCatAbstractRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExpCatAbstractRepository.java
@@ -20,17 +20,23 @@
package org.apache.airavata.registry.core.repositories.expcatalog;
import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import org.apache.airavata.registry.core.repositories.AbstractRepository;
-import org.apache.airavata.registry.core.utils.JPAUtil.ExpCatalogJPAUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
public class ExpCatAbstractRepository<T, E, Id> extends AbstractRepository<T, E, Id> {
+ @Autowired
+ @Qualifier("expCatalogEntityManagerFactory")
+ private EntityManagerFactory entityManagerFactory;
+
public ExpCatAbstractRepository(Class<T> thriftGenericClass, Class<E> dbEntityGenericClass) {
super(thriftGenericClass, dbEntityGenericClass);
}
@Override
protected EntityManager getEntityManager() {
- return ExpCatalogJPAUtils.getEntityManager();
+ return entityManagerFactory.createEntityManager();
}
}
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentErrorRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentErrorRepository.java
index c0312b32ac..5a42fa0460 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentErrorRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentErrorRepository.java
@@ -30,7 +30,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ExperimentErrorRepository
extends ExpCatAbstractRepository<ErrorModel, ExperimentErrorEntity, ExperimentErrorPK> {
private static final Logger logger = LoggerFactory.getLogger(ExperimentErrorRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentInputRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentInputRepository.java
index 5db34cd846..2ed1bed9f4 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentInputRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentInputRepository.java
@@ -29,7 +29,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ExperimentInputRepository
extends ExpCatAbstractRepository<InputDataObjectType, ExperimentInputEntity, ExperimentInputPK> {
private static final Logger logger = LoggerFactory.getLogger(ExperimentInputRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentOutputRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentOutputRepository.java
index ceae29a034..7f15b03e25 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentOutputRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentOutputRepository.java
@@ -29,7 +29,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ExperimentOutputRepository
extends ExpCatAbstractRepository<OutputDataObjectType, ExperimentOutputEntity, ExperimentOutputPK> {
private static final Logger logger = LoggerFactory.getLogger(ExperimentOutputRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentRepository.java
index d3b8fd1a3a..975bd90a6f 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentRepository.java
@@ -37,7 +37,9 @@ import org.apache.airavata.registry.cpi.RegistryException;
import org.apache.airavata.registry.cpi.ResultOrderType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ExperimentRepository extends ExpCatAbstractRepository<ExperimentModel, ExperimentEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(ExperimentRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentStatusRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentStatusRepository.java
index 05398aa487..986aa3566d 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentStatusRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentStatusRepository.java
@@ -33,7 +33,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ExperimentStatusRepository
extends ExpCatAbstractRepository<ExperimentStatus, ExperimentStatusEntity, ExperimentStatusPK> {
private static final Logger logger = LoggerFactory.getLogger(ExperimentStatusRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentSummaryRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentSummaryRepository.java
index f89ef81e9d..bb168ec9fd 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentSummaryRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ExperimentSummaryRepository.java
@@ -37,7 +37,9 @@ import org.apache.airavata.registry.cpi.RegistryException;
import org.apache.airavata.registry.cpi.ResultOrderType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ExperimentSummaryRepository
extends ExpCatAbstractRepository<ExperimentSummaryModel, ExperimentSummaryEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(ExperimentSummaryRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/GatewayRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/GatewayRepository.java
index 010b06a441..1e8b904b36 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/GatewayRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/GatewayRepository.java
@@ -34,7 +34,9 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class GatewayRepository extends ExpCatAbstractRepository<Gateway, GatewayEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(GatewayRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/GatewayUsageReportingCommandRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/GatewayUsageReportingCommandRepository.java
index ec38ed0640..6327131ead 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/GatewayUsageReportingCommandRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/GatewayUsageReportingCommandRepository.java
@@ -27,7 +27,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class GatewayUsageReportingCommandRepository
extends ExpCatAbstractRepository<
GatewayUsageReportingCommand, GatewayUsageReportingCommandEntity, GatewayUsageReportingPK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobRepository.java
index 913f9ad137..b4dd545c67 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobRepository.java
@@ -36,7 +36,9 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class JobRepository extends ExpCatAbstractRepository<JobModel, JobEntity, JobPK> {
private static final Logger logger = LoggerFactory.getLogger(JobRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobStatusRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobStatusRepository.java
index 61bc9310b3..b28f6f2506 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobStatusRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/JobStatusRepository.java
@@ -34,7 +34,9 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class JobStatusRepository extends ExpCatAbstractRepository<JobStatus, JobStatusEntity, JobStatusPK> {
private static final Logger logger = LoggerFactory.getLogger(JobStatusRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/NotificationRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/NotificationRepository.java
index 93b066c33e..7204638c7b 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/NotificationRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/NotificationRepository.java
@@ -33,7 +33,9 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class NotificationRepository extends ExpCatAbstractRepository<Notification, NotificationEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(NotificationRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessErrorRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessErrorRepository.java
index 4b0998b096..9901419f64 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessErrorRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessErrorRepository.java
@@ -30,7 +30,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ProcessErrorRepository extends ExpCatAbstractRepository<ErrorModel, ProcessErrorEntity, ProcessErrorPK> {
private static final Logger logger = LoggerFactory.getLogger(ProcessErrorRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessInputRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessInputRepository.java
index 6fae1e1602..7700b9adfc 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessInputRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessInputRepository.java
@@ -29,7 +29,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ProcessInputRepository
extends ExpCatAbstractRepository<InputDataObjectType, ProcessInputEntity, ProcessInputPK> {
private static final Logger logger = LoggerFactory.getLogger(ProcessInputRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessOutputRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessOutputRepository.java
index 1b3084415c..e81458fab9 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessOutputRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessOutputRepository.java
@@ -29,7 +29,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ProcessOutputRepository
extends ExpCatAbstractRepository<OutputDataObjectType, ProcessOutputEntity, ProcessOutputPK> {
private static final Logger logger = LoggerFactory.getLogger(ProcessOutputRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessRepository.java
index 72fdd2f081..078647ba54 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessRepository.java
@@ -39,14 +39,18 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ProcessRepository extends ExpCatAbstractRepository<ProcessModel, ProcessEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(ProcessRepository.class);
- private final TaskRepository taskRepository = new TaskRepository();
+ private final TaskRepository taskRepository;
- public ProcessRepository() {
+ @org.springframework.beans.factory.annotation.Autowired
+ public ProcessRepository(TaskRepository taskRepository) {
super(ProcessModel.class, ProcessEntity.class);
+ this.taskRepository = taskRepository;
}
protected String saveProcessModelData(ProcessModel processModel) throws RegistryException {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessStatusRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessStatusRepository.java
index c0d8d078aa..0726430922 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessStatusRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessStatusRepository.java
@@ -36,7 +36,9 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ProcessStatusRepository
extends ExpCatAbstractRepository<ProcessStatus, ProcessStatusEntity, ProcessStatusPK> {
private static final Logger logger = LoggerFactory.getLogger(ProcessStatusRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessWorkflowRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessWorkflowRepository.java
index 984fb417c9..9ec242bead 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessWorkflowRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProcessWorkflowRepository.java
@@ -30,7 +30,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ProcessWorkflowRepository
extends ExpCatAbstractRepository<ProcessWorkflow, ProcessWorkflowEntity, ProcessWorkflowPK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProjectRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProjectRepository.java
index ebb637c1d8..edf7f3979d 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProjectRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/ProjectRepository.java
@@ -34,7 +34,9 @@ import org.apache.airavata.registry.cpi.ResultOrderType;
import org.apache.airavata.registry.cpi.utils.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class ProjectRepository extends ExpCatAbstractRepository<Project, ProjectEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(ProjectRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/QueueStatusRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/QueueStatusRepository.java
index 9acfa41e31..d6a16cd2b4 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/QueueStatusRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/QueueStatusRepository.java
@@ -32,7 +32,9 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class QueueStatusRepository extends ExpCatAbstractRepository<QueueStatusModel, QueueStatusEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(QueueStatusRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskErrorRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskErrorRepository.java
index a08840021b..e7fa79ba6b 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskErrorRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskErrorRepository.java
@@ -30,7 +30,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class TaskErrorRepository extends ExpCatAbstractRepository<ErrorModel, TaskErrorEntity, TaskErrorPK> {
private static final Logger logger = LoggerFactory.getLogger(TaskErrorRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskRepository.java
index 1a3f9af601..83196045dc 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskRepository.java
@@ -35,14 +35,18 @@ import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class TaskRepository extends ExpCatAbstractRepository<TaskModel, TaskEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(TaskRepository.class);
- private final JobRepository jobRepository = new JobRepository();
+ private final JobRepository jobRepository;
- public TaskRepository() {
+ @org.springframework.beans.factory.annotation.Autowired
+ public TaskRepository(JobRepository jobRepository) {
super(TaskModel.class, TaskEntity.class);
+ this.jobRepository = jobRepository;
}
protected String saveTaskModelData(TaskModel taskModel) throws RegistryException {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskStatusRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskStatusRepository.java
index 1435416551..56e7510bdd 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskStatusRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/TaskStatusRepository.java
@@ -32,7 +32,9 @@ import org.apache.airavata.registry.core.utils.ObjectMapperSingleton;
import org.apache.airavata.registry.cpi.RegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class TaskStatusRepository extends ExpCatAbstractRepository<TaskStatus, TaskStatusEntity, TaskStatusPK> {
private static final Logger logger = LoggerFactory.getLogger(TaskStatusRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/UserRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/UserRepository.java
index 66887a05c9..6604b604c2 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/UserRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/expcatalog/UserRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.registry.core.repositories.expcatalog;
+import org.springframework.stereotype.Repository;
import java.util.Collections;
import java.util.List;
@@ -29,6 +30,7 @@ import org.apache.airavata.registry.core.utils.DBConstants;
import org.apache.airavata.registry.core.utils.QueryConstants;
import org.apache.airavata.registry.cpi.RegistryException;
+@Repository
public class UserRepository extends ExpCatAbstractRepository<UserProfile, UserEntity, UserPK> {
public UserRepository() {
super(UserProfile.class, UserEntity.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/DataProductRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/DataProductRepository.java
index c9fc69d68a..5a04bff25b 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/DataProductRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/DataProductRepository.java
@@ -33,17 +33,22 @@ import org.apache.airavata.registry.cpi.DataProductInterface;
import org.apache.airavata.registry.cpi.ReplicaCatalogException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class DataProductRepository extends RepCatAbstractRepository<DataProductModel, DataProductEntity, String>
implements DataProductInterface {
private static final Logger logger = LoggerFactory.getLogger(DataProductRepository.class);
- private static final DataReplicaLocationRepository dataReplicaLocationRepository =
- new DataReplicaLocationRepository();
-
- public DataProductRepository() {
+
+ private final DataReplicaLocationRepository dataReplicaLocationRepository;
+
+ @org.springframework.beans.factory.annotation.Autowired
+ public DataProductRepository(DataReplicaLocationRepository dataReplicaLocationRepository) {
super(DataProductModel.class, DataProductEntity.class);
+ this.dataReplicaLocationRepository = dataReplicaLocationRepository;
}
+
protected String saveDataProductModelData(DataProductModel dataProductModel) throws ReplicaCatalogException {
DataProductEntity dataProductEntity = saveDataProduct(dataProductModel);
return dataProductEntity.getProductUri();
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/DataReplicaLocationRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/DataReplicaLocationRepository.java
index df0ad7693e..790e762dd5 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/DataReplicaLocationRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/DataReplicaLocationRepository.java
@@ -31,7 +31,9 @@ import org.apache.airavata.registry.cpi.DataReplicaLocationInterface;
import org.apache.airavata.registry.cpi.ReplicaCatalogException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class DataReplicaLocationRepository
extends RepCatAbstractRepository<DataReplicaLocationModel, DataReplicaLocationEntity, String>
implements DataReplicaLocationInterface {
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/RepCatAbstractRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/RepCatAbstractRepository.java
index 1572045ae4..45bc254878 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/RepCatAbstractRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/replicacatalog/RepCatAbstractRepository.java
@@ -20,17 +20,23 @@
package org.apache.airavata.registry.core.repositories.replicacatalog;
import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import org.apache.airavata.registry.core.repositories.AbstractRepository;
-import org.apache.airavata.registry.core.utils.JPAUtil.RepCatalogJPAUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
public class RepCatAbstractRepository<T, E, Id> extends AbstractRepository<T, E, Id> {
+ @Autowired
+ @Qualifier("replicaCatalogEntityManagerFactory")
+ private EntityManagerFactory entityManagerFactory;
+
public RepCatAbstractRepository(Class<T> thriftGenericClass, Class<E> dbEntityGenericClass) {
super(thriftGenericClass, dbEntityGenericClass);
}
@Override
protected EntityManager getEntityManager() {
- return RepCatalogJPAUtils.getEntityManager();
+ return entityManagerFactory.createEntityManager();
}
}
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowCatAbstractRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowCatAbstractRepository.java
index 83b9b7a133..ff48749759 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowCatAbstractRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowCatAbstractRepository.java
@@ -20,17 +20,23 @@
package org.apache.airavata.registry.core.repositories.workflowcatalog;
import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
import org.apache.airavata.registry.core.repositories.AbstractRepository;
-import org.apache.airavata.registry.core.utils.JPAUtil.WorkflowCatalogJPAUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
public class WorkflowCatAbstractRepository<T, E, Id> extends AbstractRepository<T, E, Id> {
+ @Autowired
+ @Qualifier("workflowCatalogEntityManagerFactory")
+ private EntityManagerFactory entityManagerFactory;
+
public WorkflowCatAbstractRepository(Class<T> thriftGenericClass, Class<E> dbEntityGenericClass) {
super(thriftGenericClass, dbEntityGenericClass);
}
@Override
protected EntityManager getEntityManager() {
- return WorkflowCatalogJPAUtils.getEntityManager();
+ return entityManagerFactory.createEntityManager();
}
}
diff --git a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowRepository.java b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowRepository.java
index 70ca71e890..5bbb878a11 100644
--- a/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowRepository.java
@@ -32,7 +32,9 @@ import org.apache.airavata.registry.cpi.WorkflowCatalog;
import org.apache.airavata.registry.cpi.WorkflowCatalogException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class WorkflowRepository extends WorkflowCatAbstractRepository<AiravataWorkflow, AiravataWorkflowEntity, String>
implements WorkflowCatalog {
private static final Logger logger = LoggerFactory.getLogger(WorkflowRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/AiravataService.java b/airavata-api/src/main/java/org/apache/airavata/service/AiravataService.java
index e25e4b4ae5..cfef4a57c2 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/AiravataService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/AiravataService.java
@@ -135,7 +135,9 @@ import org.apache.airavata.sharing.models.User;
import org.apache.airavata.sharing.models.UserGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+@Service
public class AiravataService {
private static final Logger logger = LoggerFactory.getLogger(AiravataService.class);
@@ -172,31 +174,22 @@ public class AiravataService {
return profile != null;
}
- private RegistryService registryService;
- private SharingRegistryService sharingRegistryService;
- private CredentialStoreService credentialStoreService;
+ private final RegistryService registryService;
+ private final SharingRegistryService sharingRegistryService;
+ private final CredentialStoreService credentialStoreService;
private Publisher statusPublisher;
private Publisher experimentPublisher;
- public AiravataService() throws AiravataException, ServiceFactoryException {
- ServiceFactory factory;
- try {
- factory = ServiceFactory.getInstance();
- } catch (ServiceFactoryException e) {
- String msg = "Error initializing AiravataService: failed to get ServiceFactory. Reason: " + e.getMessage();
- logger.error(msg, e);
- AiravataException exception = new AiravataException(msg);
- exception.initCause(e);
- throw exception;
- }
-
- registryService = factory.getRegistryService();
+ public AiravataService(
+ RegistryService registryService,
+ SharingRegistryService sharingRegistryService,
+ CredentialStoreService credentialStoreService) throws AiravataException {
+ this.registryService = registryService;
+ this.sharingRegistryService = sharingRegistryService;
+ this.credentialStoreService = credentialStoreService;
+
logger.info("Initialized RegistryService");
-
- sharingRegistryService = factory.getSharingRegistryService();
logger.info("Initialized SharingRegistryService");
-
- credentialStoreService = factory.getCredentialStoreService();
logger.info("Initialized CredentialStoreService");
try {
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/CredentialStoreService.java b/airavata-api/src/main/java/org/apache/airavata/service/CredentialStoreService.java
index 4d513f49e2..04a4cb9381 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/CredentialStoreService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/CredentialStoreService.java
@@ -43,7 +43,9 @@ import org.apache.airavata.model.credential.store.*;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+@Service
public class CredentialStoreService {
private static final Logger logger = LoggerFactory.getLogger(CredentialStoreService.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/GroupManagerService.java b/airavata-api/src/main/java/org/apache/airavata/service/GroupManagerService.java
index 0e9ce73053..954de1f688 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/GroupManagerService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/GroupManagerService.java
@@ -38,21 +38,23 @@ import org.apache.airavata.sharing.models.User;
import org.apache.airavata.sharing.models.UserGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+@Service
public class GroupManagerService {
private static final Logger logger = LoggerFactory.getLogger(GroupManagerService.class);
- private UserProfileRepository userProfileRepository = new UserProfileRepository();
+ @Autowired
+ private UserProfileRepository userProfileRepository;
+ @Autowired
private SharingRegistryService sharingService;
- private SharingRegistryService getSharingService() throws ServiceFactoryException {
- if (sharingService == null) {
- sharingService = ServiceFactory.getInstance().getSharingRegistryService();
- }
+ private SharingRegistryService getSharingService() {
return sharingService;
}
public String createGroup(AuthzToken authzToken, GroupModel groupModel)
- throws GroupManagerServiceException, SharingRegistryException, ServiceFactoryException {
+ throws GroupManagerServiceException, SharingRegistryException {
// TODO Validations for authorization
var sharingUserGroup = new UserGroup();
sharingUserGroup.setGroupId(UUID.randomUUID().toString());
@@ -78,7 +80,7 @@ public class GroupManagerService {
public boolean updateGroup(AuthzToken authzToken, GroupModel groupModel)
throws GroupManagerServiceException, SharingRegistryException, AuthorizationException,
- ServiceFactoryException {
+ {
var userId = getUserId(authzToken);
var domainId = getDomainId(authzToken);
if (!(getSharingService().hasOwnerAccess(domainId, groupModel.getId(), userId)
@@ -100,7 +102,7 @@ public class GroupManagerService {
public boolean deleteGroup(AuthzToken authzToken, String groupId, String ownerId)
throws GroupManagerServiceException, SharingRegistryException, AuthorizationException,
- ServiceFactoryException {
+ {
String userId = getUserId(authzToken);
String domainId = getDomainId(authzToken);
if (!(getSharingService().hasOwnerAccess(domainId, groupId, userId))) {
@@ -112,7 +114,7 @@ public class GroupManagerService {
}
public GroupModel getGroup(AuthzToken authzToken, String groupId)
- throws GroupManagerServiceException, SharingRegistryException, ServiceFactoryException {
+ throws GroupManagerServiceException, SharingRegistryException {
final String domainId = getDomainId(authzToken);
UserGroup userGroup = getSharingService().getGroup(domainId, groupId);
GroupModel groupModel = convertToGroupModel(userGroup, getSharingService());
@@ -120,14 +122,14 @@ public class GroupManagerService {
}
public List<GroupModel> getGroups(AuthzToken authzToken)
- throws GroupManagerServiceException, SharingRegistryException, ServiceFactoryException {
+ throws GroupManagerServiceException, SharingRegistryException {
final String domainId = getDomainId(authzToken);
List<UserGroup> userGroups = getSharingService().getGroups(domainId, 0, -1);
return convertToGroupModels(userGroups, getSharingService());
}
public List<GroupModel> getAllGroupsUserBelongs(AuthzToken authzToken, String userName)
- throws GroupManagerServiceException, SharingRegistryException, ServiceFactoryException {
+ throws GroupManagerServiceException, SharingRegistryException {
final String domainId = getDomainId(authzToken);
List<UserGroup> userGroups = getSharingService().getAllMemberGroupsForUser(domainId, userName);
return convertToGroupModels(userGroups, getSharingService());
@@ -135,7 +137,7 @@ public class GroupManagerService {
public boolean addUsersToGroup(AuthzToken authzToken, List<String> userIds, String groupId)
throws GroupManagerServiceException, SharingRegistryException, AuthorizationException,
- ServiceFactoryException {
+ {
String userId = getUserId(authzToken);
String domainId = getDomainId(authzToken);
if (!(getSharingService().hasOwnerAccess(domainId, groupId, userId)
@@ -147,7 +149,7 @@ public class GroupManagerService {
public boolean removeUsersFromGroup(AuthzToken authzToken, List<String> userIds, String groupId)
throws GroupManagerServiceException, SharingRegistryException, AuthorizationException,
- ServiceFactoryException {
+ {
String userId = getUserId(authzToken);
String domainId = getDomainId(authzToken);
if (!(getSharingService().hasOwnerAccess(domainId, groupId, userId)
@@ -159,7 +161,7 @@ public class GroupManagerService {
public boolean transferGroupOwnership(AuthzToken authzToken, String groupId, String newOwnerId)
throws GroupManagerServiceException, SharingRegistryException, AuthorizationException,
- ServiceFactoryException {
+ {
String userId = getUserId(authzToken);
String domainId = getDomainId(authzToken);
if (!(getSharingService().hasOwnerAccess(domainId, groupId, userId))) {
@@ -177,7 +179,7 @@ public class GroupManagerService {
public boolean addGroupAdmins(AuthzToken authzToken, String groupId, List<String> adminIds)
throws GroupManagerServiceException, SharingRegistryException, AuthorizationException,
- ServiceFactoryException {
+ {
String userId = getUserId(authzToken);
String domainId = getDomainId(authzToken);
if (!(getSharingService().hasOwnerAccess(domainId, groupId, userId))) {
@@ -195,7 +197,7 @@ public class GroupManagerService {
public boolean removeGroupAdmins(AuthzToken authzToken, String groupId, List<String> adminIds)
throws GroupManagerServiceException, SharingRegistryException, AuthorizationException,
- ServiceFactoryException {
+ {
String userId = getUserId(authzToken);
String domainId = getDomainId(authzToken);
if (!(getSharingService().hasOwnerAccess(domainId, groupId, userId))) {
@@ -205,12 +207,12 @@ public class GroupManagerService {
}
public boolean hasAdminAccess(AuthzToken authzToken, String groupId, String adminId)
- throws GroupManagerServiceException, SharingRegistryException, ServiceFactoryException {
+ throws GroupManagerServiceException, SharingRegistryException {
return getSharingService().hasAdminAccess(getDomainId(authzToken), groupId, adminId);
}
public boolean hasOwnerAccess(AuthzToken authzToken, String groupId, String ownerId)
- throws GroupManagerServiceException, SharingRegistryException, ServiceFactoryException {
+ throws GroupManagerServiceException, SharingRegistryException {
return getSharingService().hasOwnerAccess(getDomainId(authzToken), groupId, ownerId);
}
@@ -223,7 +225,7 @@ public class GroupManagerService {
}
private List<GroupModel> convertToGroupModels(List<UserGroup> userGroups, SharingRegistryService sharingService)
- throws SharingRegistryException, ServiceFactoryException {
+ throws SharingRegistryException {
List<GroupModel> groupModels = new ArrayList<>();
@@ -236,7 +238,7 @@ public class GroupManagerService {
}
private GroupModel convertToGroupModel(UserGroup userGroup, SharingRegistryService sharingService)
- throws SharingRegistryException, ServiceFactoryException {
+ throws SharingRegistryException {
GroupModel groupModel = new GroupModel();
groupModel.setId(userGroup.getGroupId());
groupModel.setName(userGroup.getName());
@@ -254,7 +256,7 @@ public class GroupManagerService {
private boolean internalAddUsersToGroup(
SharingRegistryService sharingService, String domainId, List<String> userIds, String groupId)
- throws SharingRegistryException, ServiceFactoryException {
+ throws SharingRegistryException {
// FIXME: workaround for UserProfiles that failed to sync to the sharing
// registry: create any missing users in the sharing registry
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/IamAdminService.java b/airavata-api/src/main/java/org/apache/airavata/service/IamAdminService.java
index d561230e0c..d2762bfa81 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/IamAdminService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/IamAdminService.java
@@ -41,34 +41,23 @@ import org.apache.airavata.profile.user.core.repositories.UserProfileRepository;
import org.apache.airavata.registry.api.exception.RegistryServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+@Service
public class IamAdminService {
private static final Logger logger = LoggerFactory.getLogger(IamAdminService.class);
- private UserProfileRepository userProfileRepository = new UserProfileRepository();
+ @Autowired
+ private UserProfileRepository userProfileRepository;
private DBEventPublisherUtils dbEventPublisherUtils = new DBEventPublisherUtils(DBEventService.IAM_ADMIN);
+ @Autowired
private final CredentialStoreService credentialStoreService;
+ @Autowired
private final RegistryService registryService;
- public IamAdminService() throws ApplicationSettingsException, IamAdminServicesException, ServiceFactoryException {
- try {
- credentialStoreService = ServiceFactory.getInstance().getCredentialStoreService();
- } catch (ServiceFactoryException e) {
- String msg = String.format("Unable to create credential store service: %s", e.getMessage());
- logger.error(msg, e);
- IamAdminServicesException exception = new IamAdminServicesException(msg);
- exception.initCause(e);
- throw exception;
- }
-
- try {
- registryService = ServiceFactory.getInstance().getRegistryService();
- } catch (ServiceFactoryException e) {
- String msg = String.format("Unable to create registry service. Reason: %s", e.getMessage());
- logger.error(msg, e);
- IamAdminServicesException exception = new IamAdminServicesException(msg);
- exception.initCause(e);
- throw exception;
- }
+ public IamAdminService(CredentialStoreService credentialStoreService, RegistryService registryService) {
+ this.credentialStoreService = credentialStoreService;
+ this.registryService = registryService;
}
public Gateway setUpGateway(AuthzToken authzToken, Gateway gateway)
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/OrchestratorRegistryService.java b/airavata-api/src/main/java/org/apache/airavata/service/OrchestratorRegistryService.java
index 5a3aa6ce28..a2cba85de4 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/OrchestratorRegistryService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/OrchestratorRegistryService.java
@@ -35,18 +35,16 @@ import org.apache.airavata.model.status.ProcessStatus;
import org.apache.airavata.model.status.QueueStatusModel;
import org.apache.airavata.registry.api.exception.RegistryServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
public class OrchestratorRegistryService {
+ @Autowired
private RegistryService registryService;
private RegistryService getRegistryService() {
- if (registryService == null) {
- try {
- registryService = ServiceFactory.getInstance().getRegistryService();
- } catch (ServiceFactoryException e) {
- throw new IllegalStateException("Failed to get RegistryService from ServiceFactory", e);
- }
- }
return registryService;
}
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/OrchestratorService.java b/airavata-api/src/main/java/org/apache/airavata/service/OrchestratorService.java
index 2312204fed..918d25139c 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/OrchestratorService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/OrchestratorService.java
@@ -83,10 +83,14 @@ import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+@Service
public class OrchestratorService {
private static final Logger logger = LoggerFactory.getLogger(OrchestratorService.class);
+ @Autowired
private OrchestratorRegistryService orchestratorRegistryService;
private SimpleOrchestratorImpl orchestrator;
private CuratorFramework curatorClient;
@@ -97,7 +101,6 @@ public class OrchestratorService {
public OrchestratorService() throws OrchestratorException {
try {
- this.orchestratorRegistryService = new OrchestratorRegistryService();
// setAiravataUserName(ServerSettings.getDefaultUser());
this.orchestrator = new SimpleOrchestratorImpl();
this.publisher = MessagingFactory.getPublisher(Type.STATUS);
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/RegistryService.java b/airavata-api/src/main/java/org/apache/airavata/service/RegistryService.java
index 5c13463aae..45b6a3d535 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/RegistryService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/RegistryService.java
@@ -78,45 +78,81 @@ import org.apache.airavata.registry.cpi.WorkflowCatalogException;
import org.apache.airavata.registry.cpi.utils.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+@Service
public class RegistryService {
private static final Logger logger = LoggerFactory.getLogger(RegistryService.class);
- private ApplicationDeploymentRepository applicationDeploymentRepository = new ApplicationDeploymentRepository();
- private ApplicationInterfaceRepository applicationInterfaceRepository = new ApplicationInterfaceRepository();
- private StorageResourceRepository storageResourceRepository = new StorageResourceRepository();
- private UserResourceProfileRepository userResourceProfileRepository = new UserResourceProfileRepository();
- private GatewayRepository gatewayRepository = new GatewayRepository();
- private ProjectRepository projectRepository = new ProjectRepository();
- private NotificationRepository notificationRepository = new NotificationRepository();
- private ExperimentSummaryRepository experimentSummaryRepository = new ExperimentSummaryRepository();
- private ExperimentRepository experimentRepository = new ExperimentRepository();
- private ExperimentOutputRepository experimentOutputRepository = new ExperimentOutputRepository();
- private ExperimentStatusRepository experimentStatusRepository = new ExperimentStatusRepository();
- private ExperimentErrorRepository experimentErrorRepository = new ExperimentErrorRepository();
- private ProcessRepository processRepository = new ProcessRepository();
- private ProcessOutputRepository processOutputRepository = new ProcessOutputRepository();
- private ProcessWorkflowRepository processWorkflowRepository = new ProcessWorkflowRepository();
- private ProcessStatusRepository processStatusRepository = new ProcessStatusRepository();
- private ProcessErrorRepository processErrorRepository = new ProcessErrorRepository();
- private TaskRepository taskRepository = new TaskRepository();
- private TaskStatusRepository taskStatusRepository = new TaskStatusRepository();
- private TaskErrorRepository taskErrorRepository = new TaskErrorRepository();
- private JobRepository jobRepository = new JobRepository();
- private JobStatusRepository jobStatusRepository = new JobStatusRepository();
- private QueueStatusRepository queueStatusRepository = new QueueStatusRepository();
- private DataProductRepository dataProductRepository = new DataProductRepository();
- private DataReplicaLocationRepository dataReplicaLocationRepository = new DataReplicaLocationRepository();
- private WorkflowRepository workflowRepository = new WorkflowRepository();
- private GatewayGroupsRepository gatewayGroupsRepository = new GatewayGroupsRepository();
- private ParserRepository parserRepository = new ParserRepository();
- private ParserInputRepository parserInputRepository = new ParserInputRepository();
- private ParserOutputRepository parserOutputRepository = new ParserOutputRepository();
- private ParsingTemplateRepository parsingTemplateRepository = new ParsingTemplateRepository();
- private UserRepository userRepository = new UserRepository();
- private ComputeResourceRepository computeResourceRepository = new ComputeResourceRepository();
- private GatewayUsageReportingCommandRepository usageReportingCommandRepository =
- new GatewayUsageReportingCommandRepository();
+ @Autowired
+ private ApplicationDeploymentRepository applicationDeploymentRepository;
+ @Autowired
+ private ApplicationInterfaceRepository applicationInterfaceRepository;
+ @Autowired
+ private StorageResourceRepository storageResourceRepository;
+ @Autowired
+ private UserResourceProfileRepository userResourceProfileRepository;
+ @Autowired
+ private GatewayRepository gatewayRepository;
+ @Autowired
+ private ProjectRepository projectRepository;
+ @Autowired
+ private NotificationRepository notificationRepository;
+ @Autowired
+ private ExperimentSummaryRepository experimentSummaryRepository;
+ @Autowired
+ private ExperimentRepository experimentRepository;
+ @Autowired
+ private ExperimentOutputRepository experimentOutputRepository;
+ @Autowired
+ private ExperimentStatusRepository experimentStatusRepository;
+ @Autowired
+ private ExperimentErrorRepository experimentErrorRepository;
+ @Autowired
+ private ProcessRepository processRepository;
+ @Autowired
+ private ProcessOutputRepository processOutputRepository;
+ @Autowired
+ private ProcessWorkflowRepository processWorkflowRepository;
+ @Autowired
+ private ProcessStatusRepository processStatusRepository;
+ @Autowired
+ private ProcessErrorRepository processErrorRepository;
+ @Autowired
+ private TaskRepository taskRepository;
+ @Autowired
+ private TaskStatusRepository taskStatusRepository;
+ @Autowired
+ private TaskErrorRepository taskErrorRepository;
+ @Autowired
+ private JobRepository jobRepository;
+ @Autowired
+ private JobStatusRepository jobStatusRepository;
+ @Autowired
+ private QueueStatusRepository queueStatusRepository;
+ @Autowired
+ private DataProductRepository dataProductRepository;
+ @Autowired
+ private DataReplicaLocationRepository dataReplicaLocationRepository;
+ @Autowired
+ private WorkflowRepository workflowRepository;
+ @Autowired
+ private GatewayGroupsRepository gatewayGroupsRepository;
+ @Autowired
+ private ParserRepository parserRepository;
+ @Autowired
+ private ParserInputRepository parserInputRepository;
+ @Autowired
+ private ParserOutputRepository parserOutputRepository;
+ @Autowired
+ private ParsingTemplateRepository parsingTemplateRepository;
+ @Autowired
+ private UserRepository userRepository;
+ @Autowired
+ private ComputeResourceRepository computeResourceRepository;
+ @Autowired
+ private GatewayUsageReportingCommandRepository usageReportingCommandRepository;
public String getAPIVersion() {
return org.apache.airavata.registry.api.registry_apiConstants.REGISTRY_API_VERSION;
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/SharingRegistryService.java b/airavata-api/src/main/java/org/apache/airavata/service/SharingRegistryService.java
index 26effdc1b2..9ea2240ef5 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/SharingRegistryService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/SharingRegistryService.java
@@ -28,7 +28,9 @@ import org.apache.airavata.sharing.db.utils.DBConstants;
import org.apache.airavata.sharing.models.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+@Service
public class SharingRegistryService {
private static final Logger logger = LoggerFactory.getLogger(SharingRegistryService.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/TenantProfileService.java b/airavata-api/src/main/java/org/apache/airavata/service/TenantProfileService.java
index d0679cbe7d..8e119e9e4f 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/TenantProfileService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/TenantProfileService.java
@@ -39,26 +39,21 @@ import org.apache.airavata.profile.tenant.core.repositories.TenantProfileReposit
import org.apache.airavata.profile.tenant.cpi.exception.TenantProfileServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+@Service
public class TenantProfileService {
private static final Logger logger = LoggerFactory.getLogger(TenantProfileService.class);
+ @Autowired
private TenantProfileRepository tenantProfileRepository;
private DBEventPublisherUtils dbEventPublisherUtils = new DBEventPublisherUtils(DBEventService.TENANT);
+ @Autowired
private CredentialStoreService credentialStoreService;
- public TenantProfileService() throws TenantProfileServiceException {
+ public TenantProfileService() {
logger.debug("Initializing TenantProfileService");
- this.tenantProfileRepository = new TenantProfileRepository(Gateway.class, GatewayEntity.class);
- try {
- this.credentialStoreService = ServiceFactory.getInstance().getCredentialStoreService();
- } catch (ServiceFactoryException e) {
- String msg = "Error initializing TenantProfileService, reason: " + e.getMessage();
- logger.error(msg, e);
- var exception = new TenantProfileServiceException(msg);
- exception.initCause(e);
- throw exception;
- }
}
public String addGateway(AuthzToken authzToken, Gateway gateway)
diff --git a/airavata-api/src/main/java/org/apache/airavata/service/UserProfileService.java b/airavata-api/src/main/java/org/apache/airavata/service/UserProfileService.java
index a9ab769f3d..82f603093c 100644
--- a/airavata-api/src/main/java/org/apache/airavata/service/UserProfileService.java
+++ b/airavata-api/src/main/java/org/apache/airavata/service/UserProfileService.java
@@ -39,15 +39,22 @@ import org.apache.airavata.security.SecurityManagerFactory;
import org.apache.airavata.security.UserInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+@Service
public class UserProfileService {
private static final Logger logger = LoggerFactory.getLogger(UserProfileService.class);
+ @Autowired
private UserProfileRepository userProfileRepository;
+
+ @Autowired
+ private IamAdminService iamAdminService;
+
private DBEventPublisherUtils dbEventPublisherUtils = new DBEventPublisherUtils(DBEventService.USER_PROFILE);
public UserProfileService() {
- userProfileRepository = new UserProfileRepository();
}
public String initializeUserProfile(AuthzToken authzToken) throws UserProfileServiceException {
@@ -293,17 +300,13 @@ public class UserProfileService {
}
}
- private IamAdminService getIamAdminService() throws UserProfileServiceException, ServiceFactoryException {
- try {
- return ServiceFactory.getInstance().getIamAdminService();
- } catch (ServiceFactoryException e) {
- logger.error("Failed to create IAM Admin Service", e);
- UserProfileServiceException ex = new UserProfileServiceException("Failed to create IAM Admin Service");
- ex.initCause(e);
- throw ex;
- } catch (RuntimeException e) {
- String message = "Failed to create IAM Admin Service: " + e.getMessage();
- logger.error(message, e);
+ private IamAdminService getIamAdminService() throws UserProfileServiceException {
+ if (iamAdminService == null) {
+ String message = "IAM Admin Service not available";
+ logger.error(message);
+ throw new UserProfileServiceException(message);
+ }
+ return iamAdminService;
UserProfileServiceException ex = new UserProfileServiceException();
ex.setMessage(message);
ex.initCause(e);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/DomainRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/DomainRepository.java
index ef5c863d85..23f3e62ad0 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/DomainRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/DomainRepository.java
@@ -23,7 +23,9 @@ import org.apache.airavata.sharing.db.entities.DomainEntity;
import org.apache.airavata.sharing.models.Domain;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class DomainRepository extends AbstractRepository<Domain, DomainEntity, String> {
private static final Logger logger = LoggerFactory.getLogger(DomainRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/EntityRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/EntityRepository.java
index 65554f4e6d..c79e67310e 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/EntityRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/EntityRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.sharing.db.repositories;
+import org.springframework.stereotype.Repository;
import java.util.*;
import org.apache.airavata.sharing.db.entities.EntityEntity;
@@ -26,6 +27,7 @@ import org.apache.airavata.sharing.db.utils.DBConstants;
import org.apache.airavata.sharing.db.utils.SharingRegistryJDBCConfig;
import org.apache.airavata.sharing.models.*;
+@Repository
public class EntityRepository extends AbstractRepository<Entity, EntityEntity, EntityPK> {
public EntityRepository() {
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/EntityTypeRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/EntityTypeRepository.java
index 7589992e3c..7a2f65affc 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/EntityTypeRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/EntityTypeRepository.java
@@ -24,7 +24,9 @@ import org.apache.airavata.sharing.db.entities.EntityTypePK;
import org.apache.airavata.sharing.models.EntityType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class EntityTypeRepository extends AbstractRepository<EntityType, EntityTypeEntity, EntityTypePK> {
private static final Logger logger = LoggerFactory.getLogger(EntityTypeRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/GroupAdminRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/GroupAdminRepository.java
index 6793678167..5685d1354e 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/GroupAdminRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/GroupAdminRepository.java
@@ -24,7 +24,9 @@ import org.apache.airavata.sharing.db.entities.GroupAdminPK;
import org.apache.airavata.sharing.models.GroupAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class GroupAdminRepository extends AbstractRepository<GroupAdmin, GroupAdminEntity, GroupAdminPK> {
private static final Logger logger = LoggerFactory.getLogger(GroupAdminRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/GroupMembershipRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/GroupMembershipRepository.java
index 0808d44f17..9adb5f8a80 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/GroupMembershipRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/GroupMembershipRepository.java
@@ -18,6 +18,7 @@
* under the License.
*/
package org.apache.airavata.sharing.db.repositories;
+import org.springframework.stereotype.Repository;
import java.util.*;
import org.apache.airavata.sharing.db.entities.GroupMembershipEntity;
@@ -27,6 +28,7 @@ import org.apache.airavata.sharing.db.entities.UserGroupEntity;
import org.apache.airavata.sharing.db.utils.DBConstants;
import org.apache.airavata.sharing.models.*;
+@Repository
public class GroupMembershipRepository
extends AbstractRepository<GroupMembership, GroupMembershipEntity, GroupMembershipPK> {
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/PermissionTypeRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/PermissionTypeRepository.java
index fbc8ec5ffa..d54c625b64 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/PermissionTypeRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/PermissionTypeRepository.java
@@ -29,7 +29,9 @@ import org.apache.airavata.sharing.models.PermissionType;
import org.apache.airavata.sharing.models.SharingRegistryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class PermissionTypeRepository
extends AbstractRepository<PermissionType, PermissionTypeEntity, PermissionTypePK> {
private static final Logger logger = LoggerFactory.getLogger(PermissionTypeRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/SharingRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/SharingRepository.java
index 9dd4a4044e..618c9f8390 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/SharingRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/SharingRepository.java
@@ -31,7 +31,9 @@ import org.apache.airavata.sharing.models.SharingRegistryException;
import org.apache.airavata.sharing.models.SharingType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class SharingRepository extends AbstractRepository<Sharing, SharingEntity, SharingPK> {
private static final Logger logger = LoggerFactory.getLogger(SharingRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/UserGroupRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/UserGroupRepository.java
index 4f13173665..7287aa09f4 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/UserGroupRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/UserGroupRepository.java
@@ -34,7 +34,9 @@ import org.apache.airavata.sharing.models.SharingType;
import org.apache.airavata.sharing.models.UserGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class UserGroupRepository extends AbstractRepository<UserGroup, UserGroupEntity, UserGroupPK> {
private static final Logger logger = LoggerFactory.getLogger(UserGroupRepository.class);
diff --git a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/UserRepository.java b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/UserRepository.java
index 1617211209..aa3177ca14 100644
--- a/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/UserRepository.java
+++ b/airavata-api/src/main/java/org/apache/airavata/sharing/db/repositories/UserRepository.java
@@ -33,7 +33,9 @@ import org.apache.airavata.sharing.models.SharingType;
import org.apache.airavata.sharing.models.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Repository;
+@Repository
public class UserRepository extends AbstractRepository<User, UserEntity, UserPK> {
private static final Logger logger = LoggerFactory.getLogger(UserRepository.class);
diff --git a/pom.xml b/pom.xml
index d5cc2be601..b8ec26e529 100644
--- a/pom.xml
+++ b/pom.xml
@@ -574,6 +574,15 @@ under the License.
<artifactId>retries</artifactId>
<version>2.31.70</version>
</dependency>
+
+ <!-- Spring Boot BOM -->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-dependencies</artifactId>
+ <version>3.2.0</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
</dependencies>
</dependencyManagement>