चलो कहते हैं कि मुझे लगता है कि कारों की एक गुच्छा के लिए एक गैरेज के रूप में कार्य एक डेस्कटॉप अनुप्रयोग करते हैं:एकाधिक धागे डाटाबेस को ऐक्सेस: कम लेनदेन के साथ लंबे समय से लेन-देन, एक के साथ एक
@Entity
public class Garage {
private List<Car> cars = new ArrayList<Car>();
...
}
डेस्कटॉप ऐप्लिकेशन एक "अनुकरण है "बटन जो एक नया धागा शुरू करता है और गैरेज, कार, व्हील इत्यादि पर कॉलिंग विधियों को शुरू करता है। इस सिमुलेशन में 10 मिनट तक चल सकते हैं। फिलहाल मैं एक वर्ग है कि इस तरह दिखता है:
beginTransaction();
Garage garage = garageDao.findGarage(1);
List<Car> cars = garage.getCars();
for (Car car : cars) {
// call methods on the car to lazily fetch other things like wheels...
}
commitTransaction();
इस कोड को केवल करता है "लिखा है" और कभी नहीं "लिखते हैं,"
तो ऊपर कितनी बुरी तरह से कारों की जरूरत के आधार पर एक लंबा समय लग सकता एक सेवा। जबकि उपरोक्त हो रहा है, उपयोगकर्ता डेस्कटॉप ऐप का उपयोग कर काम करना जारी रख सकता है। वे उपरोक्त लेनदेन में इस्तेमाल होने वाली कार का रंग बदलना चुन सकते हैं।
मेरा सवाल यह है कि क्या उपर्युक्त लंबे लेनदेन कार के रंग को बदलने से रोकने जा रहा है? यानी डेस्कटॉप ऐप में कार के रंग को बदलने वाले उपयोगकर्ता को लंबे लेनदेन समाप्त होने तक परिवर्तन करने से रोका जाएगा?
आपको पढ़ने के लिए लेनदेन की आवश्यकता क्यों है? क्या आप आलसी लाने का उपयोग कर रहे हैं? – saugata
'अपडेट थ्रेड' एक एकल लेनदेन इकाई होना चाहिए? या कोई अपडेट नहीं हैं? आप कहते हैं "यह कोड केवल 'पढ़ता है' और कभी नहीं लिखता है। फिर - जैसे सुगाता ने पूछा - आपको लेनदेन की आवश्यकता क्यों है? –
हां कारों पर बुलाए जाने वाले तरीके कुछ हो सकते हैं जैसे वेल्स() और वे आलसी हो रहे हैं – digiarnie