2009-11-07 8 views
11

मेरे पास स्कूल के लिए एक परियोजना है और मुझे जावा का उपयोग करना है। हाल ही में मुझे प्ले फ्रेमवर्क मिला और मैं इसका इस्तेमाल करने की कोशिश करना चाहता हूं। एक त्वरित शुरुआत के लिए यह काफी आसान है, लेकिन मैं सत्र के साथ एक समस्या में भाग गया।प्ले फ्रेमवर्क में सत्र में ऑब्जेक्ट (स्ट्रिंग नहीं) कैसे स्टोर करें?

अपने स्वभाव से राज्यविहीन होने के नाते, खेलने कुकी में उपयोगकर्ता के लिए पूरे सत्र भेजता है और अगले अनुरोध पर यह प्राप्त करता है, तो यह सत्र में डेटा का केवल सीमित मात्रा में अनुमति देता है।

मैं क्या करना चाहता हूं उपयोगकर्ता उपयोगकर्ता को डीबी से उपयोगकर्ता लॉगिन पर लाने के लिए, और इसे सत्र में रखना है, इसलिए मैं इसे टेम्पलेट से एक्सेस कर सकता हूं और इसी तरह (मेरे पास उपयोगकर्ता कक्षा में कुछ विधियां हैं जिन्हें मुझे कॉल करने की आवश्यकता है यूआई को कस्टमाइज़ करने के लिए ऑर्डर), लेकिन अगर मैं उपयोगकर्ता ऑब्जेक्ट डालता हूं, तो इसे अपनी स्ट्रिंग विधि पर कॉल करें और सत्र में रखता है।

मुझे पता चला कि अनुशंसित तरीका है कि कैश में बड़ी मात्रा में डेटा डालना है, लेकिन मुझे नहीं पता कि टेम्पलेट से इसे कैसे पहुंचाया जाए (मुझे लगता है कि मैं @ एनोटेशन से पहले विधि बना सकता हूं और उपयोगकर्ता को रेंडर करने के लिए जोड़ सकता हूं, लेकिन वह मुझे बहुत साफ नहीं लगता है)। एक और समस्या यह है कि कैश सीमित जीवनकाल है, इसलिए मेरी वस्तु गायब हो सकती है।

क्या किसी को इस तरह की समस्याओं का अनुभव है?

वहाँ किसी भी तरह से खेलने के साथ सर्वर साइड सत्र का उपयोग करने के है? मुझे इस परियोजना के लिए आरईएसटी कार्यक्षमता की आवश्यकता नहीं है, इसलिए, जहां तक ​​मेरा संबंध है, एप्लिकेशन राज्य को बचा सकता है ...

उत्तर

3

किसी फ़ाइल या डेटाबेस में हैशमैप को क्रमबद्ध करने के लिए जावा सीरियलाइजेशन का उपयोग करें। उपयोगकर्ता की कुकी में संग्रहीत एक अद्वितीय पहचानकर्ता के बाद फ़ाइल या आईडी कॉलम का नाम दें। फिर हैशप को क्रमबद्ध करने से पहले उपयोगकर्ता ऑब्जेक्ट को हैशपैप में रखें। अब आपके पास एक सतत स्टोर है जिसे आप एक्सेस कर सकते हैं। जब ढांचा उपयोगकर्ता ऑब्जेक्ट या किसी अन्य सत्र की जानकारी को भूल जाता है, तो आप हैशमैप को deserialize कर सकते हैं। फिर कुछ स्थिर सहायक विधियों, स्थैतिक ऑब्जेक्ट सत्र डीबी.जेट (स्ट्रिंग आईडी, स्ट्रिंग कुंजी) और सत्र डीबी.पुट (स्ट्रिंग आईडी, स्ट्रिंग कुंजी, ऑब्जेक्ट वैल्यू) लिखें। मैं इस विधि का उपयोग अपने घर के बने ढांचे पर एक छोटे सर्वर फार्म पर सत्र जानकारी संग्रहीत करने के लिए करता हूं। बेशक मैं डेटाबेस का उपयोग करता हूं, फाइल सिस्टम नहीं।

2

मुझे लगता है कि आप

http://groups.google.com/group/play-framework/browse_thread/thread/3d6946ad0b00303b/188e1b272d91408d?lnk=gst&q=store+object+in+session#188e1b272d91408d

पर एक नज़र आप भी यहाँ खोज कर सकते हैं करना चाहिए था

http://groups.google.com/group/play-framework

गूगल समूहों में खेलने ढांचे चर्चा सूची बहुत सक्रिय है, और आप आमतौर पर कुछ दिनों में प्रतिक्रिया प्राप्त करें, सबसे अधिक ...

1

एक और विकल्प आपके obje को परिवर्तित करना है जेएसओएन में सीटीएस। मैंने इसके लिए एक सरल उपयोग किया और जेएसओएन में मेरी ऑब्जेक्ट्स को क्रमबद्ध करने के लिए फ्लेक्सजेसन का इस्तेमाल किया।

import play.Logger; 
import play.mvc.Http; 
import play.mvc.Http.Session; 
import flexjson.JSONDeserializer; 
import flexjson.JSONSerializer; 

public class SessionManager { 

private static JSONSerializer s = new JSONSerializer(); 

    public static void addSession(String key, Object value) { 

     if(value != null) { 
      Session session = Http.Context.current().session(); 
      session.put(key, s.deepSerialize(value)); 
     } else { 
      Logger.info("Value for " + key + " is null"); 
     } 
    } 

    public static <T> T get(String key) { 

     Session session = Http.Context.current().session(); 
     final String value = session.get(key); 

     if (value == null) { 
      return null; 
     } 

     return new JSONDeserializer<T>().deserialize(value); 
    } 

} 

नोट: आप अपने काम करने के बाद सफाई का प्रबंधन और यह ध्यान रखें कि जब से इस कुकी में संग्रहीत किया जाता है, यह के रूप में सुरक्षित नहीं है करना होगा।

संबंधित मुद्दे