2011-12-19 23 views
6

मैंने अपने जेपीए 2 इकाइयों के लिए मेटामोडेल उत्पन्न करने के लिए अभी org.apache.openjpa.persistence.meta.AnnotationProcessor6 का उपयोग किया है।जेपीए 2 मेटामोडेल अस्थिर सदस्यों के साथ क्यों उत्पन्न होता है?

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

क्या कोई यह बता सकता है कि इस मामले में गुणों को अस्थिर क्यों चिह्नित किया गया है?

धन्यवाद।

उत्तर

7

स्थिर चर सेट करने वाला थ्रेड आपके द्वारा उपयोग किए जाने वाले थ्रेड के समान नहीं हो सकता है, इसलिए volatile संशोधक को सभी धागे के बीच स्मृति सिंक्रनाइज़ करने की आवश्यकता है।

volatile बिना परिदृश्य इस तरह है:

  1. से पहले जेपीए प्रदाता आरंभ नहीं हो जाता आपका धागा चर तक पहुँचता है और स्थिर क्षेत्रों
  2. जेपीए प्रदाता एक अलग धागा और सेट से आरंभ नहीं हो जाता के लिए null हो जाता है गैर-शून्य मानों के लिए स्थिर फ़ील्ड
  3. आपका धागा स्थिर फ़ील्ड को फिर से एक्सेस करता है। इस मामले में आपके धागे की कैश की गई मेमोरी में बदलाव दिखाई नहीं देंगे और सभी स्थिर क्षेत्रों के लिए null वापस लौटना जारी रखेंगे।
+0

धन्यवाद इनगो - लगता है कि मैं पागल हो रहा हूं, निश्चित रूप से उन्हें प्रारंभ करने की आवश्यकता है! कल्पना के अनुसार "जब एक निरंतरता इकाई के लिए इकाई प्रबंधक कारखाना बनाया जाता है, तो दृढ़ता इकाई की मेटामोडेल कक्षाओं की स्थिति आरंभ करने के लिए दृढ़ता प्रदाता की ज़िम्मेदारी है।" मैंने सोनार चेतावनी देखी और विचार नहीं किया ... स्वीकृत उत्तर – planetjones

2

meaning of volatile keyword और इंगो के जवाब के बावजूद, यह देख कि हर जेपीए जनरेटर करने के लिए आवश्यक है अस्थिर मेटाडाटा क्षेत्रों (जेपीए 2.0 एफआर, 6.2.1.1 विहित Metamodel) उत्पन्न लायक है।

पेज 199 पर आप पढ़ सकते हैं:

हर लगातार गैर संग्रह-मान विशेषता y दसवीं कक्षा, जहां y के प्रकार Y है द्वारा घोषित लिए, मेटामॉडल वर्ग के रूप में एक घोषणा शामिल होना चाहिए निम्नानुसार है:

public static volatile SingularAttribute<X, Y> वाई;