Details
diff --git a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
index b84eb7a..c6ba0e7 100755
--- a/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
+++ b/services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java
@@ -49,10 +49,10 @@ public class KeycloakApplication extends Application {
public KeycloakApplication() {
KeycloakSessionFactory f = createSessionFactory();
this.factory = f;
- KeycloakSessionRequestFilter filter = new KeycloakSessionRequestFilter(factory);
+ //KeycloakSessionRequestFilter filter = new KeycloakSessionRequestFilter(factory);
+ //singletons.add(filter);
+ //classes.add(KeycloakSessionResponseFilter.class);
singletons.add(new RealmsResource(new TokenManager(), new SocialRequestManager()));
- singletons.add(filter);
- classes.add(KeycloakSessionResponseFilter.class);
classes.add(SkeletonKeyContextResolver.class);
classes.add(SaasService.class);
}
diff --git a/services/src/main/java/org/keycloak/services/resources/RealmsResource.java b/services/src/main/java/org/keycloak/services/resources/RealmsResource.java
index d9319ca..84f8b59 100755
--- a/services/src/main/java/org/keycloak/services/resources/RealmsResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/RealmsResource.java
@@ -92,17 +92,17 @@ public class RealmsResource {
}
@Path("{realm}")
- public RealmSubResource getRealmResource(final @PathParam("realm") String id) {
+ public PublicRealmResource getRealmResource(final @PathParam("realm") String id) {
return new Transaction(false) {
@Override
- protected RealmSubResource callImpl() {
+ protected PublicRealmResource callImpl() {
RealmManager realmManager = new RealmManager(session);
RealmModel realm = realmManager.getRealm(id);
if (realm == null) {
logger.debug("realm not found");
throw new NotFoundException();
}
- RealmSubResource realmResource = new RealmSubResource(realm);
+ PublicRealmResource realmResource = new PublicRealmResource(realm);
resourceContext.initResource(realmResource);
return realmResource;
}
@@ -127,7 +127,7 @@ public class RealmsResource {
RealmModel realm = realmManager.importRealm(rep, realmCreator);
UriBuilder builder = uriInfo.getRequestUriBuilder().path(realm.getId());
return Response.created(builder.build())
- .entity(RealmSubResource.realmRep(realm, uriInfo))
+ .entity(PublicRealmResource.realmRep(realm, uriInfo))
.type(MediaType.APPLICATION_JSON_TYPE).build();
}
}.call();
diff --git a/services/src/main/java/org/keycloak/services/resources/SaaSService.java b/services/src/main/java/org/keycloak/services/resources/SaaSService.java
index 93a3e48..05eb3a1 100755
--- a/services/src/main/java/org/keycloak/services/resources/SaaSService.java
+++ b/services/src/main/java/org/keycloak/services/resources/SaaSService.java
@@ -9,7 +9,6 @@ import org.keycloak.representations.idm.RequiredCredentialRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.services.managers.AuthenticationManager;
import org.keycloak.services.managers.RealmManager;
-import org.keycloak.services.models.KeycloakSession;
import org.keycloak.services.models.RealmModel;
import org.keycloak.services.models.RoleModel;
import org.keycloak.services.models.UserModel;
diff --git a/services/src/main/java/org/keycloak/services/resources/Transaction.java b/services/src/main/java/org/keycloak/services/resources/Transaction.java
index 03bb3b7..32f4319 100755
--- a/services/src/main/java/org/keycloak/services/resources/Transaction.java
+++ b/services/src/main/java/org/keycloak/services/resources/Transaction.java
@@ -5,6 +5,8 @@ import org.keycloak.services.models.KeycloakSession;
import org.keycloak.services.models.KeycloakSessionFactory;
import org.keycloak.services.models.KeycloakTransaction;
+import javax.ws.rs.core.Application;
+
/**
* Meant to be used as an inner class wrapper (I forget the pattern name, its been awhile).
*
@@ -15,6 +17,7 @@ public class Transaction {
protected KeycloakSession session;
protected KeycloakTransaction transaction;
protected boolean closeSession;
+ protected boolean created;
/**
* Pull KeycloakSession from @Context
@@ -29,10 +32,16 @@ public class Transaction {
/**
* Pull KeycloakSession from @Context
*
- * @param close whether to close the session or not after completion
+ * @param close whether to close the session or not after successful completion
*/
public Transaction(boolean close) {
this.session = ResteasyProviderFactory.getContextData(KeycloakSession.class);
+ if (session == null) {
+ KeycloakApplication app = (KeycloakApplication)ResteasyProviderFactory.getContextData(Application.class);
+ session = app.getFactory().createSession();
+ created = true;
+ ResteasyProviderFactory.pushContext(KeycloakSession.class, session);
+ }
transaction = session.getTransaction();
closeSession = close;
@@ -65,9 +74,12 @@ public class Transaction {
if (!wasActive && transaction.isActive()) transaction.commit();
} catch (RuntimeException e) {
if (!wasActive && transaction.isActive()) transaction.rollback();
+ if (created) closeSession = true;
throw e;
} finally {
- if (!wasActive && closeSession) session.close();
+ if (!wasActive && closeSession) {
+ session.close();
+ }
}
}
@@ -88,6 +100,7 @@ public class Transaction {
return rtn;
} catch (RuntimeException e) {
if (!wasActive && transaction.isActive()) transaction.rollback();
+ if (created) closeSession = true; // close if there was a failure
throw e;
} finally {
if (!wasActive && closeSession) session.close();