You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by "Woonsan Ko (JIRA)" <je...@portals.apache.org> on 2013/07/16 21:54:48 UTC

[jira] [Comment Edited] (JS2-1284) ClassCastException in EhCacheDistributedElementImpl

    [ https://issues.apache.org/jira/browse/JS2-1284?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13709939#comment-13709939 ] 

Woonsan Ko edited comment on JS2-1284 at 7/16/13 7:54 PM:
----------------------------------------------------------

I don't know what is the cause, but there's a very suspicious code in EhCacheDistributedImpl.java:

- The member variable, 'refList', is supposed to keep a map keyed by EhCache key and valued by object, the type of which is 'EhCacheDistributedElementImpl' (See EhCacheDistributedImpl#put() method)

- However, the following code looks problematic:

	public void notifyElement( Ehcache cache, boolean local,Element arg1, int action)
	{
            // <SNIP>
		try
		{
            // <SNIP>

				if (action < 0)
					refList.remove(arg1.getKey());
				else if (action == CacheElement.ActionAdded)
					refList.put(arg1.getKey(), arg1);                          // <----- it gives Element object instead of EhCacheDistributedElementImpl!
				e.notifyChange(action);
	            notifyListeners(local, action, arg1.getKey(), arg1.getObjectValue());
			}
			else
			{
	            notifyListeners(local, action, arg1.getKey(), null);
			}
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}


I think the 'refList.put(arg1.getKey(), arg1);' line caused the problem, which should have put an EhCacheDistributedElementImpl instance instead of the raw ehcache Element instance.

                
      was (Author: woon_san):
    I don't know what is the cause, but there's a very suspicious code in EhCacheDistributedElementImpl.java:

- The member variable, 'refList', is supposed to keep a map keyed by EhCache key and valued by object, the type of which is 'EhCacheDistributedElementImpl' (See EhCacheDistributedElementImpl#put() method)

- However, the following code looks problematic:

	public void notifyElement( Ehcache cache, boolean local,Element arg1, int action)
	{
            // <SNIP>
		try
		{
            // <SNIP>

				if (action < 0)
					refList.remove(arg1.getKey());
				else if (action == CacheElement.ActionAdded)
					refList.put(arg1.getKey(), arg1);                          // <----- it gives Element object instead of EhCacheDistributedElementImpl!
				e.notifyChange(action);
	            notifyListeners(local, action, arg1.getKey(), arg1.getObjectValue());
			}
			else
			{
	            notifyListeners(local, action, arg1.getKey(), null);
			}
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}


I think the 'refList.put(arg1.getKey(), arg1);' line caused the problem, which should have put an EhCacheDistributedElementImpl instanced instead of the raw ehcache Element instance.

                  
> ClassCastException in EhCacheDistributedElementImpl
> ---------------------------------------------------
>
>                 Key: JS2-1284
>                 URL: https://issues.apache.org/jira/browse/JS2-1284
>             Project: Jetspeed 2
>          Issue Type: Bug
>            Reporter: Woonsan Ko
>
> While testing, I noticed the following error log in the console:
> --------------------------------------------------------------------------------
> java.lang.ClassCastException: net.sf.ehcache.Element cannot be cast to org.apache.jetspeed.cache.impl.EhCacheDistributedElementImpl
> 	at org.apache.jetspeed.cache.impl.EhCacheDistributedImpl.notifyElement(EhCacheDistributedImpl.java:241)
> 	at org.apache.jetspeed.cache.impl.EhCacheDistributedImpl.notifyElementPut(EhCacheDistributedImpl.java:275)
> 	at net.sf.ehcache.event.RegisteredEventListeners.notifyElementPut(RegisteredEventListeners.java:95)
> 	at net.sf.ehcache.Cache.put(Cache.java:866)
> 	at net.sf.ehcache.Cache.put(Cache.java:796)
> 	at org.apache.jetspeed.cache.impl.EhCacheDistributedImpl.put(EhCacheDistributedImpl.java:88)
> 	at org.apache.jetspeed.components.portletpreferences.PortletPreferencesServiceImpl.retrieveDefaultPreferences(PortletPreferencesServiceImpl.java:682)
> 	at org.apache.jetspeed.components.portletpreferences.PortletPreferencesServiceImpl.getDefaultPreferences(PortletPreferencesServiceImpl.java:135)
> 	at sun.reflect.GeneratedMethodAccessor122.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> 	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> 	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> 	at com.sun.proxy.$Proxy5.getDefaultPreferences(Unknown Source)
> 	at org.apache.pluto.container.impl.PortletPreferencesImpl.<init>(PortletPreferencesImpl.java:103)
> 	at org.apache.pluto.container.impl.PortletRequestImpl.getPreferences(PortletRequestImpl.java:459)
> 	at com.onehippo.jetspeed.portlets.FileContentPortlet.doView(FileContentPortlet.java:32)
> 	at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:348)
> 	at javax.portlet.GenericPortlet.render(GenericPortlet.java:253)
> 	at org.apache.jetspeed.portlet.PortletObjectProxy.proxyRender(PortletObjectProxy.java:280)
> 	at org.apache.jetspeed.portlet.PortletObjectProxy.invoke(PortletObjectProxy.java:172)
> 	at com.sun.proxy.$Proxy64.render(Unknown Source)
> 	at org.apache.jetspeed.factory.JetspeedPortletInstance.render(JetspeedPortletInstance.java:117)
> 	at org.apache.jetspeed.container.services.JetspeedFilterChain.doFilter(JetspeedFilterChain.java:142)
> 	at org.apache.jetspeed.container.services.JetspeedFilterChain.processFilter(JetspeedFilterChain.java:92)
> 	at org.apache.jetspeed.container.services.JetspeedFilterManager.processFilter(JetspeedFilterManager.java:112)
> 	at org.apache.jetspeed.container.JetspeedContainerServlet.doGet(JetspeedContainerServlet.java:290)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
> 	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
> 	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
> 	at org.apache.jetspeed.container.invoker.ServletPortletInvoker.invoke(ServletPortletInvoker.java:165)
> 	at org.apache.jetspeed.container.invoker.JetspeedPortletInvokerService.render(JetspeedPortletInvokerService.java:127)
> 	at org.apache.pluto.container.impl.PortletContainerImpl.doRender(PortletContainerImpl.java:157)
> 	at org.apache.jetspeed.container.JetspeedPortletContainerWrapper.doRender(JetspeedPortletContainerWrapper.java:69)
> 	at org.apache.jetspeed.aggregator.impl.RenderingJobImpl.executeInternal(RenderingJobImpl.java:245)
> 	at org.apache.jetspeed.aggregator.impl.RenderingJobImpl.access$000(RenderingJobImpl.java:57)
> 	at org.apache.jetspeed.aggregator.impl.RenderingJobImpl$1.run(RenderingJobImpl.java:206)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at javax.security.auth.Subject.doAsPrivileged(Subject.java:454)
> 	at org.apache.jetspeed.security.JSSubject.doAsPrivileged(JSSubject.java:187)
> 	at org.apache.jetspeed.aggregator.impl.RenderingJobImpl.execute(RenderingJobImpl.java:200)
> 	at org.apache.jetspeed.util.ServletRequestCleanupService.executeNestedRenderJob(ServletRequestCleanupService.java:79)
> 	at org.apache.jetspeed.aggregator.impl.RenderingJobImpl.run(RenderingJobImpl.java:154)
> 	at org.apache.jetspeed.aggregator.impl.WorkerImpl.run(WorkerImpl.java:173)
> --------------------------------------------------------------------------------

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org