deltaspike-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rudy De Busscher <rdebussc...@gmail.com>
Subject Re: [DISCUSS] specific code required for integration tests of Security impl module for WebLogic 12c
Date Fri, 10 Aug 2012 18:57:01 GMT
All,

For the moment, I don't commit my code as there are other code changes
tested which don't need Application Server specific code.

Some more info in the comments of JIRA ticket DELTASPIKE-261.

Regards
Rudy


On 6 August 2012 23:25, Gerhard Petracek <gerhard.petracek@gmail.com> wrote:

> hi rudy,
>
> @ #2:
> those parts are still on the todo-list for a 2nd refactoring (with the
> first refactoring we just merged the code of two code-bases).
> i would prefer [1] since it isn't a workaround.
>
> regards,
> gerhard
>
> [1]
>
> https://github.com/os890/DS_Discuss/commit/8c625c8e72524d657aeb77e9913287c60af6b62f
>
>
>
> 2012/8/6 Rudy De Busscher <rdebusscher@gmail.com>
>
> > Hi All,
> >
> > The integration tests on WebLogic 12C fails at the Security Impl Module.
> > There are 2 problems (see also DELTASPIKE-261 - Integration tests of
> > security impl module fails on Weblogic
> > 12c<https://issues.apache.org/jira/browse/DELTASPIKE-261>) :
> >
> > 1. ClassLoader issue
> > within the method
> >
> >
> *org.apache.deltaspike.security.impl.extension.SecurityExtension#getMetaDataStorage
> > *, the call *ClassUtils.getClassLoader(null);* doesn't results in the
> same
> > classLoader depending on the 'part' of the test. During deployment, you
> get
> > another one then during testing itself. This results in an empty
> > SecurityMetaDataStorage and the exception "*No matching authorizer found
> > for security binding type [@ ... *"
> >
> > <https://issues.apache.org/jira/browse/DELTASPIKE-261>2. beanManager
> issue
> > The *beanManager *supplied as parameter to the call
> >
> >
> *org.apache.deltaspike.security.impl.extension.SecurityExtension#processAnnotatedType
> > * doesn't have the registered beans. Since that beanManager is passed to
> > the *Authorizer*, the managed bean could not be retrieved in the method *
> >
> >
> org.apache.deltaspike.security.impl.extension.Authorizer#lazyInitTargetBean*.
> > It throws the exception *"Exception looking up authorizer method bean -
> no
> > beans found for method [ ..."*
> >
> >
> > I found solutions for both problems, but it requires some code specific
> for
> > wls12C (not dependent on wls12C dependencies but code that is only needed
> > and executed within wls12c) I know that is isn't very good but I can't
> see
> > any other solution to keep the integration tests running on WebLogic 12C.
> >
> > I no one raises a veto (-1) against the code, I'll commit it by the end
> of
> > the week.
> >
> > Any comments also appreciated of course.
> >
> > Regards
> > Rudy
> >
> > *1. Class Loader issue -> Try also the parent class loader to see If we
> > have an entry for that value.*
> >
> > ---
> >
> >
> a/deltaspike/modules/security/impl/src/main/java/org/apache/deltaspike/security/impl/extension/SecurityExtension.java
> > +++
> >
> >
> b/deltaspike/modules/security/impl/src/main/java/org/apache/deltaspike/security/impl/extension/SecurityExtension.java
> > @@ -62,6 +55,12 @@ public class SecurityExtension implements Extension,
> > Deactivatable
> >
> >          if (securityMetaDataStorage == null)
> >          {
> > +            securityMetaDataStorage =
> > tryParentClassLoaderOnWeblogic(classLoader, securityMetaDataStorage);
> > +
> > +        }
> > +
> > +        if (securityMetaDataStorage == null)
> > +        {
> >              securityMetaDataStorage = new SecurityMetaDataStorage();
> >              SECURITY_METADATA_STORAGE_MAPPING.put(classLoader,
> > securityMetaDataStorage);
> >          }
> > @@ -69,6 +68,19 @@ public class SecurityExtension implements Extension,
> > Deactivatable
> >          return securityMetaDataStorage;
> >      }
> >
> > +    private static SecurityMetaDataStorage
> > tryParentClassLoaderOnWeblogic(ClassLoader someClassLoader,
> > +                                           SecurityMetaDataStorage
> > someSecurityMetaDataStorage)
> > +    {
> > +        // Within Oracle WebLogic 12C, during deployment, we get another
> > classloader then during the execution
> > +        // of the application.
> > +        if
> (someClassLoader.getClass().getName().startsWith("weblogic."))
> > +        {
> > +
> > +            someSecurityMetaDataStorage =
> > SECURITY_METADATA_STORAGE_MAPPING.get(someClassLoader.getParent());
> > +        }
> > +        return someSecurityMetaDataStorage;
> > +    }
> > +
> >      public static void removeMetaDataStorage()
> >      {
> >          ClassLoader classLoader = ClassUtils.getClassLoader(null);
> >
> > *2. beanManager issue -> A solution is looking in the beanManager
> retrieved
> > from the JNDI. *
> >
> > ---
> >
> >
> a/deltaspike/modules/security/impl/src/main/java/org/apache/deltaspike/security/impl/extension/Authorizer.java
> > +++
> >
> >
> b/deltaspike/modules/security/impl/src/main/java/org/apache/deltaspike/security/impl/extension/Authorizer.java
> > @@ -133,9 +131,22 @@ class Authorizer
> >              }
> >              else if (beans.isEmpty())
> >              {
> > -                throw new IllegalStateException("Exception looking up
> > authorizer method bean - " +
> > +                // Try the BeanManager from JNDI. On WebLogic we have
> more
> > luck with that one
> > +                beans =
> >
> >
> BeanManagerProvider.getInstance().getBeanManager().getBeans(method.getDeclaringClass());
> > +                if (beans.size() == 1)
> > +                {
> > +                    boundAuthorizerBean = beans.iterator().next();
> > +                    // Keep the reference to the other BeanManager here
> > for further lookups.
> > +                    beanManager =
> > BeanManagerProvider.getInstance().getBeanManager();
> > +                }
> > +                else
> > +                {
> > +
> > +                    throw new IllegalStateException("Exception looking
> up
> > authorizer method bean - " +
> >                          "no beans found for method [" +
> > method.getDeclaringClass() + "." +
> >                          method.getName() + "]");
> > +                }
> > +
> >              }
> >              else if (beans.size() > 1)
> >              {
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message