के बीच अंतर थोड़ा उलझन में है। javax.inject.Singleton
और javax.ejb.Singleton
के बीच सटीक अंतर क्या है?javax.inject.Singleton और javax.ejb.Singleton
उत्तर
एडम बिएन द्वारा Article में पीछे की अवधारणाओं का एक अच्छा स्पष्टीकरण दिया गया है।
चूंकि स्वीकृत उत्तर ने मेरी समस्या का समाधान नहीं किया है, इसलिए मैंने अपना उत्तर पोस्ट किया है। यह एडम बिएन द्वारा लेख के रूप में के रूप में अच्छा नहीं होगा, लेकिन निश्चित रूप से और अधिक व्यावहारिक हो जाएगा:
कोड निम्नलिखित पर विचार करें:
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
@Singleton
public class DatabaseConnection {
@PostConstruct
public void init() {
System.out.println("init");
}
public ChampionComp getFirstRecord() {
return new ChampionComp("Ashe", "Teemo", "Warwick",
"Blitzcrank", "Syndra", "Anivia", "Brand", "Rammus", "Xin Zhao", "Irelia");
}
}
और यह बाकी सेवा:
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.Path;
@Path("/champions")
public class ChampionsAPI {
@Inject
private DatabaseConnection db;
@GET
@Produces("text/plain")
public String getClichedMessage() {
ChampionComp comp = db.getFirstRecord();
return comp.toString();
}
}
javax.ejb.Singleton
इस कोड का उपयोग करना बस ठीक काम करता है। DatabaseConnection
उदाहरण एक बार बनाया गया है और आरईएसटी सेवा में इंजेक्शन दिया गया है। हालांकि ejb
को inject
के साथ आयात में बदलते समय आपको डीबी फ़ील्ड तक पहुंचते समय चैंपियंसएपी कक्षा में एनपीई प्राप्त होगा - ऐसा इसलिए है क्योंकि आपका सिंगलटन नहीं बनाया गया था (किसी कारण से, शायद javax.inject.Singleton
का उपयोग करते समय इंटरफ़ेस का उपयोग करने की आवश्यकता है?)।
यह सिंगलटन पैकेज की समस्या नहीं है बल्कि एक सीडीआई खोज मुद्दा है। सीडीआई आपके मामले में "सक्रिय" नहीं है। यदि सीडीआई सही ढंग से सक्रिय है (beans.xml, आदि का उपयोग कर) इंजेक्शन सही ढंग से काम करेगा। – Rouliboy
मैं एक प्रशंसनीय विवरण here पाया:
डिफ़ॉल्ट रूप से,
javax.ejb.Singleton
सत्र सेम व्यवहार (EJB 3.1 विनिर्देश की धारा 13.3.7) और (हर व्यवसाय विधि मंगलाचरण के लिए एक विशेष लॉक के अधिग्रहण की आवश्यकता होती है वर्गों 4.8.5.4 और 4.8.5.5)।इसके विपरीत,
javax.inject.Singleton
लेनदेन नहीं है और कंटेनर-प्रबंधित समेकन का समर्थन नहीं करता है (मुख्य परिणाम यह है कि कंटेनर द्वारा लॉकिंग योजना लागू नहीं की जाती है)। [...]यदि आपको ईजेबी सुविधाओं की आवश्यकता नहीं है, तो
@ApplicationScoped
(javax.inject.Singleton
के साथ चिपकाएं सीडीआई द्वारा परिभाषित नहीं किया गया है, और इसके अर्थशास्त्र इसलिए उस विनिर्देशन द्वारा शासित नहीं हैं)।
भविष्य भ्रम को कम करने के लिए, मैं इस छोटी इकाई परीक्षण का उपयोग करें (प्रथम स्तर पैकेज का नाम बदला जाना आवश्यक):
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import org.junit.Test;
public class SingletonTest {
/** requires com.tngtech.archunit:archunit-junit:0.4.0 */
@Test
public void detectWrongSingletonAnnotation() {
final ClassFileImporter importer = new ClassFileImporter();
final JavaClasses classes = importer.importPackages("first_level_package");
noClasses().should().beAnnotatedWith("javax.inject.Singleton")
.as("Please use javax.ejb.Singleton instead of javax.inject.Singleton.")
.check(classes);
}
}
- 1. क्लस्टर पर्यावरण में javax.ejb.Singleton कैसे सिंगलटन है?
- 2. हॉर्नसेट: XAConnection और XASession
- 3. स्टार्टअप ejb बीन
- 4. यूनिट परीक्षण एनोटेशन?
- 5. "#", "$", "%", "&", और "_" "\ #", "\ $", "\%", "\ &", और "\ _"
- 6. प्रदर्शन और सॉर्टिंग, और mysql और php
- 7. "और" और "या"
- 8. "बिटवाइस और" और सी ++
- 9. और बनाम * और | बनाम +
- 10. getters और setters और
- 11. सीएसएस "और" और "या"
- 12. {} और {}
- 13. और
- 14. $ (...) और `...`
- 15. $ * और $ @
- 16. और
- 17. $ # और $ {# @}
- 18. $ और()
- 19. एक play.api.db.DBApi के लिए बाध्य पहले से ही कॉन्फ़िगर किया गया था, प्ले-चालाक
- 20. गिसिस/जर्सी
- 21. जावास्क्रिप्ट शॉर्टैंड अगर-और और
- 22. क्षमताओं और लिनक्स और जावा
- 23. MySQL और PHP और jquery
- 24. जावा और सी # और .NET
- 25. UILabel और numberOfLines और sizeToFit:
- 26. RabbitMQ और चैनल और कनेक्शन
- 27. लिखें और और फिर विधियां
- 28. XHTML और और (एम्पसेंड) एन्कोडिंग
- 29. पायथन अगर स्थिति और "और"
- 30. multidplyr और group_by() और फ़िल्टर()
शायद मैं कर रहा हूँ केवल एक ही लेकिन इस लेख मेरे लिए काफी अच्छा नहीं था अंतर को समझाने में। – kukis
लिंक किए गए आलेख में ओपी के बारे में पूछे जाने वाले एनोटेशन में से कोई भी उल्लेख नहीं किया गया है। –