-2

I am getting this exception and I don't know what else to check, as everything I have tried was useless...

The exception is:

2014-05-20 16:05:25,284 WARN  [20812305@qtp-19256634-0 CheckingObjectOutputStream] Wasn't possible to check the object 'class de.mycompany.study.core.data.base.User_$$_javassist_38' possible due an problematic implementation of equals method
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164) ~[hibernate-core-4.2.4.Final.jar:4.2.4.Final]
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285) ~[hibernate-core-4.2.4.Final.jar:4.2.4.Final]
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) ~[hibernate-core-4.2.4.Final.jar:4.2.4.Final]
    at de.mycompany.study.core.data.base.User_$$_javassist_38.equals(Nutzer_$$_javassist_38.java) ~[study-core-1.1.0.jar:?]
    at java.util.Vector.indexOf(Vector.java:404) ~[?:1.7.0_09]
    at java.util.Vector.contains(Vector.java:363) ~[?:1.7.0_09]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:341) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.checkFields(CheckingObjectOutputStream.java:645) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:569) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.checkFields(CheckingObjectOutputStream.java:645) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:569) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.checkFields(CheckingObjectOutputStream.java:645) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:569) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:432) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.checkFields(CheckingObjectOutputStream.java:645) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:569) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:432) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.checkFields(CheckingObjectOutputStream.java:645) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:569) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:432) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.checkFields(CheckingObjectOutputStream.java:645) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:569) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.writeObjectOverride(CheckingObjectOutputStream.java:713) [wicket-core-6.9.0.jar:6.9.0]
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:342) [?:1.7.0_09]
    at org.apache.wicket.serialize.java.JavaSerializer$SerializationCheckerObjectOutputStream.writeObjectOverride(JavaSerializer.java:268) [wicket-core-6.9.0.jar:6.9.0]
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:342) [?:1.7.0_09]
    at org.apache.wicket.serialize.java.JavaSerializer.serialize(JavaSerializer.java:78) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.pageStore.DefaultPageStore.serializePage(DefaultPageStore.java:376) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.pageStore.DefaultPageStore.storePage(DefaultPageStore.java:150) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.page.PageStoreManager$PersistentRequestAdapter.storeTouchedPages(PageStoreManager.java:384) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.page.RequestAdapter.commitRequest(RequestAdapter.java:181) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.page.AbstractPageManager.commitRequest(AbstractPageManager.java:98) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.page.PageManagerDecorator.commitRequest(PageManagerDecorator.java:73) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.page.PageAccessSynchronizer$2.commitRequest(PageAccessSynchronizer.java:281) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.Application$2.onDetach(Application.java:1628) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.request.cycle.RequestCycleListenerCollection$3.notify(RequestCycleListenerCollection.java:105) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.request.cycle.RequestCycleListenerCollection$3.notify(RequestCycleListenerCollection.java:101) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.util.listener.ListenerCollection$1.notify(ListenerCollection.java:120) [wicket-util-6.9.0.jar:6.9.0]
    at org.apache.wicket.util.listener.ListenerCollection.reversedNotify(ListenerCollection.java:144) [wicket-util-6.9.0.jar:6.9.0]
    at org.apache.wicket.util.listener.ListenerCollection.reversedNotifyIgnoringExceptions(ListenerCollection.java:113) [wicket-util-6.9.0.jar:6.9.0]
    at org.apache.wicket.request.cycle.RequestCycleListenerCollection.onDetach(RequestCycleListenerCollection.java:100) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.request.cycle.RequestCycle.onDetach(RequestCycle.java:640) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.request.cycle.RequestCycle.detach(RequestCycle.java:589) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) [wicket-core-6.9.0.jar:6.9.0]
    at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137) [wicket-core-6.9.0.jar:6.9.0]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [servlet-api-2.5-20081211.jar:?]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) [servlet-api-2.5-20081211.jar:?]
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1148) [jetty-6.1.15.jar:6.1.15]
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:180) [spring-orm-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-3.2.3.RELEASE.jar:3.2.3.RELEASE]
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) [jetty-6.1.15.jar:6.1.15]
    at org.apache.logging.log4j.core.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:66) [log4j-core-2.0-beta9.jar:2.0-beta9]
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:378) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.Server.handle(Server.java:324) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) [jetty-6.1.15.jar:6.1.15]
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520) [jetty-util-6.1.15.jar:6.1.15]

At first I thought it was some problem with Hibernate proxies, but then the same exception is thrown for:

2014-05-20 16:05:25,300 WARN  [20812305@qtp-19256634-0 CheckingObjectOutputStream] Wasn't possible to check the object 'class org.hibernate.collection.internal.PersistentSet' possible due an problematic implementation of equals method
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: de.mycompany.study.core.data.base.User.roles, could not initialize proxy - no Session

Well, maybe it's the same and $$_javassist_38 is the proxy for the "roles" collection.

Any ideas?

Edit: This exception is only thrown at a certain point in the application, doing very similar things as the ones that are made when it is being thrown doesn't throw an exception...

Edit 2: Here's the relevant code:

    @Entity(name = "user")
    @Audited
    public class User extends DataObjectAudit {

        private static final long serialVersionUID = 1L;

        private Center center = null;
        private Set<UserProjectCenterRole> roles = new HashSet<UserProjectCenterRole>();
        private Boolean active = null;
        /* other properties */

        public User() {
            super();
        }

        @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, orphanRemoval = true)
        @Cascade(value = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.DELETE, CascadeType.SAVE_UPDATE })
        @Filters({ @Filter(name = "deletedFilter", condition = "deleted <> :deletedParam") })
        @NotAudited
        public Set<UserProjectCenterRole> getRoles() {
            return roles;
        }

        @ManyToOne(optional = true, fetch = FetchType.LAZY)
        @NotAudited
        public Center getCenter() {
            return center;
        }

        @Basic
        public Boolean getActive() {
            return active;
        }
}

    @MappedSuperclass
    @FilterDef(name = "deletedFilter", parameters = {@ParamDef(name = "deletedParam", type = "boolean")})
    @Filters( { @Filter(name = "deletedFilter", condition = "deleted <> :deletedParam") })
    public abstract class DataObjectAudit extends DataObjectPrimaryKey implements IAuditableObject {

    private static final long serialVersionUID = 1L;

    @DisableTracking
    private User createdBy;
    @DisableTracking
    private User editedBy;

    public DataObjectAudit() {
    }

    @ManyToOne(optional = true, fetch = FetchType.LAZY)
    @JoinColumn(name = "created_by")
    @Index(name = "created_by")
    @NotAudited
    @Override
    public User getCreatedBy() {
        return createdBy;
    }

    @ManyToOne(optional = true, fetch = FetchType.LAZY)
    @JoinColumn(name = "edited_by")
    @NotAudited 
    @Override
    public User getEditedBy() {
        return editedBy;
    }
}

@MappedSuperclass
public abstract class DataObjectPrimaryKey extends DataObject implements Serializable{

    private static final long serialVersionUID = 1L;

    private Long id = null;

    @Id
    @GeneratedValue
    @Basic
    public Long getId() {
        return id;
    }

    @Override
    @Lazy
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!getUnlazyClassName(getClass()).equals(getUnlazyClassName(obj.getClass()))) {
            return false;
        }
        DataObjectPrimaryKey other = (DataObjectPrimaryKey) obj;
        if ((getId() == null) && (other.getId() != null)) {
            return false;
        } else if ((getId() != null) || (other.getId() == null)) {
            return false;
        } else if ((getId() == null) && (other.getId() == null)) {
            return super.equals(obj);
        } else { 
            return getId().equals(other.getId());
        }
    }

    @Override
    @Lazy
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = (prime * result) + ((getId() == null) ? super.hashCode() : getId().hashCode());
        return result;
    }

    private static String getUnlazyClassName(Class<?> clazz) {
        String className = clazz.getName();
        if (className.contains("_$$")) {
            className = className.substring(0, className.indexOf("_$$"));
        }

        return className;
    }
}
diminuta
  • 1,397
  • 7
  • 30
  • 52
  • Can you show us the user class especially the equals Method? – Jens May 20 '14 at 14:20
  • Take a look to [that Thread](http://stackoverflow.com/questions/21574236/org-hibernate-lazyinitializationexception-could-not-initialize-proxy-no-sess). maybe the same problem. – Jens May 20 '14 at 16:13

2 Answers2

1

Some things to look at:

1) Is equals consistently implemented according to javadoc?

2) did you implement hashcode() consistent with your equals?

Thom
  • 11,254
  • 22
  • 91
  • 152
1

In the end I have found the cause for the exception... and it has nothing to do with any of these 3 classes...

It was a class that didn't implement Serializable and was being used as a class property in a serializable class...

What I don't get is why the error didn't point at the actual problematic class...

diminuta
  • 1,397
  • 7
  • 30
  • 52