I have just used org.apache.openjpa.persistence.meta.AnnotationProcessor6
to generate the MetaModel for my JPA2 entities.
@javax.annotation.Generated
(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",
date="Tue Nov 22 09:49:03 CET 2011")
public class Entity_ {
public static volatile SingularAttribute<Entity,Entity> id;
public static volatile SingularAttribute<Entity,String> value;
public static volatile SingularAttribute<Entity,String> order;
}
Can someone please explain why the attributes are marked volatile in this case?
Thanks.
The thread that sets the static variables might not be the same as the thread that you use to access them, so the volatile
modifier is required to synchronize memory between all threads.
The scenario without volatile
is like this:
null
for the static fields null
for all static fields. Despite the meaning of volatile
keyword and Ingo's answer, it's worth noticing that every JPA generator is required to generate volatile metadata fields (JPA 2.0 FR, 6.2.1.1 Canonical Metamodel ).
On page 199 you can read:
For every persistent non-collection-valued attribute y declared by class X, where the type of y is Y, the metamodel class must contain a declaration as follows:
public static volatile SingularAttribute<X, Y>
y;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.