[jboss-jira] [JBoss JIRA] (WFLY-11991) Applications that extend certain Hibernate classes should be updated to use type SharedSessionContractImplementor instead of SessionImplementor

Scott Marlow (Jira) issues at jboss.org
Wed May 29 16:06:00 EDT 2019


     [ https://issues.jboss.org/browse/WFLY-11991?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Scott Marlow updated WFLY-11991:
--------------------------------
    Description: 
The idea is to transform any class method parameter of type org.hibernate.engine.spi.SessionImplementor, in user application, to instead use type org.hibernate.engine.spi.SharedSessionContractImplementor.

The above is done for any application class that has any of the following Hibernate classes as its super class:
{code}
org.hibernate.usertype.UserType
org.hibernate.usertype.CompositeUserType
org.hibernate.usertype.UserCollectionType
org.hibernate.usertype.UserVersionType
org.hibernate.type.Type
org.hibernate.type.SingleColumnType
org.hibernate.type.AbstractStandardBasicType
org.hibernate.type.ProcedureParameterExtractionAware
org.hibernate.type.ProcedureParameterNamedBinder
org.hibernate.type.VersionType
org.hibernate.collection.spi.PersistentCollection
{code}

The code change is required to handle application classes like: [https://github.com/simkam/wildfly/compare/hibernate_transformer].  

The test case change is adding an internalNullSafeGet method that should also be transformed to use the SharedSessionContractImplementor type but was not, which led to an application failure with code: 

{code}
 public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
        return internalNullSafeGet(rs, names, session, owner);
    }

    private Object internalNullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
        internalSessionImplementorUsingMethod(session);
        session.isTransactionInProgress();
        int result = rs.getInt( names[0] );
        if ( rs.wasNull() ) return null;
        return State.values()[result];
    }
}
{code}


  was:
The idea is to transform any class method parameter of type org.hibernate.engine.spi.SessionImplementor, in user application, to instead use type org.hibernate.engine.spi.SharedSessionContractImplementor.

The above is done for any application class that has any of the following Hibernate classes as its super class:
{code}
org.hibernate.usertype.UserType
org.hibernate.usertype.CompositeUserType
org.hibernate.usertype.UserCollectionType
org.hibernate.usertype.UserVersionType
org.hibernate.type.Type
org.hibernate.type.SingleColumnType
org.hibernate.type.AbstractStandardBasicType
org.hibernate.type.ProcedureParameterExtractionAware
org.hibernate.type.ProcedureParameterNamedBinder
org.hibernate.type.VersionType
org.hibernate.collection.spi.PersistentCollection
{code}

The test case (change) is for this enhancement is [https://github.com/simkam/wildfly/compare/hibernate_transformer].  

The test case change is adding an internalNullSafeGet method that should also be transformed to use the SharedSessionContractImplementor type but was not, which led to an application failure with code: 

{code}
 public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
        return internalNullSafeGet(rs, names, session, owner);
    }

    private Object internalNullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
        internalSessionImplementorUsingMethod(session);
        session.isTransactionInProgress();
        int result = rs.getInt( names[0] );
        if ( rs.wasNull() ) return null;
        return State.values()[result];
    }
}
{code}




> Applications that extend certain Hibernate classes should be updated to use type SharedSessionContractImplementor instead of SessionImplementor
> -----------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: WFLY-11991
>                 URL: https://issues.jboss.org/browse/WFLY-11991
>             Project: WildFly
>          Issue Type: Bug
>          Components: JPA / Hibernate
>            Reporter: Scott Marlow
>            Assignee: Scott Marlow
>            Priority: Major
>             Fix For: 17.0.0.Final
>
>         Attachments: afterchange.zip, beforechange.zip
>
>
> The idea is to transform any class method parameter of type org.hibernate.engine.spi.SessionImplementor, in user application, to instead use type org.hibernate.engine.spi.SharedSessionContractImplementor.
> The above is done for any application class that has any of the following Hibernate classes as its super class:
> {code}
> org.hibernate.usertype.UserType
> org.hibernate.usertype.CompositeUserType
> org.hibernate.usertype.UserCollectionType
> org.hibernate.usertype.UserVersionType
> org.hibernate.type.Type
> org.hibernate.type.SingleColumnType
> org.hibernate.type.AbstractStandardBasicType
> org.hibernate.type.ProcedureParameterExtractionAware
> org.hibernate.type.ProcedureParameterNamedBinder
> org.hibernate.type.VersionType
> org.hibernate.collection.spi.PersistentCollection
> {code}
> The code change is required to handle application classes like: [https://github.com/simkam/wildfly/compare/hibernate_transformer].  
> The test case change is adding an internalNullSafeGet method that should also be transformed to use the SharedSessionContractImplementor type but was not, which led to an application failure with code: 
> {code}
>  public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
>         return internalNullSafeGet(rs, names, session, owner);
>     }
>     private Object internalNullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
>         internalSessionImplementorUsingMethod(session);
>         session.isTransactionInProgress();
>         int result = rs.getInt( names[0] );
>         if ( rs.wasNull() ) return null;
>         return State.values()[result];
>     }
> }
> {code}



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list