Fixed for Liferay 6.2
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/admin/accounting-manager@142553 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
ca2e1ac6dc
commit
297df7e401
|
@ -3,10 +3,10 @@ package org.gcube.portlets.admin.accountingmanager.server;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import javax.servlet.AsyncContext;
|
import javax.servlet.http.HttpSession;
|
||||||
import javax.servlet.ServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
|
|
||||||
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
||||||
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCaller;
|
import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCaller;
|
||||||
import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCallerInterface;
|
import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCallerInterface;
|
||||||
import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCallerTester;
|
import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCallerTester;
|
||||||
|
@ -33,15 +33,25 @@ public class AccountingClientCallable implements Callable<TaskStatus> {
|
||||||
super();
|
super();
|
||||||
this.taskRequest = taskRequest;
|
this.taskRequest = taskRequest;
|
||||||
this.accountingCache = accountingCache;
|
this.accountingCache = accountingCache;
|
||||||
|
logger.debug("AccountingClientCallable: "+taskRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TaskStatus call() throws Exception {
|
public TaskStatus call() throws Exception {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
AsyncContext asyncContext = taskRequest.getAsyncContext();
|
HttpSession httpSession = taskRequest.getHttpSession();
|
||||||
ServletRequest servletRequest = asyncContext.getRequest();
|
if(httpSession==null){
|
||||||
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
|
logger.error("Error retrieving HttpSession in AccountingClientCallable: is null");
|
||||||
|
return TaskStatus.ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
logger.info("Set SecurityToken: "+taskRequest.getServiceCredentials().getToken());
|
||||||
|
SecurityTokenProvider.instance.set(taskRequest.getServiceCredentials().getToken());
|
||||||
|
logger.info("Set ScopeProvider: "+taskRequest.getServiceCredentials().getScope());
|
||||||
|
ScopeProvider.instance.set(taskRequest.getServiceCredentials().getScope());
|
||||||
|
|
||||||
|
|
||||||
AccountingCallerInterface accountingCaller;
|
AccountingCallerInterface accountingCaller;
|
||||||
if (Constants.DEBUG_MODE) {
|
if (Constants.DEBUG_MODE) {
|
||||||
|
@ -64,12 +74,12 @@ public class AccountingClientCallable implements Callable<TaskStatus> {
|
||||||
e.getLocalizedMessage());
|
e.getLocalizedMessage());
|
||||||
|
|
||||||
HashMap<String, TaskWrapper> taskWrapperMap = SessionUtil
|
HashMap<String, TaskWrapper> taskWrapperMap = SessionUtil
|
||||||
.getTaskWrapperMap(httpRequest,
|
.getTaskWrapperMap(httpSession,
|
||||||
taskRequest.getServiceCredentials());
|
taskRequest.getServiceCredentials());
|
||||||
if (taskWrapperMap == null) {
|
if (taskWrapperMap == null) {
|
||||||
taskWrapperMap = new HashMap<>();
|
taskWrapperMap = new HashMap<>();
|
||||||
SessionUtil
|
SessionUtil
|
||||||
.setTaskWrapperMap(httpRequest,
|
.setTaskWrapperMap(httpSession,
|
||||||
taskRequest.getServiceCredentials(),
|
taskRequest.getServiceCredentials(),
|
||||||
taskWrapperMap);
|
taskWrapperMap);
|
||||||
|
|
||||||
|
@ -77,7 +87,6 @@ public class AccountingClientCallable implements Callable<TaskStatus> {
|
||||||
|
|
||||||
taskWrapperMap.put(taskWrapper.getOperationId(), taskWrapper);
|
taskWrapperMap.put(taskWrapper.getOperationId(), taskWrapper);
|
||||||
|
|
||||||
asyncContext.complete();
|
|
||||||
return TaskStatus.ERROR;
|
return TaskStatus.ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +102,7 @@ public class AccountingClientCallable implements Callable<TaskStatus> {
|
||||||
AccountingStateData accountingStateData = new AccountingStateData(
|
AccountingStateData accountingStateData = new AccountingStateData(
|
||||||
taskRequest.getAccountingType(),
|
taskRequest.getAccountingType(),
|
||||||
taskRequest.getSeriesRequest(), seriesResponse);
|
taskRequest.getSeriesRequest(), seriesResponse);
|
||||||
SessionUtil.setAccountingStateData(httpRequest,
|
SessionUtil.setAccountingStateData(httpSession,
|
||||||
taskRequest.getServiceCredentials(),
|
taskRequest.getServiceCredentials(),
|
||||||
taskRequest.getAccountingType(), accountingStateData);
|
taskRequest.getAccountingType(), accountingStateData);
|
||||||
|
|
||||||
|
@ -102,19 +111,17 @@ public class AccountingClientCallable implements Callable<TaskStatus> {
|
||||||
seriesResponse);
|
seriesResponse);
|
||||||
|
|
||||||
HashMap<String, TaskWrapper> taskWrapperMap = SessionUtil
|
HashMap<String, TaskWrapper> taskWrapperMap = SessionUtil
|
||||||
.getTaskWrapperMap(httpRequest,
|
.getTaskWrapperMap(httpSession,
|
||||||
taskRequest.getServiceCredentials());
|
taskRequest.getServiceCredentials());
|
||||||
|
|
||||||
if (taskWrapperMap == null) {
|
if (taskWrapperMap == null) {
|
||||||
taskWrapperMap = new HashMap<>();
|
taskWrapperMap = new HashMap<>();
|
||||||
SessionUtil.setTaskWrapperMap(httpRequest,
|
SessionUtil.setTaskWrapperMap(httpSession,
|
||||||
taskRequest.getServiceCredentials(), taskWrapperMap);
|
taskRequest.getServiceCredentials(), taskWrapperMap);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
taskWrapperMap.put(taskWrapper.getOperationId(), taskWrapper);
|
taskWrapperMap.put(taskWrapper.getOperationId(), taskWrapper);
|
||||||
|
|
||||||
asyncContext.complete();
|
|
||||||
return TaskStatus.COMPLETED;
|
return TaskStatus.COMPLETED;
|
||||||
|
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
|
|
|
@ -28,8 +28,8 @@ public class AccountingClientListener implements ServletContextListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void contextInitialized(ServletContextEvent sce) {
|
public void contextInitialized(ServletContextEvent sce) {
|
||||||
logger.info("Initializing AccountingCache");
|
logger.info("Initializing AccountingCache");
|
||||||
accountingCache=null;
|
accountingCache = null;
|
||||||
try {
|
try {
|
||||||
accountingCache = new AccountingCache();
|
accountingCache = new AccountingCache();
|
||||||
} catch (ServiceException e) {
|
} catch (ServiceException e) {
|
||||||
|
@ -38,11 +38,12 @@ public class AccountingClientListener implements ServletContextListener {
|
||||||
+ e.getLocalizedMessage(), e);
|
+ e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
sce.getServletContext().setAttribute(SessionConstants.ACCOUNTING_CACHE, accountingCache);
|
sce.getServletContext().setAttribute(SessionConstants.ACCOUNTING_CACHE,
|
||||||
|
accountingCache);
|
||||||
logger.info("AccountingCache value saved in context.");
|
logger.info("AccountingCache value saved in context.");
|
||||||
|
|
||||||
|
accountingClientDaemon = new AccountingClientDaemon(sce,
|
||||||
accountingClientDaemon = new AccountingClientDaemon(sce,accountingCache);
|
accountingCache);
|
||||||
thread = new Thread(accountingClientDaemon);
|
thread = new Thread(accountingClientDaemon);
|
||||||
logger.info("Starting AccountingClientDaemon: " + thread);
|
logger.info("Starting AccountingClientDaemon: " + thread);
|
||||||
thread.start();
|
thread.start();
|
||||||
|
@ -73,7 +74,6 @@ public class AccountingClientListener implements ServletContextListener {
|
||||||
ServletContext sc = sce.getServletContext();
|
ServletContext sc = sce.getServletContext();
|
||||||
sc.removeAttribute(SessionConstants.ACCOUNTING_CACHE);
|
sc.removeAttribute(SessionConstants.ACCOUNTING_CACHE);
|
||||||
|
|
||||||
|
|
||||||
logger.info("AccountingCache value deleted from context.");
|
logger.info("AccountingCache value deleted from context.");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,11 +5,9 @@ import java.util.HashMap;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import javax.servlet.AsyncContext;
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
|
|
||||||
import org.gcube.portlets.admin.accountingmanager.client.rpc.AccountingManagerService;
|
import org.gcube.portlets.admin.accountingmanager.client.rpc.AccountingManagerService;
|
||||||
import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCaller;
|
import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCaller;
|
||||||
|
@ -156,7 +154,7 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
|
||||||
|
|
||||||
AccountingStateData accountingStateData = new AccountingStateData(
|
AccountingStateData accountingStateData = new AccountingStateData(
|
||||||
accountingType, seriesRequest, seriesResponse);
|
accountingType, seriesRequest, seriesResponse);
|
||||||
SessionUtil.setAccountingStateData(httpRequest, serviceCredentials,
|
SessionUtil.setAccountingStateData(httpRequest.getSession(), serviceCredentials,
|
||||||
accountingType, accountingStateData);
|
accountingType, accountingStateData);
|
||||||
return seriesResponse;
|
return seriesResponse;
|
||||||
|
|
||||||
|
@ -182,14 +180,16 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
|
||||||
ServiceCredentials serviceCredentials = SessionUtil
|
ServiceCredentials serviceCredentials = SessionUtil
|
||||||
.getServiceCredentials(httpRequest);
|
.getServiceCredentials(httpRequest);
|
||||||
|
|
||||||
HttpServletResponse httpResponse = this.getThreadLocalResponse();
|
//HttpServletResponse httpResponse = this.getThreadLocalResponse();
|
||||||
|
|
||||||
AsyncContext asyncContext = httpRequest.startAsync(httpRequest,
|
/*AsyncContext asyncContext = httpRequest.startAsync(httpRequest,
|
||||||
httpResponse);
|
httpResponse);*/
|
||||||
String operationId = UUID.randomUUID().toString();
|
String operationId = UUID.randomUUID().toString();
|
||||||
logger.info("Accounting Task Operation Id: " + operationId);
|
logger.info("Accounting Task Operation Id: " + operationId);
|
||||||
|
logger.info("Session Id: "+httpRequest.getSession());
|
||||||
|
|
||||||
TaskRequest taskRequest = new TaskRequest(operationId,
|
TaskRequest taskRequest = new TaskRequest(operationId,
|
||||||
asyncContext, serviceCredentials, accountingType,
|
httpRequest.getSession(), serviceCredentials, accountingType,
|
||||||
seriesRequest);
|
seriesRequest);
|
||||||
|
|
||||||
ServletContext appScope = httpRequest.getServletContext();
|
ServletContext appScope = httpRequest.getServletContext();
|
||||||
|
@ -222,7 +222,7 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
|
||||||
.getServiceCredentials(httpRequest);
|
.getServiceCredentials(httpRequest);
|
||||||
|
|
||||||
HashMap<String, TaskWrapper> taskWrapperMap = SessionUtil
|
HashMap<String, TaskWrapper> taskWrapperMap = SessionUtil
|
||||||
.getTaskWrapperMap(httpRequest, serviceCredentials);
|
.getTaskWrapperMap(httpRequest.getSession(), serviceCredentials);
|
||||||
if (taskWrapperMap == null) {
|
if (taskWrapperMap == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
|
@ -359,7 +359,7 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
|
||||||
|
|
||||||
logger.debug("SaveDataOnWorkspace(): " + accountingType);
|
logger.debug("SaveDataOnWorkspace(): " + accountingType);
|
||||||
AccountingStateData accountingStateData = SessionUtil
|
AccountingStateData accountingStateData = SessionUtil
|
||||||
.getAccountingStateData(httpRequest, serviceCredentials,
|
.getAccountingStateData(httpRequest.getSession(), serviceCredentials,
|
||||||
accountingType);
|
accountingType);
|
||||||
if (accountingStateData == null) {
|
if (accountingStateData == null) {
|
||||||
logger.error("No series present in session for thi accounting type: "
|
logger.error("No series present in session for thi accounting type: "
|
||||||
|
|
|
@ -112,7 +112,7 @@ public class ExportServlet extends HttpServlet {
|
||||||
+ ", accountingType=" + accountingType + "]");
|
+ ", accountingType=" + accountingType + "]");
|
||||||
|
|
||||||
AccountingStateData accountingStateData = SessionUtil
|
AccountingStateData accountingStateData = SessionUtil
|
||||||
.getAccountingStateData(request,
|
.getAccountingStateData(session,
|
||||||
serviceCredentials, AccountingType.valueOf(accountingType));
|
serviceCredentials, AccountingType.valueOf(accountingType));
|
||||||
if (accountingStateData == null) {
|
if (accountingStateData == null) {
|
||||||
logger.error("No series present in session for this accounting type: "
|
logger.error("No series present in session for this accounting type: "
|
||||||
|
|
|
@ -197,11 +197,10 @@ public class SessionUtil {
|
||||||
return sCredentials;
|
return sCredentials;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setAccountingStateData(HttpServletRequest httpRequest,
|
public static void setAccountingStateData(HttpSession httpSession,
|
||||||
ServiceCredentials serviceCredentials,
|
ServiceCredentials serviceCredentials,
|
||||||
AccountingType accountingType,
|
AccountingType accountingType,
|
||||||
AccountingStateData accountingStateData) {
|
AccountingStateData accountingStateData) {
|
||||||
HttpSession httpSession = httpRequest.getSession();
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
HashMap<String, AccountingState> accountingStateMap = (HashMap<String, AccountingState>) httpSession
|
HashMap<String, AccountingState> accountingStateMap = (HashMap<String, AccountingState>) httpSession
|
||||||
.getAttribute(Constants.SESSION_ACCOUNTING_STATE_MAP);
|
.getAttribute(Constants.SESSION_ACCOUNTING_STATE_MAP);
|
||||||
|
@ -234,9 +233,9 @@ public class SessionUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AccountingStateData getAccountingStateData(
|
public static AccountingStateData getAccountingStateData(
|
||||||
HttpServletRequest httpRequest, ServiceCredentials serviceCredentials,
|
HttpSession httpSession, ServiceCredentials serviceCredentials,
|
||||||
AccountingType accountingType) {
|
AccountingType accountingType) {
|
||||||
HttpSession httpSession = httpRequest.getSession();
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
HashMap<String, AccountingState> accountingStateMap = (HashMap<String, AccountingState>) httpSession
|
HashMap<String, AccountingState> accountingStateMap = (HashMap<String, AccountingState>) httpSession
|
||||||
.getAttribute(Constants.SESSION_ACCOUNTING_STATE_MAP);
|
.getAttribute(Constants.SESSION_ACCOUNTING_STATE_MAP);
|
||||||
|
@ -265,14 +264,12 @@ public class SessionUtil {
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static HashMap<String, TaskWrapper> getTaskWrapperMap(
|
public static HashMap<String, TaskWrapper> getTaskWrapperMap(
|
||||||
HttpServletRequest httpRequest,
|
HttpSession httpSession,
|
||||||
ServiceCredentials serviceCredentials) {
|
ServiceCredentials serviceCredentials) {
|
||||||
SessionOp<HashMap<String, TaskWrapper>> sessionOp = new SessionOp<>();
|
@SuppressWarnings("unchecked")
|
||||||
HashMap<String, TaskWrapper> taskWrapperMap = sessionOp.get(
|
HashMap<String, TaskWrapper> taskWrapperMap = (HashMap<String, TaskWrapper>) httpSession
|
||||||
httpRequest, serviceCredentials,
|
.getAttribute(SessionConstants.TASK_WRAPPER_MAP);
|
||||||
SessionConstants.TASK_WRAPPER_MAP);
|
|
||||||
return taskWrapperMap;
|
return taskWrapperMap;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -281,13 +278,11 @@ public class SessionUtil {
|
||||||
* @param serviceCredentials
|
* @param serviceCredentials
|
||||||
* @param taskWrapperMap
|
* @param taskWrapperMap
|
||||||
*/
|
*/
|
||||||
public static void setTaskWrapperMap(HttpServletRequest httpRequest,
|
public static void setTaskWrapperMap(HttpSession httpSession,
|
||||||
ServiceCredentials serviceCredentials,
|
ServiceCredentials serviceCredentials,
|
||||||
HashMap<String, TaskWrapper> taskWrapperMap) {
|
HashMap<String, TaskWrapper> taskWrapperMap) {
|
||||||
SessionOp<HashMap<String, TaskWrapper>> sessionOp = new SessionOp<>();
|
httpSession.setAttribute(SessionConstants.TASK_WRAPPER_MAP, taskWrapperMap);
|
||||||
sessionOp.set(httpRequest, serviceCredentials,
|
return;
|
||||||
SessionConstants.TASK_WRAPPER_MAP, taskWrapperMap);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Context getContext(ServiceCredentials serviceCredentials)
|
public static Context getContext(ServiceCredentials serviceCredentials)
|
||||||
|
|
|
@ -2,7 +2,7 @@ package org.gcube.portlets.admin.accountingmanager.server.util;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
import javax.servlet.AsyncContext;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
|
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
|
||||||
import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesRequest;
|
import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesRequest;
|
||||||
|
@ -17,28 +17,21 @@ public class TaskRequest implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = -4010108343968344171L;
|
private static final long serialVersionUID = -4010108343968344171L;
|
||||||
private String operationId;
|
private String operationId;
|
||||||
private AsyncContext asyncContext;
|
private HttpSession httpSession;
|
||||||
private ServiceCredentials serviceCredentials;
|
private ServiceCredentials serviceCredentials;
|
||||||
private AccountingType accountingType;
|
private AccountingType accountingType;
|
||||||
private SeriesRequest seriesRequest;
|
private SeriesRequest seriesRequest;
|
||||||
|
|
||||||
/**
|
public TaskRequest(String operationId, HttpSession httpSession,
|
||||||
*
|
|
||||||
* @param operationId
|
|
||||||
* @param asyncContext
|
|
||||||
* @param serviceCredentials
|
|
||||||
* @param accountingType
|
|
||||||
* @param seriesRequest
|
|
||||||
*/
|
|
||||||
public TaskRequest(String operationId, AsyncContext asyncContext,
|
|
||||||
ServiceCredentials serviceCredentials,
|
ServiceCredentials serviceCredentials,
|
||||||
AccountingType accountingType, SeriesRequest seriesRequest) {
|
AccountingType accountingType, SeriesRequest seriesRequest) {
|
||||||
super();
|
super();
|
||||||
this.operationId = operationId;
|
this.operationId = operationId;
|
||||||
this.asyncContext = asyncContext;
|
this.httpSession = httpSession;
|
||||||
this.serviceCredentials = serviceCredentials;
|
this.serviceCredentials = serviceCredentials;
|
||||||
this.accountingType = accountingType;
|
this.accountingType = accountingType;
|
||||||
this.seriesRequest = seriesRequest;
|
this.seriesRequest = seriesRequest;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getOperationId() {
|
public String getOperationId() {
|
||||||
|
@ -49,12 +42,12 @@ public class TaskRequest implements Serializable {
|
||||||
this.operationId = operationId;
|
this.operationId = operationId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AsyncContext getAsyncContext() {
|
public HttpSession getHttpSession() {
|
||||||
return asyncContext;
|
return httpSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAsyncContext(AsyncContext asyncContext) {
|
public void setHttpSession(HttpSession httpSession) {
|
||||||
this.asyncContext = asyncContext;
|
this.httpSession = httpSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServiceCredentials getServiceCredentials() {
|
public ServiceCredentials getServiceCredentials() {
|
||||||
|
@ -83,8 +76,8 @@ public class TaskRequest implements Serializable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "TaskRequest [operationId=" + operationId + ", asyncContext="
|
return "TaskRequest [operationId=" + operationId + ", httpSession="
|
||||||
+ asyncContext + ", serviceCredentials=" + serviceCredentials
|
+ httpSession + ", serviceCredentials=" + serviceCredentials
|
||||||
+ ", accountingType=" + accountingType + ", seriesRequest="
|
+ ", accountingType=" + accountingType + ", seriesRequest="
|
||||||
+ seriesRequest + "]";
|
+ seriesRequest + "]";
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
<servlet>
|
<servlet>
|
||||||
<servlet-name>ExportServlet</servlet-name>
|
<servlet-name>ExportServlet</servlet-name>
|
||||||
<servlet-class>org.gcube.portlets.admin.accountingmanager.server.ExportServlet</servlet-class>
|
<servlet-class>org.gcube.portlets.admin.accountingmanager.server.ExportServlet</servlet-class>
|
||||||
|
<async-supported>true</async-supported>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
<!-- Servlets Mapping -->
|
<!-- Servlets Mapping -->
|
||||||
|
|
Loading…
Reference in New Issue