2011-02-26 11 views
5

क्या कारखाने से एक सेवा का संदर्भ प्राप्त करना ठीक है और एकाधिक अनुरोधों को संभालने के लिए इसका उपयोग करना ठीक है? यह सबसे अच्छा एक सर्वलेट के लिए निम्नलिखित छद्म कोड का उपयोग कर समझाया जा सकता है:क्या Google ऐप इंजन (जावा) सेवा कक्षाएं थ्रेड-सेफ हैं?

SomeServlet...{ 
    MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService(); 
    UserService userService = UserServiceFactory.getUserService(); 
    DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); 

    doGet(...){ 
    userService.doSomething(...); 
    } 
... 
} 

यह एक समय से पहले अनुकूलन हो सकता है, लेकिन मैं सिर्फ जानना प्रत्येक अनुरोध के लिए सेवा प्राप्त करने की लागत क्या है उत्सुक हूँ। कृपया अपनी अंतर्दृष्टि साझा करें।

उत्तर

7

Google समूह धागे http://groups.google.com/group/google-appengine-java/browse_thread/thread/d3f1536084f59c22 में, Ikai Lan (Google पर GAE टीम से) का कहना है कि MemcacheService थ्रेड-सुरक्षित है, लेकिन यह कैशिंग यह उपयोगी नहीं है, क्योंकि प्रत्येक बार जब आप सेवा प्राप्त करते हैं तो केवल एक ऑब्जेक्ट आवंटन होता है कारखाना।

चूंकि सभी सेवाएं इसी तरह से प्राप्त की जाती हैं, मुझे लगता है कि हम मान सकते हैं कि वे सभी एक ही डिजाइन का पालन करते हैं और सभी थ्रेड-सुरक्षित हैं। लेकिन चूंकि प्रत्येक क्वेरी पर एक नया उदाहरण प्राप्त करने के लिए महंगा नहीं है, इसलिए मैं उन्हें कैश नहीं करूँगा।

0

Google समूह धागे https://groups.google.com/forum/#!topic/google-appengine-java/4Zt5IEKy_5s में जॉन पैटरसन इंगित करता है कि डेटास्टोर सेवा बहुत हल्का है, इसलिए यह कारखाने से सबसे अच्छा होगा और उस बिंदु पर इसे कॉन्फ़िगर करें जिसकी आपको आवश्यकता है।

इसके अलावा एक ही थ्रेड में जेफ स्केनिट्जर इंगित करता है कि चूंकि डेटास्टोर सेवा को थ्रेडसेफ के रूप में चिह्नित नहीं किया गया है, यह अनुमान लगाने के लिए मूर्ख नहीं होगा (या हमेशा होगा)।

हालांकि, कुछ तरीकों जैसे getCurrentTransaction() को थ्रेड जागरूक (https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/BaseDatastoreService) के रूप में दस्तावेज किया गया है, इसलिए हो सकता है कि कुछ स्थितियों में डेटास्टोर सेवा थ्रेड सहिष्णु होगी।