java - ईजेबी में वस्तुओं के एक पूल तक पहुंच प्रदान करने के लिए मुझे किस प्रकार की बीन का उपयोग करना चाहिए?



jboss ejb (1)

सबसे पहले, मेमकेचडपूलसेवा एक स्टेटलेस सर्विस है, और इसलिए यदि आप किसी भी डीबी अपडेट नहीं कर रहे हैं जिसके लिए स्थिरता की आवश्यकता होती है (ऐसा क्यों है कि वह भी @ सिग्लेटन है, अन्यथा आप @Stateless @ का उपयोग करेंगे), तो बस क्लास को चिह्नित करें

@Singleton
@Lock(LockType.READ)
public class MemcachedPoolService{}

या

@Singleton
public class MemcachedPoolService{

  @Lock(LockType.READ)
  public void myPossibleMultiAccessMethod(){}
}

अगर वह विकल्प नहीं है, तो:

@Singleton
public class MemcachedPoolService{

  @AccessTimeout(Integer.MORE_THAN_5000_MILLIS)
  public void myPossibleMultiAccessMethod(){}
}

https://code.i-harness.com

उच्च स्तर पर, मेरे पास MemcachedPoolService वर्ग है जिसमें दो विधियों हैं: getClientInstance () और returnClientInstance (क्लाइंट)। अपेक्षित होने पर, getClientInstance () एक MemcachedClient (spymemcachced) कॉलर को एक उदाहरण देता है, और returnClientInstance (क्लाइंट) पूल में एक MemcachedClient वापस देता है। MemcachedPoolService अन्य @ स्टैटलेस सेवाओं (इंजेक्शन) के लिए उपलब्ध होने की आवश्यकता है जो सभी को मेमकैच तक पहुंच की आवश्यकता है।

वर्तमान में मेरे पास MemcachedPoolService को @ सिसिंगटन के रूप में चिह्नित किया गया है, लेकिन एक से अधिक क्लाइंट ऐप एक्सेस करने का प्रयास करते समय मुझे निम्न त्रुटि मिल रही है:

[0m[31m16:54:22,968 ERROR [org.jboss.as.ejb3.invocation] (http-/0.0.0.0:8080-10) 
 JBAS014134: EJB Invocation failed on component MemcachedPoolService for method public
 net.spy.memcached.MemcachedClient com.apexlab.cache.MemcachedPoolService.getClientInstance():
 javax.ejb.EJBTransactionRolledbackException: JBAS014373: EJB 3.1 PFD2 4.8.5.5.1 concurrent
 access timeout on org.jboss.invocation.[email protected] - could not 
 obtain lock within 5000MILLISECONDS

समवर्ती टाइमआउट अपवादों को प्राप्त करने से बचने के लिए उत्पादन के लिए अपने मेस्कैटेडपूल सेवा (और सामान्य रूप से मेरी वेब ऐप) सेट अप करने का सबसे अच्छा तरीका क्या होगा?





spymemcached