Hi,

On Wed, Apr 18, 2018 at 11:10 AM, tomask79 <tomas.klou...@embedit.cz> wrote:

> Hi guys,
>
> this is the continuation of
>
> http://apache-wicket.1842946.n4.nabble.com/SpringBean-
> inside-WebSession-td4680162.html
>
> We have found the root cause:
>
> Is somehow possible to replace LazyInitProxyFactory.ProxyReplacement with
> custom implementation?
>
> Why I need that? I need following code tweak:
>
> static class ProxyReplacement implements IClusterable {
>         private static final long serialVersionUID = 1L;
>         private final IProxyTargetLocator locator;
>         private final String type;
>
>         public ProxyReplacement(String type, IProxyTargetLocator locator) {
>             this.type = type;
>             this.locator = locator;
>         }
>
>         private Object readResolve() throws ObjectStreamException {
>             Class<?> clazz = WicketObjects.resolveClass(this.type);
>             if (clazz == null) {
>                 clazz = Class.forName(type, false,
> this.getClass().getClassLoader());
>                 if (clazz == null) {
>                      ClassNotFoundException cause = new
> ClassNotFoundException("Could not resolve type ["
>                      + this.type + "] with the currently configured
>                       org.apache.wicket.application.IClassResolver");
>                        throw new WicketRuntimeException(cause);
>                }
>             } else {
>                 return LazyInitProxyFactory.createProxy(clazz,
> this.locator);
>             }
>         }
>     }
>

Here it is not very clear what exactly is the change. One has to diff it
agaisnt the original code to see what you have added/removed.


>
> Reason:
>
> WicketObject.resolveClass is incorrect:
>
> public static <T> Class<T> resolveClass(final String className)
>         {
>                 Class<T> resolved = null;
>                 try
>                 {
>                         if (Application.exists())
>                         {
>                                 resolved = (Class<T>)Application.get()
>                                         .getApplicationSettings()
>                                         .getClassResolver()
>                                         .resolveClass(className);
>                         }
>
>                         if (resolved == null)
>                         {
>                                 resolved = (Class<T>)Class.forName(className,
> false,
> Thread.currentThread()
>                                         .getContextClassLoader());
>                         }
>                 }
>                 catch (ClassNotFoundException cnfx)
>                 {
>                         log.warn("Could not resolve class [" + className +
> "]", cnfx);
>                 }
>                 return resolved;
>         }
> s
> Thread.currentThread().getContextClassLoader() when replicating session at
> WebLogic this sometimes returns non-application classloader which ends with
> mentioned ClassNotFoundException.....Also "if (resolved == null)" part is
> useless if first part throws Exception....
>
> We use Wicket 6.21.
>
> 1) Either is possible to replace LazyInitProxyFactory with custom
> implementation....
>

You can use custom IClassResolver, no ?
One that does whatever WebLogic needs to resolve the class and don't break
or return null.


> 2) Or can you please put my suggested change of
> ProxyReplacement.readResolve
> into some patched version of 6.21?
>

patched version of 6.21 sounds like a local build that you can do.
We can release 6.30 and you will have to upgrade.


>
>
>
>
>
>
>
> --
> Sent from: http://apache-wicket.1842946.n4.nabble.com/Users-forum-
> f1842947.html
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to