Author: dblevins
Date: Mon Nov 12 10:20:54 2007
New Revision: 594246

URL: http://svn.apache.org/viewvc?rev=594246&view=rev
Log:
Patch from Jarek Gawor OPENEJB-716: Security with LocalInitialContextFactory
Small change by me to add static cache of context into InitContextFactory

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/client/LocalInitialContextFactory.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/InitContextFactory.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/client/LocalInitialContextFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/client/LocalInitialContextFactory.java?rev=594246&r1=594245&r2=594246&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/client/LocalInitialContextFactory.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/client/LocalInitialContextFactory.java
 Mon Nov 12 10:20:54 2007
@@ -33,24 +33,27 @@
  */
 public class LocalInitialContextFactory implements 
javax.naming.spi.InitialContextFactory {
 
-    static Context intraVmContext;
     private static OpenEJBInstance openejb;
     private static final String OPENEJB_EMBEDDED_REMOTABLE = 
"openejb.embedded.remotable";
 
     public Context getInitialContext(Hashtable env) throws 
javax.naming.NamingException {
-        if (intraVmContext == null) {
-            try {
-                Properties properties = new Properties();
-                properties.putAll(env);
-                init(properties);
-            } catch (Exception e) {
-                throw (NamingException) new NamingException("Attempted to load 
OpenEJB. " + e.getMessage()).initCause(e);
-            }
-            intraVmContext = getIntraVmContext(env);
-        }
-        return intraVmContext;
+        init(env);
+        return getIntraVmContext(env);
     }
 
+    private void init(Hashtable env) throws javax.naming.NamingException {
+        if (openejb != null) {
+            return;
+        }
+        try {
+            Properties properties = new Properties();
+            properties.putAll(env);
+            init(properties);
+        } catch (Exception e) {
+            throw (NamingException) new NamingException("Attempted to load 
OpenEJB. " + e.getMessage()).initCause(e);
+        }
+    }
+    
     public void init(Properties properties) throws Exception {
         if (openejb != null) return;
         openejb = new OpenEJBInstance();

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/InitContextFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/InitContextFactory.java?rev=594246&r1=594245&r2=594246&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/InitContextFactory.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/InitContextFactory.java
 Mon Nov 12 10:20:54 2007
@@ -30,28 +30,40 @@
 
 public class InitContextFactory implements 
javax.naming.spi.InitialContextFactory {
 
+    private static Context ejbContext;
+
     public Context getInitialContext(Hashtable env) throws 
javax.naming.NamingException {
         if (!org.apache.openejb.OpenEJB.isInitialized()) {
             initializeOpenEJB(env);
         }
 
-
         String user = (String) env.get(Context.SECURITY_PRINCIPAL);
         String pass = (String) env.get(Context.SECURITY_CREDENTIALS);
+        String realmName = (String) 
env.get("openejb.authentication.realmName");
 
         if (user != null && pass != null){
             try {
                 SecurityService securityService = 
SystemInstance.get().getComponent(SecurityService.class);
-                Object identity = securityService.login(user, pass);
+                Object identity = null;
+                if (realmName == null) {
+                    identity = securityService.login(user, pass);
+                } else {
+                    identity = securityService.login(realmName, user, pass);
+                }
                 securityService.associate(identity);
             } catch (LoginException e) {
                 throw (AuthenticationException) new 
AuthenticationException("User could not be authenticated: "+user).initCause(e);
             }
         }
-        ContainerSystem containerSystem = 
SystemInstance.get().getComponent(ContainerSystem.class);
-        Context context = containerSystem.getJNDIContext();
-        context = (Context) context.lookup("java:openejb/ejb");
-        return context;
+
+        if (ejbContext == null){
+            ContainerSystem containerSystem = 
SystemInstance.get().getComponent(ContainerSystem.class);
+            Context context = containerSystem.getJNDIContext();
+            context = (Context) context.lookup("java:openejb/ejb");
+            ejbContext = context;
+        }
+
+        return ejbContext;
 
     }
 


Reply via email to