Author: anil.saldhana(a)jboss.com
Date: 2009-06-16 16:22:59 -0400 (Tue, 16 Jun 2009)
New Revision: 615
Modified:
identity-federation/trunk/jboss-identity-bindings/src/main/java/org/jboss/identity/federation/bindings/servlets/SOAPSAMLXACMLServlet.java
Log:
JBID-130: PDP is a variable guarded by a lock at each request
Modified:
identity-federation/trunk/jboss-identity-bindings/src/main/java/org/jboss/identity/federation/bindings/servlets/SOAPSAMLXACMLServlet.java
===================================================================
---
identity-federation/trunk/jboss-identity-bindings/src/main/java/org/jboss/identity/federation/bindings/servlets/SOAPSAMLXACMLServlet.java 2009-06-16
20:20:29 UTC (rev 614)
+++
identity-federation/trunk/jboss-identity-bindings/src/main/java/org/jboss/identity/federation/bindings/servlets/SOAPSAMLXACMLServlet.java 2009-06-16
20:22:59 UTC (rev 615)
@@ -25,6 +25,8 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.security.PrivilegedActionException;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
@@ -78,12 +80,16 @@
private static final long serialVersionUID = 1L;
- String policyConfigFileName = null;
+ private String policyConfigFileName = null;
- String issuerId = null;
- String issuer = null;
+ private String issuerId = null;
+ private String issuer = null;
boolean debug = false;
+
+ private PolicyDecisionPoint pdp = null;
+
+ private Lock lock = new ReentrantLock();
public void init(ServletConfig config) throws ServletException
{
@@ -117,6 +123,16 @@
{
SecurityActions.setSystemProperty("jaxb.debug", "true");
}
+
+ try
+ {
+ pdp = this.getPDP();
+ }
+ catch (PrivilegedActionException e)
+ {
+ log("Exception loading PDP::",e);
+ throw new ServletException("Unable to load PDP");
+ }
super.init(config);
}
@@ -177,8 +193,19 @@
RequestContext requestContext = new JBossRequestContext();
requestContext.setRequest(requestType);
- ResponseContext responseContext = getPDP().evaluate(requestContext);
+ ResponseContext responseContext = null;
+ //Get a lock
+ lock.lock();
+ try
+ {
+ responseContext = pdp.evaluate(requestContext);
+ }
+ finally
+ {
+ lock.unlock();
+ }
+
ResponseType responseType = new ResponseType();
ResultType resultType = responseContext.getResult();
responseType.getResult().add(resultType);
@@ -207,18 +234,15 @@
}
catch (JAXBException e)
{
- log.error("Exception parsing SOAP:", e);
- envelope = this.createEnvelope(this.createFault("Parsing
Error:"+e.getMessage()));
- }
- catch (PrivilegedActionException e)
- {
- log.error("Exception getting PDP:", e);
- envelope = this.createEnvelope(this.createFault("PDP Setup
Error:"+e.getMessage()));
+ String id = IDGenerator.create();
+ log.error(id + "::Exception parsing SOAP:", e);
+ envelope = this.createEnvelope(this.createFault("Parsing Error.
Reference::" + id));
}
catch (Exception e)
{
- log.error("Exception:", e);
- envelope = this.createEnvelope(this.createFault("Server
Error:"+e.getMessage()));
+ String id = IDGenerator.create();
+ log.error(id + "::Exception:", e);
+ envelope = this.createEnvelope(this.createFault("Server Error.
Reference::" + id));
}
finally
{