mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge pull request #271 from milanperera/apim
Refactored webapp publisher component
This commit is contained in:
commit
fe447f4325
@ -25,9 +25,17 @@ import org.wso2.carbon.apimgt.api.model.API;
|
|||||||
import org.wso2.carbon.apimgt.webapp.publisher.internal.APIPublisherDataHolder;
|
import org.wso2.carbon.apimgt.webapp.publisher.internal.APIPublisherDataHolder;
|
||||||
import org.wso2.carbon.core.ServerStartupObserver;
|
import org.wso2.carbon.core.ServerStartupObserver;
|
||||||
|
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
public class APIPublisherStartupHandler implements ServerStartupObserver {
|
public class APIPublisherStartupHandler implements ServerStartupObserver {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(APIPublisherStartupHandler.class);
|
private static final Log log = LogFactory.getLog(APIPublisherStartupHandler.class);
|
||||||
|
private static int retryTime = 2000;
|
||||||
|
private static final int CONNECTION_RETRY_FACTOR = 2;
|
||||||
|
private static Stack<API> failedAPIsStack = new Stack<>();
|
||||||
|
private static Stack<API> currentAPIsStack;
|
||||||
|
|
||||||
|
private APIPublisherService publisher;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void completingServerStartup() {
|
public void completingServerStartup() {
|
||||||
@ -36,32 +44,45 @@ public class APIPublisherStartupHandler implements ServerStartupObserver {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void completedServerStartup() {
|
public void completedServerStartup() {
|
||||||
// adding temporary due to a bug in the platform
|
APIPublisherDataHolder.getInstance().setServerStarted(true);
|
||||||
|
currentAPIsStack = APIPublisherDataHolder.getInstance().getUnpublishedApis();
|
||||||
Thread t = new Thread(new Runnable() {
|
Thread t = new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
|
||||||
Thread.sleep(5000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
log.error("Error occurred while sleeping", e);
|
|
||||||
}
|
|
||||||
APIPublisherDataHolder.getInstance().setServerStarted(true);
|
|
||||||
log.info("Server has just started, hence started publishing unpublished APIs");
|
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Server has just started, hence started publishing unpublished APIs");
|
||||||
log.debug("Total number of unpublished APIs: "
|
log.debug("Total number of unpublished APIs: "
|
||||||
+ APIPublisherDataHolder.getInstance().getUnpublishedApis().size());
|
+ APIPublisherDataHolder.getInstance().getUnpublishedApis().size());
|
||||||
}
|
}
|
||||||
APIPublisherService publisher = APIPublisherDataHolder.getInstance().getApiPublisherService();
|
publisher = APIPublisherDataHolder.getInstance().getApiPublisherService();
|
||||||
while (!APIPublisherDataHolder.getInstance().getUnpublishedApis().isEmpty()) {
|
while (!failedAPIsStack.isEmpty() || !currentAPIsStack.isEmpty()) {
|
||||||
API api = APIPublisherDataHolder.getInstance().getUnpublishedApis().pop();
|
|
||||||
try {
|
try {
|
||||||
publisher.publishAPI(api);
|
retryTime = retryTime * CONNECTION_RETRY_FACTOR;
|
||||||
} catch (java.lang.Exception e) {
|
Thread.sleep(retryTime);
|
||||||
log.error("Error occurred while publishing API '" + api.getId().getApiName(), e);
|
} catch (InterruptedException te) {
|
||||||
|
log.error("Error occurred while sleeping", te);
|
||||||
|
}
|
||||||
|
if (!APIPublisherDataHolder.getInstance().getUnpublishedApis().isEmpty()) {
|
||||||
|
publishAPIs(currentAPIsStack, failedAPIsStack);
|
||||||
|
} else {
|
||||||
|
publishAPIs(failedAPIsStack, currentAPIsStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
t.start();
|
t.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void publishAPIs(Stack<API> apis, Stack<API> failedStack) {
|
||||||
|
while (!apis.isEmpty()) {
|
||||||
|
API api = apis.pop();
|
||||||
|
try {
|
||||||
|
publisher.publishAPI(api);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Error occurred while publishing API '" + api.getId().getApiName() + "'");
|
||||||
|
failedStack.push(api);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,6 +55,7 @@ public class AnnotationProcessor {
|
|||||||
private static final String PACKAGE_ORG_APACHE = "org.apache";
|
private static final String PACKAGE_ORG_APACHE = "org.apache";
|
||||||
private static final String PACKAGE_ORG_CODEHAUS = "org.codehaus";
|
private static final String PACKAGE_ORG_CODEHAUS = "org.codehaus";
|
||||||
private static final String PACKAGE_ORG_SPRINGFRAMEWORK = "org.springframework";
|
private static final String PACKAGE_ORG_SPRINGFRAMEWORK = "org.springframework";
|
||||||
|
private static final String WILD_CARD = "/*";
|
||||||
|
|
||||||
private static final String AUTH_TYPE = "Any";
|
private static final String AUTH_TYPE = "Any";
|
||||||
private static final String PROTOCOL_HTTP = "http";
|
private static final String PROTOCOL_HTTP = "http";
|
||||||
@ -227,7 +228,7 @@ public class AnnotationProcessor {
|
|||||||
if (methodContextAnno != null) {
|
if (methodContextAnno != null) {
|
||||||
subCtx = invokeMethod(pathClazzMethods[0], methodContextAnno, STRING);
|
subCtx = invokeMethod(pathClazzMethods[0], methodContextAnno, STRING);
|
||||||
} else {
|
} else {
|
||||||
subCtx = "/*";
|
subCtx = WILD_CARD;
|
||||||
}
|
}
|
||||||
resource.setUriTemplate(makeContextURLReady(subCtx));
|
resource.setUriTemplate(makeContextURLReady(subCtx));
|
||||||
|
|
||||||
|
|||||||
@ -187,8 +187,6 @@ public interface Operation {
|
|||||||
@ApiResponse(code = 500, message = "Error occurred while fetching the activity for the supplied id.")})
|
@ApiResponse(code = 500, message = "Error occurred while fetching the activity for the supplied id.")})
|
||||||
@Permission(scope = "operation-view", permissions = {"/permission/admin/device-mgt/admin/devices/view"})
|
@Permission(scope = "operation-view", permissions = {"/permission/admin/device-mgt/admin/devices/view"})
|
||||||
Response getActivity(
|
Response getActivity(
|
||||||
@ApiParam(name = "type", value = "Provide device {type} upon which the activity was performed",
|
|
||||||
required = true) @PathParam("type") String type,
|
|
||||||
@ApiParam(name = "id", value = "Provide activity id {id} as ACTIVITY_(number)",
|
@ApiParam(name = "id", value = "Provide activity id {id} as ACTIVITY_(number)",
|
||||||
required = true) @PathParam("id") String id)
|
required = true) @PathParam("id") String id)
|
||||||
throws MDMAPIException;
|
throws MDMAPIException;
|
||||||
|
|||||||
@ -235,13 +235,13 @@ public class OperationImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Opera
|
|||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Path("activity/{id}")
|
@Path("activity/{id}")
|
||||||
public Response getActivity(@PathParam("type") String type, @PathParam("id") String id)
|
public Response getActivity(@PathParam("id") String id)
|
||||||
throws MDMAPIException {
|
throws MDMAPIException {
|
||||||
org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation;
|
org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation;
|
||||||
DeviceManagementProviderService dmService;
|
DeviceManagementProviderService dmService;
|
||||||
try {
|
try {
|
||||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||||
operation = dmService.getOperationByActivityId(type, id);
|
operation = dmService.getOperationByActivityId(id);
|
||||||
} catch (OperationManagementException e) {
|
} catch (OperationManagementException e) {
|
||||||
String msg = "Error occurred while fetching the activity for the supplied id.";
|
String msg = "Error occurred while fetching the activity for the supplied id.";
|
||||||
log.error(msg, e);
|
log.error(msg, e);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user