1

My configuration:

  1. AS: Weblogic 12 c
  2. Java 8
  3. Hibernate Core 5.0.5.Final
  4. Hibernate Envers 5.0.5.Final

I'm using the basic configuration for Hibernate Envers, and I can see my audit tables being populated properly and also my "revinfo" table when insert/update/delete.

The problem is when I'm consulting some Entity/Revision, the error occurs.

My query:

    @PersistenceContext(unitName = "pu")
    protected EntityManager em;


    @SuppressWarnings("rawtypes")
    public List<Object[]> list(Class classe){
        AuditQuery query = getAuditReader().createQuery()
                .forRevisionsOfEntity(classe, false, true);

//Error occurs here:
        Number revision = (Number) query
                .getSingleResult();

        System.out.println(revision);

        List<Object[]> list = null;
        return list;
    }

    private AuditReader getAuditReader() {
        AuditReader reader = AuditReaderFactory.get(em);
        return reader;
    }

Error:

javax.ejb.EJBException: EJB Exception: : org.hibernate.HibernateException: HHH000142: Javassist Enhancement failed: org.hibernate.envers.DefaultRevisionEntity
    at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:130)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:666)
    at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:4461)
    at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:336)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:257)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:137)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1129)
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1022)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:632)
    at org.hibernate.type.EntityType.resolve(EntityType.java:424)
    at org.hibernate.type.ComponentType.resolve(ComponentType.java:687)
    at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:848)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:714)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
    at org.hibernate.loader.Loader.doQuery(Loader.java:930)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)
    at org.hibernate.loader.Loader.doList(Loader.java:2611)
    at org.hibernate.loader.Loader.doList(Loader.java:2594)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2423)
    at org.hibernate.loader.Loader.list(Loader.java:2418)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)
Caused by: java.lang.ClassCastException: org.hibernate.envers.DefaultRevisionEntity_$$_javassist_153 cannot be cast to javassist.util.proxy.Proxy
    at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:123)
    ... 129 more
    at weblogic.ejb.container.internal.EJBRuntimeUtils.throwEJBException(EJBRuntimeUtils.java:88)
    at weblogic.ejb.container.internal.BaseLocalObject.handleSystemException(BaseLocalObject.java:503)
    at weblogic.ejb.container.internal.BaseLocalObject.handleSystemException(BaseLocalObject.java:446)
    at weblogic.ejb.container.internal.BaseLocalObject.postInvoke1(BaseLocalObject.java:251)
    at weblogic.ejb.container.internal.BaseLocalObject.__WL_postInvokeTxRetry(BaseLocalObject.java:204)
    Truncated. see log file for complete stacktrace
Caused By: org.hibernate.HibernateException: HHH000142: Javassist Enhancement failed: org.hibernate.envers.DefaultRevisionEntity
    at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:130)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:666)
    at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:4461)
    at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:336)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:257)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassCastException: org.hibernate.envers.DefaultRevisionEntity_$$_javassist_153 cannot be cast to javassist.util.proxy.Proxy
    at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:123)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:666)
    at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:4461)
    at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:336)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:257)
    Truncated. see log file for complete stacktrace

Edit: . I can see in Weblogic CAT that there are several lib conflicts (app lib vs weblogic lib), including javassist.

So I added this to the weblogic-application.xml in my ear:

<prefer-application-packages>
    <package-name>antlr.*</package-name>
    <package-name>javassist.*</package-name>
</prefer-application-packages>

And now I'm getting a new different exception, but now this occours when Weblogic is starting:

weblogic.management.DeploymentException: java.lang.ClassCastException: org.jboss.weld.security.Principal$1127466021$Proxy$_$$_Weld$Proxy$ cannot be cast to javassist.util.proxy.ProxyObject
    at weblogic.application.internal.BaseDeployment.throwAppException(BaseDeployment.java:123)
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:260)
    at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:61)
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassCastException: org.jboss.weld.security.Principal$1127466021$Proxy$_$$_Weld$Proxy$ cannot be cast to javassist.util.proxy.ProxyObject
    at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:249)
    at org.jboss.weld.bean.builtin.ee.AbstractEEBean.<init>(AbstractEEBean.java:43)
    at org.jboss.weld.bean.builtin.ee.PrincipalBean.<init>(PrincipalBean.java:52)
    at org.jboss.weld.bootstrap.BeanDeployment.createBeans(BeanDeployment.java:193)
    at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:349)
    Truncated. see log file for complete stacktrace

Any idead of what's happening?

1
  • Were you able to resolve this? If yes, can you please post your answer? Commented Nov 11, 2016 at 14:07

1 Answer 1

1

I would first make sure you have the proper version of Javassist on the classpath and that you don't happen to accidentally have multiple versions. I've seen similar issues in the past when I had conflicting versions.

For Hibernate 5.0.5, it would be javassist-3.18.1-GA.jar.

Here is an example of my audit history repository implementation that returns a list of entity revisions ordered by revision number for a given entity type and entity identifier as reference.

public class AuditHistoryRepository<T, ID extends Serializable> {

  @PersistenceContext 
  private EntityManager entityManager;
  private Class<T> entityClazz;

  public List<T> getEntityRevisionsById(ID id) {
    List<T> results = new ArrayList<>();
    // read audit history
    AuditReader reader = AuditReaderFactory.get(entityManager);
    AuditQuery query = reader.createQuery()
      .forRevisionsOfEntity(entityClazz, false, true)
      .add(AuditEntity.id().eq(id))
      .addOrder(AuditEntity.revisionNumber().asc());
    // get results
    for(Object row : query.getResultList()) {
      if(row instanceof Object[]) {
        Object[] array = (Object[])row;
        T entity = (T) array[0];
        results.add(entity);
      }
    }
    return results;
  }
}
Sign up to request clarification or add additional context in comments.

2 Comments

Hi, thanks for your support. I have edited my post, now I'm with another exception. Don't know if it's a progress...
Still with the same problem... Can Anyone to help me?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.