mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
removed fix for web app publishing start up issue when synapse gateway is used
This commit is contained in:
parent
12db341d33
commit
64bd0fc061
@ -29,7 +29,6 @@ import org.wso2.carbon.apimgt.api.model.APIIdentifier;
|
||||
import org.wso2.carbon.apimgt.api.model.APIStatus;
|
||||
import org.wso2.carbon.apimgt.api.model.URITemplate;
|
||||
import org.wso2.carbon.apimgt.impl.APIManagerFactory;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.exception.APIPublisherException;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.internal.APIPublisherDataHolder;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.governance.lcm.util.CommonUtil;
|
||||
@ -55,92 +54,54 @@ public class APIPublisherServiceImpl implements APIPublisherService {
|
||||
|
||||
@Override
|
||||
public void publishAPI(final API api) throws APIManagementException, FaultGatewaysException {
|
||||
// A thread is initialized because we cannot guarantee that the gateway is initialized before publishing.
|
||||
// A better solution is needs to be implemented - should check in apimanager whether
|
||||
// the gateway is local and if so then publish it through OSGI
|
||||
Runnable connector = new Runnable() {
|
||||
public void run() {
|
||||
if (waitForServerStartup()) {
|
||||
return;
|
||||
String tenantDomain = MultitenantUtils.getTenantDomain(api.getApiOwner());
|
||||
PrivilegedCarbonContext.startTenantFlow();
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true);
|
||||
try {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
// Below code snippet is added to load API Lifecycle in tenant mode.
|
||||
RegistryService registryService = APIPublisherDataHolder.getInstance().getRegistryService();
|
||||
CommonUtil.addDefaultLifecyclesIfNotAvailable(registryService.getConfigSystemRegistry(tenantId),
|
||||
CommonUtil.getRootSystemRegistry(tenantId));
|
||||
APIProvider provider = APIManagerFactory.getInstance().getAPIProvider(api.getApiOwner());
|
||||
MultitenantUtils.getTenantDomain(api.getApiOwner());
|
||||
if (provider != null) {
|
||||
if (provider.isDuplicateContextTemplate(api.getContext())) {
|
||||
throw new APIManagementException(
|
||||
"Error occurred while adding the API. A duplicate API" +
|
||||
" context already exists for " + api.getContext());
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Publishing API '" + api.getId() + "");
|
||||
}
|
||||
try {
|
||||
Thread.sleep(5000);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.interrupted();
|
||||
}
|
||||
synchronized (APIPublisherServiceImpl.class) {
|
||||
String tenantDomain = MultitenantUtils.getTenantDomain(api.getApiOwner());
|
||||
PrivilegedCarbonContext.startTenantFlow();
|
||||
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true);
|
||||
try {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
// Below code snippet is added to load API Lifecycle in tenant mode.
|
||||
RegistryService registryService = APIPublisherDataHolder.getInstance().getRegistryService();
|
||||
CommonUtil.addDefaultLifecyclesIfNotAvailable(registryService.getConfigSystemRegistry(tenantId),
|
||||
CommonUtil.getRootSystemRegistry(tenantId));
|
||||
APIProvider provider = APIManagerFactory.getInstance().getAPIProvider(api.getApiOwner());
|
||||
MultitenantUtils.getTenantDomain(api.getApiOwner());
|
||||
if (provider != null) {
|
||||
if (provider.isDuplicateContextTemplate(api.getContext())) {
|
||||
throw new APIManagementException(
|
||||
"Error occurred while adding the API. A duplicate API" +
|
||||
" context already exists for " + api.getContext());
|
||||
}
|
||||
if (!provider.isAPIAvailable(api.getId())) {
|
||||
provider.addAPI(api);
|
||||
provider.changeLifeCycleStatus(api.getId(), PUBLISH_ACTION);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully published API '" + api.getId().getApiName() +
|
||||
"' with context '" + api.getContext() + "' and version '"
|
||||
+ api.getId().getVersion() + "'");
|
||||
}
|
||||
} else {
|
||||
api.setStatus(APIStatus.PUBLISHED);
|
||||
provider.updateAPI(api);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("An API already exists with the name '" + api.getId().getApiName() +
|
||||
"', context '" + api.getContext() + "' and version '"
|
||||
+ api.getId().getVersion() + "'. Thus, the API config is updated");
|
||||
}
|
||||
}
|
||||
provider.saveSwagger20Definition(api.getId(), createSwaggerDefinition(api));
|
||||
} else {
|
||||
throw new APIManagementException("API provider configured for the given API configuration " +
|
||||
"is null. Thus, the API is not published");
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new APIPublisherException("Failed to retrieve life cycle file ", e);
|
||||
} catch (RegistryException e) {
|
||||
throw new APIPublisherException("Failed to access the registry ", e);
|
||||
} catch (XMLStreamException e) {
|
||||
throw new APIPublisherException("Failed parsing the lifecycle xml.", e);
|
||||
} catch (FaultGatewaysException e) {
|
||||
throw new APIPublisherException("Failed when publishing to the gateway", e);
|
||||
} catch (APIManagementException e) {
|
||||
throw new APIPublisherException("Failed publishing the API " + api.getId().getApiName(), e);
|
||||
} finally {
|
||||
PrivilegedCarbonContext.endTenantFlow();
|
||||
if (!provider.isAPIAvailable(api.getId())) {
|
||||
provider.addAPI(api);
|
||||
provider.changeLifeCycleStatus(api.getId(), PUBLISH_ACTION);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Successfully published API '" + api.getId().getApiName() +
|
||||
"' with context '" + api.getContext() + "' and version '"
|
||||
+ api.getId().getVersion() + "'");
|
||||
}
|
||||
} else {
|
||||
api.setStatus(APIStatus.PUBLISHED);
|
||||
provider.updateAPI(api);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("An API already exists with the name '" + api.getId().getApiName() +
|
||||
"', context '" + api.getContext() + "' and version '"
|
||||
+ api.getId().getVersion() + "'. Thus, the API config is updated");
|
||||
}
|
||||
}
|
||||
provider.saveSwagger20Definition(api.getId(), createSwaggerDefinition(api));
|
||||
} else {
|
||||
throw new APIManagementException("API provider configured for the given API configuration " +
|
||||
"is null. Thus, the API is not published");
|
||||
}
|
||||
};
|
||||
Thread connectorThread = new Thread(connector);
|
||||
connectorThread.setDaemon(true);
|
||||
connectorThread.start();
|
||||
}
|
||||
|
||||
private boolean waitForServerStartup() {
|
||||
while (!APIPublisherDataHolder.getInstance().getServerStartupListener().isServerReady()) {
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.interrupted();
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new APIManagementException("Failed to retrieve life cycle file ", e);
|
||||
} catch (RegistryException e) {
|
||||
throw new APIManagementException("Failed to access the registry ", e);
|
||||
} catch (XMLStreamException e) {
|
||||
throw new APIManagementException("Failed parsing the lifecycle xml.", e);
|
||||
} finally {
|
||||
PrivilegedCarbonContext.endTenantFlow();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String createSwaggerDefinition(API api) {
|
||||
|
||||
@ -1,56 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.apimgt.webapp.publisher.exception;
|
||||
|
||||
|
||||
public class APIPublisherException extends RuntimeException {
|
||||
|
||||
private String errorMessage;
|
||||
|
||||
public String getErrorMessage() {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public void setErrorMessage(String errorMessage) {
|
||||
this.errorMessage = errorMessage;
|
||||
}
|
||||
|
||||
public APIPublisherException(String msg, Exception nestedEx) {
|
||||
super(msg, nestedEx);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public APIPublisherException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
setErrorMessage(message);
|
||||
}
|
||||
|
||||
public APIPublisherException(String msg) {
|
||||
super(msg);
|
||||
setErrorMessage(msg);
|
||||
}
|
||||
|
||||
public APIPublisherException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public APIPublisherException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
}
|
||||
@ -20,8 +20,6 @@ package org.wso2.carbon.apimgt.webapp.publisher.internal;
|
||||
|
||||
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.APIPublisherService;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.lifecycle.util.ServerStartupListener;
|
||||
import org.wso2.carbon.core.ServerStartupObserver;
|
||||
import org.wso2.carbon.registry.core.service.RegistryService;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
import org.wso2.carbon.user.core.tenant.TenantManager;
|
||||
@ -34,7 +32,6 @@ public class APIPublisherDataHolder {
|
||||
private RealmService realmService;
|
||||
private TenantManager tenantManager;
|
||||
private RegistryService registryService;
|
||||
private ServerStartupListener serverStartupListener;
|
||||
|
||||
private static APIPublisherDataHolder thisInstance = new APIPublisherDataHolder();
|
||||
|
||||
@ -97,12 +94,4 @@ public class APIPublisherDataHolder {
|
||||
public void setRegistryService(RegistryService registryService) {
|
||||
this.registryService = registryService;
|
||||
}
|
||||
|
||||
public ServerStartupListener getServerStartupListener() {
|
||||
return serverStartupListener;
|
||||
}
|
||||
|
||||
public void setServerStartupListener(ServerStartupListener serverStartupListener) {
|
||||
this.serverStartupListener = serverStartupListener;
|
||||
}
|
||||
}
|
||||
|
||||
@ -25,8 +25,6 @@ import org.osgi.service.component.ComponentContext;
|
||||
import org.wso2.carbon.apimgt.impl.APIManagerConfigurationService;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.APIPublisherService;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.APIPublisherServiceImpl;
|
||||
import org.wso2.carbon.apimgt.webapp.publisher.lifecycle.util.ServerStartupListener;
|
||||
import org.wso2.carbon.core.ServerStartupObserver;
|
||||
import org.wso2.carbon.registry.core.service.RegistryService;
|
||||
import org.wso2.carbon.user.core.service.RealmService;
|
||||
import org.wso2.carbon.utils.ConfigurationContextService;
|
||||
@ -61,10 +59,6 @@ public class APIPublisherServiceComponent {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Initializing device management core bundle");
|
||||
}
|
||||
BundleContext bundleContext = componentContext.getBundleContext();
|
||||
ServerStartupListener serverStartupListener = new ServerStartupListener();
|
||||
bundleContext.registerService(ServerStartupObserver.class.getName(), serverStartupListener, null);
|
||||
APIPublisherDataHolder.getInstance().setServerStartupListener(serverStartupListener);
|
||||
/* Registering declarative service instances exposed by DeviceManagementServiceComponent */
|
||||
this.registerServices(componentContext);
|
||||
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. 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.wso2.carbon.apimgt.webapp.publisher.lifecycle.util;
|
||||
|
||||
import org.wso2.carbon.core.ServerStartupObserver;
|
||||
|
||||
/**
|
||||
* This is added to make sure that the apis are publishsed after gateway services are intiialized.
|
||||
*/
|
||||
public class ServerStartupListener implements ServerStartupObserver {
|
||||
private static volatile boolean serverReady = false;
|
||||
@Override
|
||||
public void completingServerStartup() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void completedServerStartup() {
|
||||
ServerStartupListener.setServerReady(true);
|
||||
}
|
||||
|
||||
public static boolean isServerReady() {
|
||||
return ServerStartupListener.serverReady;
|
||||
}
|
||||
|
||||
public static void setServerReady(boolean serverReady) {
|
||||
ServerStartupListener.serverReady = serverReady;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user