Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-11991

Applications that extend certain Hibernate classes should be updated to use type SharedSessionContractImplementor instead of SessionImplementor

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 17.0.0.Final
    • None
    • JPA / Hibernate
    • None

    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:

      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
      

      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:

       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];
          }
      }
      

      Attachments

        1. afterchange.zip
          498 kB
        2. beforechange.zip
          500 kB

        Issue Links

          Activity

            People

              smarlow1@redhat.com Scott Marlow
              smarlow1@redhat.com Scott Marlow
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: