मुझे समझ में नहीं आ रहा है कि ईजेबी कंटेनर @Stateless
बीन्स के लिए उदाहरण चर के साथ थ्रेड-सुरक्षा का प्रबंधन कैसे करता है। तो मैं एक साधारण उदाहरण दे देंगे से पहले मेरी चिंताओं को समझा: मेरे सवालोंईजेबी पूलिंग बनाम थ्रेड-सुरक्षित और @PreDestroy
@Stateless
public class BeanTest{
@Inject
private String var;
private Connection connection;
@Resource(name = "jdbc/TestDB")
private DataSource dataSource;
public void modify() {
var = "TestName";
}
@PostConstruct
public void initialize() {
try {
connection = dataSource.getConnection();
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
@PreDestroy
public void cleanup() {
try {
connection.close();
connection = null;
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
}
यहाँ है, यह सोचते हैं कि हमारे कंटेनर पूलिंग का समर्थन करता है:
1. पूलिंग बनाम थ्रेड-सुरक्षित:
उपयोगकर्ता 1 ने BeanTest
का एक उदाहरण इस्तेमाल किया और संशोधित विधि का उपयोग करके var
संशोधित किया, फिर वह समाप्त हो गया और कंटेनर ने प्रबंधित पूल में BeanTest
का उदाहरण दिया। जब उपयोगकर्ता 2 अनुरोध के लिए एक ही बीन का उपयोग करने का प्रयास करता है, तो वह BeanTest
का एक ही उदाहरण प्राप्त कर सकता है जिसे उपयोगकर्ता 1 द्वारा आंशिक रूप से संशोधित किया गया है (मुझे समझ में आता है कि एक और उदाहरण भी मिल सकता है)। तो इंस्टेंस वेरिएबल var
का कौन सा राज्य वह पाएगा (डिफ़ॉल्ट मान जो null
या "TestName"
है)? यदि यह नया संशोधित है, तो क्या इसका मतलब यह है कि @Stateless
बीन्स 100% थ्रेड-सुरक्षित नहीं हैं? तो finnaly कोई कंटेनर -value धागा सुरक्षा के संबंध में, जोड़ा जाता है उदाहरण चर का उपयोग नहीं कर के रूप में एक सेम धागा सुरक्षित भले ही वह किसी @Stateless
सेम
2. पूलिंग @PreDestroy बनाम
नहीं है सेम है बनाता है प्रबंधित पूल में लौट आया और नष्ट नहीं हुआ, क्या इसका मतलब यह है कि @Predestroy
विधि नहीं बुलाया जाएगा और उस स्थिति में कनेक्शन खोला जाएगा? तो, अगर हमारे पास पूल में उस बीन का 30 इंच है, तो हमारे पास 30 खुले कनेक्शन हो सकते हैं जिनका उपयोग नहीं किया जाता है, क्या यह प्रदर्शन समस्या नहीं है? या यह नहीं @Predestroy
पूलिंग के साथ काम कर रहा है? (Connection
का उपयोग कर एक उदाहरण मात्र है, हम है कि हम @Predestroy
में बंद करने की आवश्यकता ressource अन्य प्रकार हो सकता है)
एनबी:यह एक वास्तविक जीवन उदाहरण नहीं है तो I'am कोई वैकल्पिक समाधान की तलाश में नहीं , मेरी चिंता का विषय पूरी अवधारणा को समझने के लिए है और कैसे चीजें अनुप्रयोग सर्वर में प्रबंधित कर रहे हैं, क्या हुड
आपकी चिंताएं ठीक हैं, जब भी मैं कर सकता हूं मैंने ईजेबी से स्पष्ट किया है। वसंत के साथ आपको इतना बकवास, बीमार परिभाषित अर्थशास्त्र नहीं मिलेगा। –
क्या आपको 'स्टेटलेस 'के बजाय' @ स्टेटफुल' का उपयोग करना चाहिए? –
इसके अलावा, जब भी आपको एक की आवश्यकता होती है, तो आपको कनेक्शन प्राप्त करना चाहिए, जब ईजेबी प्रारंभ नहीं होता है। –