[Hibernate-JIRA] Created: (HHH-6284) Hibernate Core 3.6.4 Conflict org.hibernate.type.WrappedMaterializedBlobType
by Aloke (JIRA)
Hibernate Core 3.6.4 Conflict org.hibernate.type.WrappedMaterializedBlobType
-----------------------------------------------------------------------------
Key: HHH-6284
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6284
Project: Hibernate Core
Issue Type: Bug
Components: core
Affects Versions: 3.6.4
Environment: Solaris x86, Tomcat, Apache, Hibernate-Core 3.6.4, Hibernate-Annotation 3.5.6-Final
Reporter: Aloke
While upgrading Hibernate from 3.5.6-Final to 3.6.4.Final I got an java.lang.Verifier Exception on org.hibernate.type.WrappedMaterializedBlobType. I executed my service using SOAPUI
It seems there is a conflict between Hibernate-Core and Hibernate-Annotations jar file. The conflict is on the package.Class org.hibernate.type.WrappedMaterializedBlobType.class
I think the line it fails is on
public static final WrappedMaterializedBlobType INSTANCE = new WrappedMaterializedBlobType();
with a message
"</pre></p><p><b>root cause</b> <pre>java.lang.VerifyError: class org.hibernate.type.WrappedMaterializedBlobType overrides final method getReturnedClass.()Ljava/lang/Class;"
To reproduce do the following:
1. Use Hibernate-Core 3.6.4.Final with Hibernate-Annotation-3.5.6-Final.
2. Call a web service using SOAPUI.
Note: Its Hibernate-Annotations and not Hibernate-Commons-Annotations
It looks like classes in Hibernate-Annotations (org.hibernate.type) have been deprecated:
AbstractLobType.class
ByteArrayBlobType.class
ByteArrayBlobType.class
PrimitiveByteArrayBlobType.class
where as WrappedMaterializedBlobType.class is not.
I have currently removed Hibernate-Annotation.jar to avoid this issue.
Thanks.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 10 months
[Hibernate-JIRA] Created: (HHH-6003) Envers fails when an entity has dynamic-component
by Rajeev (JIRA)
Envers fails when an entity has dynamic-component
-------------------------------------------------
Key: HHH-6003
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6003
Project: Hibernate Core
Issue Type: Bug
Components: envers
Affects Versions: 3.6.0
Environment: Windows 7, java version "1.6.0_18" (32 bit), hibernate-core-3.6.0.Final, mysql-5.1.45-win32
Reporter: Rajeev
Attachments: myproject.tar
hi,
Am working with hibernate version 3.6.0.Final. Envers fails during initialization when an entity has dynamic-component.
Hibernate.cfg.xml -
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/company?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
</session-factory>
</hibernate-configuration>
There is only 1 entity in this test case -
Employee.java:
import ...
@Audited
public class Employee implements java.io.Serializable {
private Long id;
private String name ;
@NotAudited
private Map customProperties = new HashMap(); // maps to dynamic-component
.. getter/setter ...
Hibernate mapping (using xml as dynamic-component is not available as annotation)
<hibernate-mapping default-access="property">
<class name="com.company.domain.Employee" table="EMPLOYEE">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" type="string" column="name" length="255" not-null="false"/>
<dynamic-component insert="true" name="customProperties" optimistic-lock="true" unique="false" update="true" >
</dynamic-component>
</class>
</hibernate-mapping>
HibernateUtil -
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
AuditEventListener auditEventListener = new AuditEventListener();
Configuration configuration = new Configuration();
configuration.getEventListeners().setPostInsertEventListeners(new PostInsertEventListener[]{auditEventListener});
configuration.getEventListeners().setPostUpdateEventListeners(new PostUpdateEventListener[]{auditEventListener});
configuration.getEventListeners().setPostDeleteEventListeners(new PostDeleteEventListener[]{auditEventListener});
return configuration.configure().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
Main class -
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
App app = new App();
app.createAndStore();
app.createAndStoreVersion();
HibernateUtil.getSessionFactory().close();
}
private void createAndStore() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Employee emp = new Employee();
emp.setName("name");
session.save(emp);
session.getTransaction().commit();
}
private void createAndStoreVersion() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Employee emp = (Employee) session.get(Employee.class, 1L);
emp.setName("updated name");
session.save(emp);
session.getTransaction().commit();
}
}
Initialization fails, log is:
Caused by: java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.hibernate.annotations.common.util.ReflectHelper.classForName(ReflectHelper.java:143)
at org.hibernate.annotations.common.reflection.java.JavaReflectionManager.classForName(JavaReflectionManager.java:117)
at org.hibernate.envers.configuration.metadata.reader.AuditedPropertiesReader$ComponentPropertiesSource.<init>(AuditedPropertiesReader.java:269)
at org.hibernate.envers.configuration.metadata.reader.AuditedPropertiesReader$ComponentPropertiesSource.<init>(AuditedPropertiesReader.java:263)
at org.hibernate.envers.configuration.metadata.reader.AuditedPropertiesReader.addFromProperties(AuditedPropertiesReader.java:105)
at org.hibernate.envers.configuration.metadata.reader.AuditedPropertiesReader.addPropertiesFromClass(AuditedPropertiesReader.java:89)
at org.hibernate.envers.configuration.metadata.reader.AuditedPropertiesReader.read(AuditedPropertiesReader.java:67)
at org.hibernate.envers.configuration.metadata.reader.AnnotationsMetadataReader.getAuditData(AnnotationsMetadataReader.java:114)
at org.hibernate.envers.configuration.EntitiesConfigurator.configure(EntitiesConfigurator.java:80)
at org.hibernate.envers.configuration.AuditConfiguration.<init>(AuditConfiguration.java:97)
at org.hibernate.envers.configuration.AuditConfiguration.getFor(AuditConfiguration.java:129)
at org.hibernate.envers.event.AuditEventListener.initialize(AuditEventListener.java:335)
at org.hibernate.event.EventListeners$1.processListener(EventListeners.java:198)
at org.hibernate.event.EventListeners.processListeners(EventListeners.java:181)
at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:194)
... 6 more
After some debugging I found that a dynamic-component doesn't have class attribute (it is always java.util.HashMap), envers tries to look it up and fails.
Secondly, I coudln't figure out how to attach envers listeners via hibernate.cfg.xml, so used run time configuration.
All the three approaches failed -
1. <property name="hibernate.ejb.event.post-insert">org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener</property>
2. <listener class="org.hibernate.envers.event.AuditEventListener" type="post-insert"/> (DTD validation fails)
3. <event type="post-insert">
<listener class="org.hibernate.envers.event.AuditEventListener"/>
</event> (DTD validation fails).
Also tracked in forum - https://forum.hibernate.org/viewtopic.php?f=1&t=1009975
Junit to reproduce this scenario is attached. Execute App.java, you'll need mysql.
regards,
Rajeev
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 10 months
[Hibernate-JIRA] Created: (HHH-6209) Envers: ValidityAuditStrategy should support non-generated PKs
by Nikita D (JIRA)
Envers: ValidityAuditStrategy should support non-generated PKs
--------------------------------------------------------------
Key: HHH-6209
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6209
Project: Hibernate Core
Issue Type: Improvement
Components: envers
Affects Versions: 3.6.3
Reporter: Nikita D
I have an entity for storing String key-value pairs (the equivalent of a properties file). The String key is the primary key -- it's not generated, and there is no other generated id. It's not possible to use ValidityAuditStrategy for auditing changes to this entity. The problem is when a row is deleted and later another row is inserted with the same key as the deleted one.
When a row is deleted, a revision of type DEL is added, with the REVEND column set to null. When a row is added with the same PK, a revision of type ADD is added, with the REVEND column set to null. A subsequent call to update the row fails, because ValidityAuditStrategy expects to find exactly one row with a null REVEND value, but at this point there are 2 rows.
The ADD revision should update the REVEND column of the DEL revision, or the DEL revision can set rev = revend = revision at which the del happened.
See http://community.jboss.org/message/594167.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 10 months
[Hibernate-JIRA] Created: (HHH-6331) Envers @mappedSupperclass bad behaviour
by Facundo Mateo (JIRA)
Envers @mappedSupperclass bad behaviour
---------------------------------------
Key: HHH-6331
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6331
Project: Hibernate Core
Issue Type: Bug
Components: envers
Affects Versions: 3.6.1
Environment: Hibernate 3.6.1.Final
Oracle 10g
Reporter: Facundo Mateo
Suppose you have:
* Class A marked as @MappedSuperclass, and has field/property marked as @Audited
* Class B extends from A, and is @Entity but doesn't have any @Audited annotation
Envers is not auditting instances of B, when it should audit the properties marked with @Audit in the superclass.
I have been researching at the sources , and it seems to be a bug introduced with the fix for [HHH-4646|http://opensource.atlassian.com/projects/hibernate/browse/HHH-4646]. The problem is in the class org.hibernate.envers.configuration.metadata.reader.AuditedPropertiesReader :
{code:title=org.hibernate.envers.configuration.metadata.reader.AuditedPropertiesReader.java|borderStyle=solid}
private void addPropertiesFromClass(XClass clazz) {
Audited allClassAudited = clazz.getAnnotation(Audited.class);
//look in the class
addFromProperties(clazz.getDeclaredProperties("field"), "field", fieldAccessedPersistentProperties, allClassAudited);
addFromProperties(clazz.getDeclaredProperties("property"), "property", propertyAccessedPersistentProperties, allClassAudited);
if(allClassAudited != null || !auditedPropertiesHolder.isEmpty()) {
XClass superclazz = clazz.getSuperclass();
if (!clazz.isInterface() && !"java.lang.Object".equals(superclazz.getName())) {
addPropertiesFromClass(superclazz);
}
}
}
{code}
if you look this line *if(allClassAudited != null || !auditedPropertiesHolder.isEmpty())*: It only looks for @Audited annotation when the child is marked with class level @Audited or if it has some @Audited property/field, but ignores superclass annotations if it the child doesn't have any.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
12 years, 10 months