Author: ivol37 at gmail.com
Date: Mon Dec 13 11:07:21 2010
New Revision: 489
Log:
[AMDATU-200] Added HTTP Caching headers to REST APIs
Modified:
trunk/amdatu-authentication/oauth-server/src/main/java/org/amdatu/authentication/oauth/server/service/OAuthServiceConsumerRegistryREST.java
trunk/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/GroupsResource.java
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/ResourceBase.java
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/UsersResource.java
trunk/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
trunk/amdatu-semanticweb/sparqlendpoint/src/main/java/org/amdatu/semanticweb/sparqlendpoint/service/SPARQLEndpointServiceImpl.java
trunk/integration-tests/src/test/java/org/amdatu/test/integration/tests/GadgetManagementServiceTest.java
Modified:
trunk/amdatu-authentication/oauth-server/src/main/java/org/amdatu/authentication/oauth/server/service/OAuthServiceConsumerRegistryREST.java
==============================================================================
---
trunk/amdatu-authentication/oauth-server/src/main/java/org/amdatu/authentication/oauth/server/service/OAuthServiceConsumerRegistryREST.java
(original)
+++
trunk/amdatu-authentication/oauth-server/src/main/java/org/amdatu/authentication/oauth/server/service/OAuthServiceConsumerRegistryREST.java
Mon Dec 13 11:07:21 2010
@@ -27,6 +27,7 @@
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@@ -38,6 +39,7 @@
import org.amdatu.authentication.oauth.api.OAuthServiceConsumer;
import org.amdatu.authentication.oauth.api.OAuthServiceConsumerRegistry;
import org.amdatu.web.httpcontext.ResourceProvider;
+import org.apache.http.HttpStatus;
import org.osgi.service.log.LogService;
/**
@@ -52,18 +54,27 @@
// The oAuth service consumer registry
private volatile OAuthServiceConsumerRegistry m_registry;
private volatile LogService m_logService;
+
+ // HTTP caching policy for this REST interface
+ private static CacheControl m_cacheControl;
+ static {
+ m_cacheControl = new CacheControl();
+ m_cacheControl.setNoCache(true);
+ }
public void start() {
m_logService.log(LogService.LOG_DEBUG, "OAuth Service Consumer
registry REST service started.");
}
-
- @GET
+
/**
- * Use this method to verify if the REST service is online.
+ * This method can be used to check the availability of the OAuth Service
Consumer.
+ * @return The text "OAuth Service Consumer registry online"
*/
- public Response status() {
- return Response.ok().build();
- }
+ @GET
+ @Produces({MediaType.TEXT_PLAIN})
+ public String status() {
+ return "OAuth Service Consumer registry online";
+ }
/**
* REST interface: GET
/rest/services/oauth/consumers/oauth/consumers/{consumerKey}
@@ -75,13 +86,13 @@
@GET
@Path("{consumerKey}")
@Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- public OAuthServiceConsumer getConsumer(@PathParam("consumerKey") final
String consumerKey, @Context UriInfo uriInfo) {
+ public Response getConsumer(@PathParam("consumerKey") final String
consumerKey, @Context UriInfo uriInfo) {
try {
OAuthServiceConsumer consumer =
m_registry.getConsumer(consumerKey);
if (consumer != null) {
- return OAuthServiceConsumerBean.copy(consumer, uriInfo);
+ return Response.ok(OAuthServiceConsumerBean.copy(consumer,
uriInfo)).cacheControl(m_cacheControl).build();
} else {
- return null;
+ return
Response.status(HttpStatus.SC_NOT_FOUND).cacheControl(m_cacheControl).build();
}
}
catch (IllegalAccessException e) {
@@ -106,7 +117,7 @@
public Response addConsumer(OAuthServiceConsumerBean consumer) {
try {
m_registry.addConsumer(consumer);
- return Response.ok().build();
+ return Response.ok().cacheControl(m_cacheControl).build();
}
catch (ConsumerAlreadyExistsException e) {
throw new WebApplicationException(Response.Status.NOT_MODIFIED);
@@ -129,7 +140,7 @@
public Response updateConsumer(@PathParam("consumerKey") final String
consumerKey, OAuthServiceConsumerBean consumer) {
try {
m_registry.updateConsumer(consumer);
- return Response.ok().build();
+ return Response.ok().cacheControl(m_cacheControl).build();
}
catch (ConsumerNotFoundException e) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
@@ -150,7 +161,7 @@
public Response deleteConsumer(@PathParam("consumerKey") final String
consumerKey) {
try {
m_registry.removeConsumer(m_registry.getConsumer(consumerKey));
- return Response.ok().build();
+ return Response.ok().cacheControl(m_cacheControl).build();
}
catch (ConsumerNotFoundException e) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
Modified:
trunk/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
==============================================================================
---
trunk/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
(original)
+++
trunk/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
Mon Dec 13 11:07:21 2010
@@ -16,12 +16,19 @@
*/
package org.amdatu.authorization.login.service.service;
+import java.net.URL;
+
import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.*;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import java.net.URL;
import org.amdatu.authorization.login.service.LoginService;
import org.amdatu.authorization.login.service.osgi.Activator;
@@ -33,7 +40,11 @@
import org.json.JSONObject;
import org.osgi.framework.BundleContext;
import org.osgi.service.log.LogService;
-import org.osgi.service.useradmin.*;
+import org.osgi.service.useradmin.Authorization;
+import org.osgi.service.useradmin.Group;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
/**
* This service is responsible for authorization handling, based on the
UserAdmin OSGi service.
@@ -54,7 +65,14 @@
// The private HTTP context service for this bundle
private Component m_httpContextComponent;
-
+
+ // Disable HTTP caching in this REST interface
+ private static CacheControl m_cacheControl;
+ static {
+ m_cacheControl = new CacheControl();
+ m_cacheControl.setNoCache(true);
+ }
+
/**
* The init() method is invoked by the Felix dependency manager.
*/
@@ -88,6 +106,16 @@
}
/**
+ * This method can be used to check the availability of the Login Service.
+ * @return The text "Login service online"
+ */
+ @GET
+ @Produces({MediaType.TEXT_PLAIN})
+ public String status() {
+ return "Login service online";
+ }
+
+ /**
* This REST service returns the current login status. Returns the
username of the current user is logged in or an
* empty string if the user is not logged in.
*/
@@ -107,13 +135,13 @@
if (auth != null) {
String currentUser = auth.getName();
jsonObject.append("username", currentUser);
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
}
}
} catch (JSONException e) {
m_logService.log(LogService.LOG_ERROR, "Could not retrieve current
login status", e);
}
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
}
/**
@@ -166,7 +194,7 @@
} catch (JSONException e) {
m_logService.log(LogService.LOG_ERROR, "Could not retrieve current
login status", e);
}
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
}
/**
@@ -195,17 +223,7 @@
} catch (JSONException e) {
m_logService.log(LogService.LOG_ERROR, "Could not retrieve current
login status", e);
}
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
- }
-
- /**
- * This method can be used to check the availability of the Login Service.
- * @return The text "Login service online"
- */
- @GET
- @Produces({MediaType.TEXT_PLAIN})
- public String checkAvailability() {
- return "Authorization service online";
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
}
public URL getResource(String name) {
Modified:
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/GroupsResource.java
==============================================================================
---
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/GroupsResource.java
(original)
+++
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/GroupsResource.java
Mon Dec 13 11:07:21 2010
@@ -24,6 +24,7 @@
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@@ -46,6 +47,23 @@
*/
@Path("groups")
public class GroupsResource extends ResourceBase implements
DummyResourceInterface {
+ // Disable HTTP caching in this REST interface
+ private static CacheControl m_cacheControl;
+ static {
+ m_cacheControl = new CacheControl();
+ m_cacheControl.setNoCache(true);
+ }
+
+ /**
+ * This method can be used to check the availability of the Groups
management service.
+ * @return The text "UserAdmin Groups management service online"
+ */
+ @GET
+ @Produces({MediaType.TEXT_PLAIN})
+ public String status() {
+ return "UserAdmin Groups management service online";
+ }
+
/**
* Returns all groups that match the specified filter options. This method
can be invoked by making the following
* REST call:<code><pre>
@@ -235,12 +253,12 @@
Role member = m_userAdmin.getRole(memberName);
if (role != null && role.getType() == Role.GROUP && member != null) {
if (((Group) role).removeMember(member)) {
- return Response.ok(MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK();
} else {
- return Response.notModified("Member already removed").build();
+ return buildNotModified("Member already removed");
}
} else {
- return Response.status(Response.Status.NOT_FOUND).build();
+ return buildNotFound();
}
}
@@ -249,14 +267,14 @@
Role member = m_userAdmin.getRole(memberName);
if (role != null && role.getType() == Role.GROUP && member != null) {
if (!required && ((Group) role).addMember(member)) {
- return Response.ok(MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK();
} else if (required && ((Group) role).addRequiredMember(member)) {
- return Response.ok(MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK();
} else {
- return Response.notModified("Member already added").build();
+ return buildNotModified("Member already added");
}
} else {
- return Response.status(Response.Status.NOT_FOUND).build();
+ return buildNotFound();
}
}
}
Modified:
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/ResourceBase.java
==============================================================================
---
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/ResourceBase.java
(original)
+++
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/ResourceBase.java
Mon Dec 13 11:07:21 2010
@@ -21,6 +21,7 @@
import java.util.Comparator;
import java.util.List;
+import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@@ -37,6 +38,13 @@
// Service dependencies injected by the depedency manager
protected volatile LogService m_logService;
protected volatile UserAdmin m_userAdmin;
+
+ // Disable HTTP caching in this REST interface
+ private static CacheControl m_cacheControl;
+ static {
+ m_cacheControl = new CacheControl();
+ m_cacheControl.setNoCache(true);
+ }
/**
* Returns the roles (users or groups) for the specified filter options.
@@ -108,7 +116,7 @@
jsonObject.put("resultCount", roleRange.size());
jsonObject.put("totalCount", filteredRoles.size());
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK(jsonObject);
} catch (InvalidSyntaxException e) {
m_logService.log(LogService.LOG_ERROR, "Unable to retrieve roles
for filter '" + filter + "', startIndex '"
+ startIndex + "' maxResults '" + maxResults + "'", e);
@@ -116,7 +124,7 @@
m_logService.log(LogService.LOG_ERROR, "Unable to retrieve roles
for filter '" + filter + "', startIndex '"
+ startIndex + "' maxResults '" + maxResults + "'", e);
}
- return Response.serverError().build();
+ return buildServerError();
}
protected Response getRole(String name, int roleType) {
@@ -124,22 +132,22 @@
Role role = m_userAdmin.getRole(name);
if (role != null && role.getType() == roleType) {
JSONObject jsonRole = getJSON(role);
- return Response.ok(jsonRole.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK(jsonRole);
} else {
- return Response.status(Response.Status.NOT_FOUND).build();
+ return buildNotFound();
}
} catch (JSONException e) {
m_logService.log(LogService.LOG_ERROR, "Unable to retrieve role
named '" + name + "'", e);
}
- return Response.serverError().build();
+ return buildServerError();
}
protected Response createRole(String name, int roleType) {
Role role = m_userAdmin.createRole(name, roleType);
if (role != null) {
- return Response.ok(MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK();
} else {
- return Response.notModified("Role could not be created").build();
+ return buildNotModified("Role could not be created");
}
}
@@ -148,9 +156,9 @@
Role role = m_userAdmin.getRole(name);
if (role != null && role.getType() == roleType) {
((User) role).getCredentials().put(key, value);
- return Response.ok(MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK();
} else {
- return Response.status(Response.Status.NOT_FOUND).build();
+ return buildNotFound();
}
}
@@ -159,9 +167,9 @@
Role role = m_userAdmin.getRole(name);
if (role != null && role.getType() == roleType) {
role.getProperties().put(key, value);
- return Response.ok(MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK();
} else {
- return Response.status(Response.Status.NOT_FOUND).build();
+ return buildNotFound();
}
}
@@ -169,12 +177,12 @@
Role role = m_userAdmin.getRole(name);
if (role != null && role.getType() == roleType) {
if (m_userAdmin.removeRole(name)) {
- return Response.ok(MediaType.APPLICATION_JSON_TYPE).build();
+ return buildOK();
} else {
- return Response.notModified("Role to remove not
found").build();
+ return buildNotModified("Role to remove not found");
}
} else {
- return Response.notModified("Role to remove not found").build();
+ return buildNotModified("Role to remove not found");
}
}
@@ -205,4 +213,24 @@
}
return jsonRole;
}
+
+ protected Response buildOK() {
+ return Response.ok().cacheControl(m_cacheControl).build();
+ }
+
+ protected Response buildOK(JSONObject jsonObject) {
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
+ }
+
+ protected Response buildNotFound() {
+ return
Response.status(Response.Status.NOT_FOUND).cacheControl(m_cacheControl).build();
+ }
+
+ protected Response buildNotModified(String msg) {
+ return Response.notModified(msg).cacheControl(m_cacheControl).build();
+ }
+
+ protected Response buildServerError() {
+ return Response.serverError().cacheControl(m_cacheControl).build();
+ }
}
Modified:
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/UsersResource.java
==============================================================================
---
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/UsersResource.java
(original)
+++
trunk/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/rest/UsersResource.java
Mon Dec 13 11:07:21 2010
@@ -44,6 +44,16 @@
@Path("users")
public class UsersResource extends ResourceBase implements
DummyResourceInterface {
/**
+ * This method can be used to check the availability of the Users
management service.
+ * @return The text "UserAdmin Users management service online"
+ */
+ @GET
+ @Produces({MediaType.TEXT_PLAIN})
+ public String status() {
+ return "UserAdmin Users management service online";
+ }
+
+ /**
* Returns all users that match the specified filter options. This method
can be invoked by making the following
* REST call:<code><pre>
* GET
/rest/services/users/users?filter={filter}&sortOrder={sortOrder}&startIndex={startIndex}&maxResults={maxResults}
Modified:
trunk/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
==============================================================================
---
trunk/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
(original)
+++
trunk/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
Mon Dec 13 11:07:21 2010
@@ -42,6 +42,7 @@
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
@@ -110,6 +111,13 @@
private ConcurrentMap<URL, FutureTask<Object[]>> m_gadgetSpecCache =
new ConcurrentHashMap<URL, FutureTask<Object[]>>();
+ // Disable HTTP caching in this REST interface
+ private static CacheControl m_cacheControl;
+ static {
+ m_cacheControl = new CacheControl();
+ m_cacheControl.setMaxAge(300); // 5 minutes
+ }
+
/**
* The init() method is invoked by the Felix dependency manager.
*/
@@ -140,6 +148,16 @@
m_logService.log(LogService.LOG_INFO, getClass().getName() + " service
destroyed");
}
+ /**
+ * This method can be used to check the availability of the Gadget
management service.
+ * @return The text "Gadget management service online"
+ */
+ @GET
+ @Produces({MediaType.TEXT_PLAIN})
+ public String status() {
+ return "Gadget management service online";
+ }
+
public boolean addGadget(GadgetDefinition gadget) {
return m_gadgetStore.addGadget(gadget);
}
@@ -176,7 +194,6 @@
categories.add(json);
}
jsonObject.put("category", categories);
-
}
catch (JSONException e) {
m_logService.log(LogService.LOG_ERROR, "An error occurred while
retrieving all categories", e);
@@ -185,7 +202,7 @@
m_logService.log(LogService.LOG_ERROR, "An error occurred while
retrieving all categories", e);
}
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
}
/**
@@ -243,7 +260,7 @@
catch (BlobCrypterException e) {
m_logService.log(LogService.LOG_ERROR, errorMsg, e);
}
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
}
/**
@@ -372,7 +389,7 @@
m_logService.log(LogService.LOG_ERROR, errorMsg, e);
}
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
}
private void setGadgetId(JSONObject gadget, String gadgetId, boolean
generateStartId) throws JSONException {
Modified:
trunk/amdatu-semanticweb/sparqlendpoint/src/main/java/org/amdatu/semanticweb/sparqlendpoint/service/SPARQLEndpointServiceImpl.java
==============================================================================
---
trunk/amdatu-semanticweb/sparqlendpoint/src/main/java/org/amdatu/semanticweb/sparqlendpoint/service/SPARQLEndpointServiceImpl.java
(original)
+++
trunk/amdatu-semanticweb/sparqlendpoint/src/main/java/org/amdatu/semanticweb/sparqlendpoint/service/SPARQLEndpointServiceImpl.java
Mon Dec 13 11:07:21 2010
@@ -17,6 +17,7 @@
package org.amdatu.semanticweb.sparqlendpoint.service;
import javax.ws.rs.*;
+import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.net.URL;
@@ -69,6 +70,13 @@
private Component m_httpContextComponent;
private String m_hostname;
private String m_portnr;
+
+ // HTTP caching policy for this REST interface
+ private static CacheControl m_cacheControl;
+ static {
+ m_cacheControl = new CacheControl();
+ m_cacheControl.setMaxAge(300); // 5 minutes
+ }
/**
* The init() method is invoked by the Felix dependency manager.
@@ -98,6 +106,16 @@
// Stop the HTTP context service we created ourselves
m_httpContextComponent.stop();
}
+
+ /**
+ * This method can be used to check the availability of the SPARQL
Endpoint.
+ * @return The text "SPARQL Endpoint online"
+ */
+ @GET
+ @Produces({MediaType.TEXT_PLAIN})
+ public String status() {
+ return "SPARQL Endpoint online";
+ }
/**
* Executes a SPARQL query and returns the result.
@@ -150,17 +168,7 @@
return jsonObject;
}
});
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).build();
- }
-
- /**
- * This method can be used to check the availability of the SPARQL
Endpoint.
- * @return The text "SPARQL Endpoint online"
- */
- @GET
- @Produces({MediaType.TEXT_PLAIN})
- public String checkAvailability() {
- return "SPARQL Endpoint online";
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
}
public URL getResource(String name) {
Modified:
trunk/integration-tests/src/test/java/org/amdatu/test/integration/tests/GadgetManagementServiceTest.java
==============================================================================
---
trunk/integration-tests/src/test/java/org/amdatu/test/integration/tests/GadgetManagementServiceTest.java
(original)
+++
trunk/integration-tests/src/test/java/org/amdatu/test/integration/tests/GadgetManagementServiceTest.java
Mon Dec 13 11:07:21 2010
@@ -78,6 +78,7 @@
amdatuUserAdminCassandraStore(),
amdatuHttpContext(),
amdatuJaxRs(),
+ amdatuWink(),
amdatuLogin(),
amdatuShindig(),
amdatuGadgetManagement()