3

I am using Shiro in a JSF 2 (maven) project running on Glassfish. All related dependencies (shiro-ehcache-1.2.2.jar, ehcache-core-2.5.0) are added. My project compiles and runs smoothly but as soon as I mark a ManagedBean with @ViewScoped annotation, I get this irritating ClassNotFound Exception:

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception java.lang.ClassNotFoundException: void
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1509) 
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:247) 
    at net.sf.ehcache.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:129) 
    at net.sf.ehcache.util.PreferTCCLObjectInputStream.resolveClass(PreferTCCLObjectInputStream.java:44) 
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495) 
    at java.io.ObjectInputStream.readClass(ObjectInputStream.java:1461) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1311) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at java.util.HashMap.readObject(HashMap.java:1030) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at org.apache.shiro.session.mgt.SimpleSession.readObject(SimpleSession.java:500) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946) 
    at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:479) 
    at net.sf.ehcache.Element.readObject(Element.java:800) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
    at net.sf.ehcache.store.disk.DiskStorageFactory.read(DiskStorageFactory.java:378) 
    at net.sf.ehcache.store.disk.DiskStorageFactory.retrieve(DiskStorageFactory.java:960) 
    at net.sf.ehcache.store.disk.Segment.decodeHit(Segment.java:178) 
    at net.sf.ehcache.store.disk.Segment.get(Segment.java:216) 
    at net.sf.ehcache.store.disk.DiskStore.get(DiskStore.java:504) 
    at net.sf.ehcache.store.disk.DiskStore.getQuiet(DiskStore.java:511) 
    at net.sf.ehcache.store.FrontEndCacheTier.getQuiet(FrontEndCacheTier.java:196) 
    at net.sf.ehcache.Cache.searchInStoreWithoutStats(Cache.java:2101) 
    at net.sf.ehcache.Cache.get(Cache.java:1630) 
    at org.apache.shiro.cache.ehcache.EhCache.get(EhCache.java:73) 
    at org.apache.shiro.session.mgt.eis.CachingSessionDAO.getCachedSession(CachingSessionDAO.java:217) 
    at org.apache.shiro.session.mgt.eis.CachingSessionDAO.getCachedSession(CachingSessionDAO.java:202) 
    at org.apache.shiro.session.mgt.eis.CachingSessionDAO.readSession(CachingSessionDAO.java:259) 
    at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236) 
    at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222) 
    at org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118) 
    at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:108) 
    at org.apache.shiro.session.mgt.AbstractNativeSessionManager.getSession(AbstractNativeSessionManager.java:100) 
    at org.apache.shiro.mgt.SessionsSecurityManager.getSession(SessionsSecurityManager.java:125) 
    at org.apache.shiro.mgt.DefaultSecurityManager.resolveContextSession(DefaultSecurityManager.java:456) 
    at org.apache.shiro.mgt.DefaultSecurityManager.resolveSession(DefaultSecurityManager.java:442) 
    at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:338) 
    at org.apache.shiro.subject.Subject$Builder.buildSubject(Subject.java:846) 
    at org.apache.shiro.web.subject.WebSubject$Builder.buildWebSubject(WebSubject.java:148) 
    at org.apache.shiro.web.servlet.AbstractShiroFilter.createSubject(AbstractShiroFilter.java:292) 
    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:359) 
    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:662) 

As the exception happens internally in shiro-ehcache classes and it says: "java.lang.ClassNotFoundException: void" I cannot infer, which class or jar is causing the trouble. It seems one of my beans cannot be serialized but which one? My question is:

How can we find offending classes in such a situation?

Edit: I have a navigation bean which is sessionscoped:

@ManagedBean
@SessionScoped
public class NavigationBean implements Serializable {
private static final long serialVersionUID = 2L;

@Inject
private transient Logger log;

private String page = "/subpages/admin_home.xhtml";

public NavigationBean() {
}

public String getPage() {
    return page;
}

public void setPage(String page) {
    this.page = page;

}


}

And another sessionscoped bean:

@ManagedBean
@SessionScoped
public class SettingsBean implements Serializable {

private static final long serialVersionUID = 1L;

@Inject
private transient Logger log;

private static final Locale Turkish = new Locale("tr");
private static final Locale English = Locale.ENGLISH;
private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
private static final Map<String,Object> countries;
static {
        countries = new LinkedHashMap<String,Object>();
        countries.put("English", English); //label, value
        countries.put("Türkçe", Turkish);
}

/**
 * Creates a new instance of SettingsBean
 */
public SettingsBean() {
    System.out.print("Settings bean constructed");
}

@PostConstruct
public void init(){
    log.debug ("Settings bean initialized");
}

public Locale getLocale() {
    return locale;
} 

public String getLanguage() {
    String lang = locale.getLanguage();
    if (lang.equals("en_US")){lang="en";}
    else if (lang.equals("tr_tr")){lang="tr";}
    return lang;
}

public void setLanguage(String language) {
    locale = new Locale(language);
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);

    //String Msg = Messages.getResourceBundleString("M","LanguageChanged");
    String Msg = Messages.getString("LanguageChanged");

    FacesMessage facesmsg = new FacesMessage(FacesMessage.SEVERITY_INFO, Msg, "");  
    FacesContext.getCurrentInstance().addMessage(null, facesmsg);
    log.debug(Msg + " : " + language);
}

public Map<String, Object> getCountriesInMap() {
        return countries;
}


//value change event listener
public void countryLocaleCodeChanged(ValueChangeEvent e){

    String newLocaleValue = e.getNewValue().toString();

    for (Map.Entry<String, Object> entry : countries.entrySet()) {

       if(entry.getValue().toString().equals(newLocaleValue)){
                            setLanguage(entry.getValue().toString());
      }
   }
}    

}

salihcenap
  • 1,927
  • 22
  • 25
  • Please provide any code where this error raises or probably a Facelets code related with the error. – Luiggi Mendoza Jul 17 '13 at 08:19
  • 1
    It looks like your view scoped bean is not serialized correctly. Have a look at it, maybe some fields (like injected services) should be marked as transient? – mrembisz Jul 17 '13 at 10:34
  • I have updated the question to add "probably related" facelets code.. – salihcenap Jul 18 '13 at 08:40
  • I think problem is related to the following question: http://stackoverflow.com/questions/7761622/ejb-in-viewscoped-managedbean-causes-java-io-notserializableexception It is about different classloaders.. I cannot find a way... – salihcenap Jul 19 '13 at 16:05

2 Answers2

2

You can use Jboss's tattle tale to introspect a project's lib folder and graphically map out the dependency tree. Using this tool, you can find out a class' dependencies. After downloading and unpacking the project, run thru the following steps to find out which class is breaking:

  1. From your command line, run the the tattletale jar. For example

    java -jar -Xmx512m tattletale.jar   <the path with your libraries> <the destination folder where you want the generated reports to be stored>
    
  2. In the output folder, you'll find a tree of folders and an index.html file. Open this file and select the depends on link.

  3. In the depends on page, you'll find all the classes in your libraries and a list of all the dependencies of each. A simple "find" operation will tell you which class is missing the class you've highlighted

kolossus
  • 20,559
  • 3
  • 52
  • 104
0

As @mrembisz pointed out I have checked my viewscoped beans. I was injecting a stateles bean into my viewscoped bean and although it was implementing "Serializable", probably one or more of its properties were not serializible. So I changed

@Inject
MyBean MB;

to

@Inject
private transient MyBean MB;

And I tought the "java.lang.ClassNotFoundException: void" went away.. But as I do not get that exception at first, it is still being thrown occasionally. I now get:

INFO: 2013-07-18 15:21:06,123 ERROR o.a.s.w.s.AbstractShiroFilter - session.touch() method invocation has failed.  Unable to updatethe corresponding session's last access time based on the incoming request.org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: java.lang.ClassNotFoundException: void

at org.apache.shiro.cache.ehcache.EhCache.put(EhCache.java:105) ~[shiro-ehcache-1.2.2.jar:1.2.2]
at org.apache.shiro.session.mgt.eis.CachingSessionDAO.cache(CachingSessionDAO.java:247) ~[shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.session.mgt.eis.CachingSessionDAO.cache(CachingSessionDAO.java:235) ~[shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.session.mgt.eis.CachingSessionDAO.update(CachingSessionDAO.java:280) ~[shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.session.mgt.DefaultSessionManager.onChange(DefaultSessionManager.java:212) ~[shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.session.mgt.AbstractNativeSessionManager.touch(AbstractNativeSessionManager.java:193) ~[shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.session.mgt.DelegatingSession.touch(DelegatingSession.java:120) ~[shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.session.ProxiedSession.touch(ProxiedSession.java:100) ~[shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.web.servlet.AbstractShiroFilter.updateSessionLastAccessTime(AbstractShiroFilter.java:315) [shiro-web-1.2.2.jar:1.2.2]
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:364) [shiro-web-1.2.2.jar:1.2.2]
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) [shiro-core-1.2.2.jar:1.2.2]
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) [shiro-web-1.2.2.jar:1.2.2]
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-1.2.2.jar:1.2.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) [web-core.jar:3.1.2.1-SNAPSHOT]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217) [web-core.jar:3.1.2.1-SNAPSHOT]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) [web-core.jar:3.1.2.1-SNAPSHOT]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) [web-core.jar:3.1.2.1-SNAPSHOT]
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) [web-core.jar:3.1.2.1-SNAPSHOT]
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) [web-core.jar:3.1.2.1-SNAPSHOT]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) [web-core.jar:3.1.2.1-SNAPSHOT]
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) [web-core.jar:3.1.2.1-SNAPSHOT]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) [web-core.jar:3.1.2.1-SNAPSHOT]
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) [kernel.jar:3.1.2.1-SNAPSHOT]
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) [kernel.jar:3.1.2.1-SNAPSHOT]
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) [grizzly-http.jar:1.9.50]
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) [grizzly-http.jar:1.9.50]
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) [grizzly-http.jar:1.9.50]
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) [grizzly-http.jar:1.9.50]
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) [grizzly-framework.jar:1.9.50]
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) [grizzly-framework.jar:1.9.50]
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) [grizzly-framework.jar:1.9.50]
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) [grizzly-http.jar:1.9.50]
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) [grizzly-framework.jar:1.9.50]
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) [grizzly-framework.jar:1.9.50]
at com.sun.grizzly.ContextTask.run(ContextTask.java:71) [grizzly-framework.jar:1.9.50]
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) [grizzly-utils.jar:1.9.50]
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) [grizzly-utils.jar:1.9.50]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_38]

Caused by: net.sf.ehcache.CacheException: java.lang.ClassNotFoundException: void
at net.sf.ehcache.store.disk.DiskStorageFactory.retrieve(DiskStorageFactory.java:890) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.store.disk.Segment.decode(Segment.java:172) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.store.disk.Segment.put(Segment.java:449) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.store.disk.DiskStore.put(DiskStore.java:438) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.store.FrontEndCacheTier.put(FrontEndCacheTier.java:267) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.Cache.putInternal(Cache.java:1455) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.Cache.put(Cache.java:1383) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.Cache.put(Cache.java:1348) ~[ehcache-core-2.6.6.jar:na]
at org.apache.shiro.cache.ehcache.EhCache.put(EhCache.java:102) ~[shiro-ehcache-1.2.2.jar:1.2.2]
... 39 common frames omitted


Caused by: java.lang.ClassNotFoundException: void
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1509) ~[war-util.jar:3.1.2.1-SNAPSHOT]
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359) ~[war-util.jar:3.1.2.1-SNAPSHOT]
at java.lang.Class.forName0(Native Method) ~[na:1.6.0_38]
at java.lang.Class.forName(Class.java:247) ~[na:1.6.0_38]
at net.sf.ehcache.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:129) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.util.PreferTCCLObjectInputStream.resolveClass(PreferTCCLObjectInputStream.java:44) ~[ehcache-core-2.6.6.jar:na]
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readClass(ObjectInputStream.java:1461) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1311) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_38]
at java.util.HashMap.readObject(HashMap.java:1030) ~[na:1.6.0_38]
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_38]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_38]
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_38]
at java.util.HashMap.readObject(HashMap.java:1030) ~[na:1.6.0_38]
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_38]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_38]
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_38]
at java.util.HashMap.readObject(HashMap.java:1030) ~[na:1.6.0_38]
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_38]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_38]
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_38]
at java.util.HashMap.readObject(HashMap.java:1030) ~[na:1.6.0_38]
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_38]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_38]
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_38]
at org.apache.shiro.session.mgt.SimpleSession.readObject(SimpleSession.java:500) ~[shiro-core-1.2.2.jar:1.2.2]
at sun.reflect.GeneratedMethodAccessor88.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_38]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_38]
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) ~[na:1.6.0_38]
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946) ~[na:1.6.0_38]
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:479) ~[na:1.6.0_38]
at net.sf.ehcache.Element.readObject(Element.java:844) ~[ehcache-core-2.6.6.jar:na]
at sun.reflect.GeneratedMethodAccessor87.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_38]
at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_38]
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) ~[na:1.6.0_38]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ~[na:1.6.0_38]
at net.sf.ehcache.store.disk.DiskStorageFactory.read(DiskStorageFactory.java:370) ~[ehcache-core-2.6.6.jar:na]
at net.sf.ehcache.store.disk.DiskStorageFactory.retrieve(DiskStorageFactory.java:886) ~[ehcache-core-2.6.6.jar:na]
... 47 common frames omitted
salihcenap
  • 1,927
  • 22
  • 25
  • 1
    This is not the right approach. Injected CDI/EJB instances are per definition serializable proxies which in turn delegate to the "current instance" in the desired scope (via `ThreadLocal` mechanisms similar to `FacesContext#getCurrentInstance()`). If you declare them `transient`, then the proxy instances are not serialized in the state and reappear as `null` after deserialization. If any JSF form action methods rely on them thereafter, then they'll throw NPEs in all colors. So, if you only use them during `@PostConstruct`, then this is harmless, but still, this is absolutely not the right way. – BalusC Jul 19 '13 at 16:20
  • @BalusC you nailed it! I now see why I should not mark CDI/EJB instances transient. Then what is the "right" way? I have to use ViewScoped or SessionScoped state beans and I want to have EJB's providing services to them. What is the legitimitate way? – salihcenap Jul 20 '13 at 08:14