किसी को भी पता है, यह क्यों PostConstruct विधि में काम नहीं करता?
कारण 1 आप एक सेम एक ही समय में है कि नहीं बना सकते @Stateful और @Singleton (वैसे आप, लेकिन यह कोई मतलब नहीं के बाद से Singletons भी स्टेटफुल हैं कर देगा कर सकते हैं), कि कारणों में से एक है आपको परेशानी हो रही है इसमें कोई अपवाद नहीं है, लेकिन वहां एक संघर्ष है, आपको इसे पहले ठीक करने की आवश्यकता है।
बस इतना ध्यान रखें:
एक सिंगलटन सेम एक सेम है कि अपने राज्य mantains है। एप्लिकेशन में सिंगलटन का केवल एक उदाहरण है और इसे ऐप के सभी उपयोगकर्ताओं के बीच साझा किया जाता है। चूंकि यह एक साझा (शायद बेहतर समवर्ती) बीन है, इसलिए @ लॉक एनोटेशन का उपयोग करके किसी प्रकार की लॉकिंग तंत्र को लागू करने की आवश्यकता है।
एक स्टेटफुल बीन एक बीन है जो लेनदेन के बाद प्रत्येक राज्य को मंत्रमुग्ध करता है। जब
स्टेटफुल सेम के साथ काम करने के लिए प्रत्येक उपयोगकर्ता की फलियों की एक प्रति जो सत्र के रूप में रूप में लंबे समय तक चलेगा हो जाता है - रहता है या एक विधि @Remove साथ एनोटेट तक कहा जाता है
कारण 2 यहां तक कि अगर यह काम करता है, आप परिणामों तक पहुंचने में असमर्थ होंगे, क्योंकि आप उन्हें res नामक ऑब्जेक्ट में संग्रहीत कर रहे हैं जो केवल init() के अंदर से पहुंच योग्य है। मुझे लगता है कि आप वैरिएबल वैल्यूस्टेस पर लौटाए गए मान को असाइन करना चाहते हैं।
वैसे भी सबकुछ कहने के लिए आपके कोड में कई चीजें गलत हैं। मुझे नहीं पता कि आपकी सिस्टम आवश्यकताएं क्या हैं, लेकिन यहां मैं आपको एक साधारण समाधान दूंगा जो आपको डेटाबेस तक पहुंचने की अनुमति देगा:
मुझे लगता है कि आप किसी भी तरह से जीवन चक्र में डेटा वापस करने की कोशिश कर रहे हैं बीन क्योंकि आप बीन @ स्टेटेट है, तो आप बार-बार प्रश्न भेजने से बचना चाहते हैं। बात यह है कि, आपको ऐसा करने की ज़रूरत नहीं है, फिर भी आप अपना बीन @ स्टेटलेस बना सकते हैं और कई प्रश्नों के साथ अपने डेटाबेस पर जोर से बचने से बच सकते हैं। आपको क्या करना है @NamedQuery बनाएं।
तो @NamedQuery के साथ अपने इकाई PriceStep व्याख्या और क्वेरी स्ट्रिंग आप ने लिखा वहाँ दर्ज करें। http://docs.oracle.com/cd/B31017_01/web.1013/b28221/ent30qry001.htm
अगली बात मैं आपको सुझाव है कि है अपनी कक्षा PriceManagementBean रूप * @Stateless * टिप्पणी करने के लिए: इस लिंक में आप कैसे @NamedQueries का उपयोग करने के बारे में जानकारी मिल जाएगी। चिंता न करें अगर प्रत्येक अनुरोध में एक नई इकाई प्रबंधक बनाया गया है, जो डेटाबेस को बिल्कुल तनाव नहीं देता है, क्योंकि यह डोमेन मॉडल से इंटरैक्ट करता है। आपको @PostConstruct की आवश्यकता नहीं है, जब भी आपको इसकी आवश्यकता हो, तो बस अपने @NamedQuery को कॉल करें और यही वह है। ऐप सर्वर इसे कैश करेगा और उसे प्रत्येक उपयोगकर्ता को वापस दे देगा जिसके लिए इसे हमेशा डेटाबेस के साथ बातचीत किए बिना इसकी आवश्यकता होती है।
यहाँ एक codesnipet:
@Entity
@NamedQuery(
name="allPriceSteps",
queryString="SELECT ps FROM PriceStep ps"
)
public class PriceStep implements Serializable {
...
}
अब सेम:
@Stateless
public class PriceManagementBean implements PriceManagement {
@PersistenceContext
private EntityManager em;
public List<PriceStep> getAllPriceSteps() {
Query query = em.createNamedQuery("allPriceSteps");
return query.getResultList();
}
}
मुझे आशा है कि यह उपयोगी है। यदि आप अपनी सिस्टम आवश्यकताओं के बारे में अधिक जानकारी देते हैं तो हम आपको सर्वोत्तम अभ्यास पर सलाह दे सकते हैं।
http://stackoverflow.com/questions/2399769/is-it-okay-to-pass-injected-entitymanagers देखें -to-ejb-beans-helper-classes---use – mglauche
डीएसबी में मूल्यस्टेप्स कैसे और कहाँ जोड़े गए हैं? – Puce
आपकी बीन दोनों 'स्टेटफुल' और 'सिंगलटन' को एनोटेट किया गया है, जिसकी अनुमति नहीं है। यदि आपका ईजेबी कंटेनर ईजेबी 3.1 का समर्थन नहीं करता है, तो शायद बीन वास्तव में स्टेटफुल है, और पोस्टकॉन्स्ट्रक्ट एक अनिर्धारित लेनदेन संदर्भ के साथ चल रहा है, और आपका एप्लिकेशन सर्वर उस अच्छी तरह से समर्थन नहीं करता है? आप किस एप्लिकेशन सर्वर का उपयोग कर रहे हैं? –