You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by to...@apache.org on 2015/06/12 22:37:21 UTC

incubator-usergrid git commit: Fixes app not found to return a 404

Repository: incubator-usergrid
Updated Branches:
  refs/heads/USERGRID-744 2981ba695 -> 6828111b9


Fixes app not found to return a 404

Moves app delete/restore to management endpoint

Fixes bugs in app delete/restore


Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/6828111b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/6828111b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/6828111b

Branch: refs/heads/USERGRID-744
Commit: 6828111b97c54da13ac306481c629f1f07d67b4e
Parents: 2981ba6
Author: Todd Nine <tn...@apigee.com>
Authored: Fri Jun 12 14:37:15 2015 -0600
Committer: Todd Nine <tn...@apigee.com>
Committed: Fri Jun 12 14:37:15 2015 -0600

----------------------------------------------------------------------
 .../corepersistence/CpEntityManagerFactory.java | 73 +++++++++--------
 .../rest/applications/ApplicationResource.java  | 41 +++++++---
 ...ationApplicationNotFoundExceptionMapper.java |  2 +-
 .../applications/ApplicationsResource.java      | 13 ---
 .../rest/applications/ApplicationDeleteIT.java  | 86 +++++++++++++-------
 .../cassandra/ManagementServiceImpl.java        |  6 +-
 6 files changed, 124 insertions(+), 97 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/6828111b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
index 1f8ee5e..e3c17f0 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
@@ -16,20 +16,12 @@
 package org.apache.usergrid.corepersistence;
 
 
-import java.util.Arrays;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.UUID;
-import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
-import org.apache.usergrid.corepersistence.index.ReIndexRequestBuilder;
-import org.apache.usergrid.persistence.*;
-import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdge;
-import org.apache.usergrid.persistence.index.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeansException;
@@ -66,11 +58,14 @@ import org.apache.usergrid.persistence.core.util.Health;
 import org.apache.usergrid.persistence.entities.Application;
 import org.apache.usergrid.persistence.exceptions.ApplicationAlreadyExistsException;
 import org.apache.usergrid.persistence.exceptions.DuplicateUniquePropertyExistsException;
+import org.apache.usergrid.persistence.exceptions.EntityNotFoundException;
 import org.apache.usergrid.persistence.graph.Edge;
 import org.apache.usergrid.persistence.graph.GraphManager;
 import org.apache.usergrid.persistence.graph.GraphManagerFactory;
 import org.apache.usergrid.persistence.graph.SearchByEdgeType;
 import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdgeType;
+import org.apache.usergrid.persistence.index.EntityIndex;
+import org.apache.usergrid.persistence.index.IndexRefreshCommand;
 import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.entity.SimpleId;
 import org.apache.usergrid.persistence.model.util.UUIDGenerator;
@@ -364,39 +359,45 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
         final ApplicationScope deleteApplicationScope = new ApplicationScopeImpl(deleteApplicationId);
 
         Entity oldAppEntity = managementEm.get(new SimpleEntityRef( deleteTypeName, applicationUUID));
-        Observable copyConnections = Observable.empty();
-        if (oldAppEntity != null) {
-            // ensure that there is not already a deleted app with the same name
 
-            final EntityRef alias = managementEm.getAlias( createCollectionName, oldAppEntity.getName());
-            if (alias != null) {
-                throw new ConflictException("Cannot delete app with same name as already deleted app");
-            }
-            // make a copy of the app to delete application_info entity
-            // and put it in a deleted_application_info collection
+        if(oldAppEntity == null){
+            throw new EntityNotFoundException( String.format("Could not find application with UUID '%s'", applicationUUID) );
+        }
 
-            final Entity newAppEntity = managementEm.create(new SimpleId(applicationUUID, createTypeName ), oldAppEntity.getProperties());
 
-            // copy its connections too
-
-            final Set<String> connectionTypes = managementEm.getConnectionTypes(oldAppEntity);
-            copyConnections = Observable.from(connectionTypes).doOnNext(connType -> {
-                try {
-                    final Results connResults =
-                        managementEm.getTargetEntities(oldAppEntity, connType, null, Query.Level.ALL_PROPERTIES);
-                    connResults.getEntities().forEach(entity -> {
-                        try {
-                            managementEm.createConnection(newAppEntity, connType, entity);
-                        } catch (Exception e) {
-                            throw new RuntimeException(e);
-                        }
-                    });
-                } catch (Exception e) {
-                    throw new RuntimeException(e);
-                }
-            });
+        // ensure that there is not already a deleted app with the same name
 
+        final EntityRef alias = managementEm.getAlias( createCollectionName, oldAppEntity.getName() );
+        if ( alias != null ) {
+            throw new ConflictException( "Cannot delete app with same name as already deleted app" );
         }
+        // make a copy of the app to delete application_info entity
+        // and put it in a deleted_application_info collection
+
+        final Entity newAppEntity =
+            managementEm.create( new SimpleId( applicationUUID, createTypeName ), oldAppEntity.getProperties() );
+
+        // copy its connections too
+
+        final Set<String> connectionTypes = managementEm.getConnectionTypes( oldAppEntity );
+        Observable copyConnections = Observable.from( connectionTypes ).doOnNext( connType -> {
+            try {
+                final Results connResults =
+                    managementEm.getTargetEntities( oldAppEntity, connType, null, Query.Level.ALL_PROPERTIES );
+                connResults.getEntities().forEach( entity -> {
+                    try {
+                        managementEm.createConnection( newAppEntity, connType, entity );
+                    }
+                    catch ( Exception e ) {
+                        throw new RuntimeException( e );
+                    }
+                } );
+            }
+            catch ( Exception e ) {
+                throw new RuntimeException( e );
+            }
+        } );
+
         final Id managementAppId = CpNamingUtils.getManagementApplicationId();
         final EntityIndex aei = getManagementIndex();
         final GraphManager managementGraphManager = managerCache.getGraphManager(managementAppScope);

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/6828111b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
index 892590d..bf350bc 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
@@ -20,23 +20,36 @@ package org.apache.usergrid.rest.applications;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Map;
-import java.util.Properties;
 import java.util.UUID;
 
-import javax.ws.rs.*;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.PathSegment;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 
-import org.apache.commons.lang.StringUtils;
-import org.apache.usergrid.rest.ApiResponse;
-import org.apache.usergrid.rest.security.annotations.RequireOrganizationAccess;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
+
+import org.apache.amber.oauth2.common.error.OAuthError;
+import org.apache.amber.oauth2.common.exception.OAuthProblemException;
+import org.apache.amber.oauth2.common.message.OAuthResponse;
+import org.apache.amber.oauth2.common.message.types.GrantType;
+import org.apache.shiro.authz.UnauthorizedException;
+import org.apache.shiro.codec.Base64;
+
 import org.apache.usergrid.management.ApplicationInfo;
 import org.apache.usergrid.management.exceptions.DisabledAdminUserException;
 import org.apache.usergrid.management.exceptions.DisabledAppUserException;
@@ -44,10 +57,10 @@ import org.apache.usergrid.management.exceptions.UnactivatedAdminUserException;
 import org.apache.usergrid.management.exceptions.UnactivatedAppUserException;
 import org.apache.usergrid.mq.QueueManager;
 import org.apache.usergrid.persistence.EntityManager;
-import org.apache.usergrid.persistence.index.query.Identifier;
 import org.apache.usergrid.persistence.SimpleEntityRef;
 import org.apache.usergrid.persistence.entities.Application;
 import org.apache.usergrid.persistence.entities.User;
+import org.apache.usergrid.persistence.index.query.Identifier;
 import org.apache.usergrid.rest.AbstractContextResource;
 import org.apache.usergrid.rest.applications.assets.AssetsResource;
 import org.apache.usergrid.rest.applications.events.EventsResource;
@@ -56,16 +69,10 @@ import org.apache.usergrid.rest.applications.users.UsersResource;
 import org.apache.usergrid.rest.exceptions.AuthErrorInfo;
 import org.apache.usergrid.rest.exceptions.RedirectionException;
 import org.apache.usergrid.rest.security.annotations.RequireApplicationAccess;
+import org.apache.usergrid.rest.security.annotations.RequireOrganizationAccess;
 import org.apache.usergrid.security.oauth.AccessInfo;
 import org.apache.usergrid.security.oauth.ClientCredentialsInfo;
 
-import org.apache.amber.oauth2.common.error.OAuthError;
-import org.apache.amber.oauth2.common.exception.OAuthProblemException;
-import org.apache.amber.oauth2.common.message.OAuthResponse;
-import org.apache.amber.oauth2.common.message.types.GrantType;
-import org.apache.shiro.authz.UnauthorizedException;
-import org.apache.shiro.codec.Base64;
-
 import com.sun.jersey.api.json.JSONWithPadding;
 import com.sun.jersey.api.view.Viewable;
 
@@ -488,6 +495,14 @@ public class ApplicationResource extends ServiceResource {
     }
 
 
+    @Override
+    @DELETE
+    @RequireOrganizationAccess
+    public JSONWithPadding executeDelete( @Context final UriInfo ui, @DefaultValue( "callback" ) final String callback,
+                                          final String confirmAppDelete ) throws Exception {
+        throw new UnsupportedOperationException( "Delete must be done from the management endpoint" );
+    }
+
 
     String errorMsg = "";
     String applicationName;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/6828111b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/OrganizationApplicationNotFoundExceptionMapper.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/OrganizationApplicationNotFoundExceptionMapper.java b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/OrganizationApplicationNotFoundExceptionMapper.java
index 0d25021..8f4111a 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/OrganizationApplicationNotFoundExceptionMapper.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/OrganizationApplicationNotFoundExceptionMapper.java
@@ -27,6 +27,6 @@ public class OrganizationApplicationNotFoundExceptionMapper
         extends AbstractExceptionMapper<OrganizationApplicationNotFoundException> {
     @Override
     public Response toResponse( OrganizationApplicationNotFoundException e ) {
-        return super.toResponse( Response.Status.BAD_REQUEST, e );
+        return super.toResponse( Response.Status.NOT_FOUND, e );
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/6828111b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
index f8e2268..28eff4e 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
@@ -135,19 +135,6 @@ public class ApplicationsResource extends AbstractContextResource {
 
 
     @RequireOrganizationAccess
-    @Path(RootResource.APPLICATION_ID_PATH)
-    @PUT
-    public ApplicationResource restoreApplicationFromOrganizationByApplicationId(
-        @Context UriInfo ui,
-        @PathParam( "applicationId" )
-        String applicationIdStr ) throws Exception {
-
-        return getSubResource( ApplicationResource.class )
-            .init( organization, UUID.fromString( applicationIdStr ) );
-    }
-
-
-    @RequireOrganizationAccess
     @Path( "{applicationName}" )
     public ApplicationResource applicationFromOrganizationByApplicationName(
         @Context UriInfo ui, @PathParam( "applicationName" ) String applicationName ) throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/6828111b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationDeleteIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationDeleteIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationDeleteIT.java
index 2fe05e3..d00ae74 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationDeleteIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/ApplicationDeleteIT.java
@@ -18,17 +18,27 @@
 package org.apache.usergrid.rest.applications;
 
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import org.apache.usergrid.rest.test.resource2point0.AbstractRestIT;
-import org.apache.usergrid.rest.test.resource2point0.endpoints.mgmt.ManagementResponse;
-import org.apache.usergrid.rest.test.resource2point0.model.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.UUID;
+
+import javax.ws.rs.core.MediaType;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import javax.ws.rs.core.MediaType;
-import java.util.*;
+
+import org.apache.usergrid.rest.test.resource2point0.AbstractRestIT;
+import org.apache.usergrid.rest.test.resource2point0.endpoints.mgmt.ManagementResponse;
+import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
+import org.apache.usergrid.rest.test.resource2point0.model.Application;
+import org.apache.usergrid.rest.test.resource2point0.model.Entity;
+import org.apache.usergrid.rest.test.resource2point0.model.Token;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.sun.jersey.api.client.UniformInterfaceException;
 
 import static org.junit.Assert.fail;
 
@@ -73,8 +83,10 @@ public class ApplicationDeleteIT extends AbstractRestIT {
 
             fail("Delete must fail without app_delete_confirm parameter");
 
-        } catch ( Exception e ) {
-            logger.error("Error", e);
+        } catch (  UniformInterfaceException expected  ) {
+            Assert.assertEquals("Error must be 400", 400, expected.getResponse().getStatus() );
+            JsonNode node = mapper.readTree( expected.getResponse().getEntity( String.class ));
+            Assert.assertEquals("Cannot delete application without app_delete_confirm parameter", node.get("error_description").textValue());
         }
 
         clientSetup.getRestClient().management().orgs()
@@ -95,10 +107,25 @@ public class ApplicationDeleteIT extends AbstractRestIT {
             fail("Must not be able to get deleted app");
 
         } catch ( UniformInterfaceException expected ) {
-            Assert.assertEquals("Error must be 400", 400, expected.getResponse().getStatus() );
+            Assert.assertEquals("Error must be 404", 404, expected.getResponse().getStatus() );
             JsonNode node = mapper.readTree( expected.getResponse().getEntity( String.class ));
-            Assert.assertEquals("organization_application_not_found", node.get("error").textValue());
+            Assert.assertEquals("entity_not_found", node.get("error").textValue());
+        }
+
+
+        try {
+            clientSetup.getRestClient().org( orgName ).app( appToDeleteName ).getResource()
+                       .queryParam( "access_token", orgAdminToken.getAccessToken() ).type( MediaType.APPLICATION_JSON )
+                       .get( ApiResponse.class );
+
+            fail( "Must not be able to get deleted app" );
         }
+        catch ( UniformInterfaceException expected ) {
+            Assert.assertEquals( "Error must be 404", 404, expected.getResponse().getStatus() );
+            JsonNode node = mapper.readTree( expected.getResponse().getEntity( String.class ) );
+            Assert.assertEquals( "organization_application_not_found", node.get( "error" ).textValue() );
+        }
+
 
         // test that we can no longer get deleted app's collection
 
@@ -112,7 +139,7 @@ public class ApplicationDeleteIT extends AbstractRestIT {
             fail("Must not be able to get deleted app's collection");
 
         } catch ( UniformInterfaceException expected ) {
-            Assert.assertEquals("Error must be 400", 400, expected.getResponse().getStatus() );
+            Assert.assertEquals("Error must be 400", 404, expected.getResponse().getStatus() );
             JsonNode node = mapper.readTree( expected.getResponse().getEntity( String.class ));
             Assert.assertEquals("organization_application_not_found", node.get("error").textValue());
         }
@@ -131,7 +158,7 @@ public class ApplicationDeleteIT extends AbstractRestIT {
 
         } catch ( UniformInterfaceException expected ) {
             // TODO: why not a 404?
-            Assert.assertEquals("Error must be 400", 400, expected.getResponse().getStatus() );
+            Assert.assertEquals("Error must be 400", 404, expected.getResponse().getStatus() );
             JsonNode node = mapper.readTree( expected.getResponse().getEntity( String.class ));
             Assert.assertEquals("organization_application_not_found", node.get("error").textValue());
         }
@@ -153,15 +180,16 @@ public class ApplicationDeleteIT extends AbstractRestIT {
         // test that we cannot delete the application a second time
 
         try {
-            clientSetup.getRestClient().management().orgs()
-                .org(orgName).apps().app(appToDeleteId.toString()).getResource()
-                .queryParam("access_token", orgAdminToken.getAccessToken())
-                .delete();
+            clientSetup.getRestClient().management().orgs().org( orgName ).apps().app( appToDeleteId.toString() )
+                       .getResource().queryParam( "access_token", orgAdminToken.getAccessToken() )
+                       .queryParam( "app_delete_confirm", "confirm_delete_of_application_and_data" ).delete();
 
-        } catch ( UniformInterfaceException expected ) {
-            Assert.assertEquals("Error must be 404", 404, expected.getResponse().getStatus() );
-            JsonNode node = mapper.readTree( expected.getResponse().getEntity( String.class ));
-            Assert.assertEquals("not_found", node.get("error").textValue());
+            fail("Can't delete a non existent app twice");
+        }
+        catch ( UniformInterfaceException expected ) {
+            Assert.assertEquals( "Error must be 404", 404, expected.getResponse().getStatus() );
+            JsonNode node = mapper.readTree( expected.getResponse().getEntity( String.class ) );
+            Assert.assertEquals( "entity_not_found", node.get( "error" ).textValue() );
         }
 
         // test that we can create a new application with the same name
@@ -204,8 +232,8 @@ public class ApplicationDeleteIT extends AbstractRestIT {
 
         logger.debug("\n\nDeleting app\n");
 
-        clientSetup.getRestClient()
-            .org(orgName).app( appToDeleteName ).getResource()
+        clientSetup.getRestClient().management().orgs()
+            .org(orgName).apps().app( appToDeleteName ).getResource()
             .queryParam("access_token", orgAdminToken.getAccessToken() )
             .queryParam("app_delete_confirm", "confirm_delete_of_application_and_data")
             .delete();
@@ -217,8 +245,8 @@ public class ApplicationDeleteIT extends AbstractRestIT {
 
         logger.debug("\n\nRestoring app\n");
 
-        clientSetup.getRestClient()
-            .org(orgName).app( appToDeleteId.toString() ).getResource()
+        clientSetup.getRestClient().management().orgs()
+            .org(orgName).apps().app( appToDeleteId.toString() ).getResource()
             .queryParam("access_token", orgAdminToken.getAccessToken() )
             .put();
 
@@ -282,8 +310,8 @@ public class ApplicationDeleteIT extends AbstractRestIT {
 
         // delete the app
 
-        clientSetup.getRestClient()
-            .org( orgName ).app(appToDeleteId.toString() ).getResource()
+        clientSetup.getRestClient().management().orgs()
+            .org( orgName ).apps().app(appToDeleteId.toString() ).getResource()
             .queryParam( "access_token", orgAdminToken.getAccessToken() )
             .queryParam("app_delete_confirm", "confirm_delete_of_application_and_data")
             .delete();
@@ -296,8 +324,8 @@ public class ApplicationDeleteIT extends AbstractRestIT {
 
         try {
 
-            clientSetup.getRestClient()
-                .org(orgName).app(appToDeleteId.toString()).getResource()
+            clientSetup.getRestClient() .management().orgs()
+                .org(orgName).apps().app(appToDeleteId.toString()).getResource()
                 .queryParam("access_token", orgAdminToken.getAccessToken())
                 .put();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/6828111b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
index 5c4262d..6f4e675 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
@@ -1892,12 +1892,8 @@ public class ManagementServiceImpl implements ManagementService {
             return null;
         }
         EntityManager em = emf.getEntityManager( smf.getManagementAppId() );
-        EntityRef mgmtAppRef = new SimpleEntityRef( Schema.TYPE_APPLICATION, smf.getManagementAppId() );
 
-        final Results results = em.searchCollection(mgmtAppRef, CpNamingUtils.DELETED_APPLICATION_INFOS,
-            Query.fromQL("select * where " + PROPERTY_APPLICATION_ID + " = " + applicationId.toString()));
-
-        Entity entity = results.getEntity();
+        final Entity entity = em.get( new SimpleEntityRef( CpNamingUtils.DELETED_APPLICATION_INFO, applicationId ) );
 
         if ( entity != null ) {
             return new ApplicationInfo( applicationId, entity.getName() );