Merge pull request #271 from milanperera/apim

Refactored webapp publisher component
4.x.x
Milan Perera 9 years ago
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…
Cancel
Save