2014-10-26 13 views
18
objectify (5.1) के नवीनतम संस्करण के साथ

ObjectifyFilter लापता करने के लिए त्रुटि शुरू नहीं हुआ, तो निम्न त्रुटि हो रही है जब मैं ofy() विधिobjectify 5.1 प्रसंग की वजह से

आप एक objectify संदर्भ शुरू नहीं किया है तक पहुँचने का प्रयास। आप शायद ऑब्जेक्टिफाइल्टर गायब हैं। यदि आप http अनुरोध के संदर्भ में नहीं चल रहे हैं, तो ObjectifyService.run() विधि देखें।

मैं इसे ऐप्लिकेशन इंजन वेब अनुप्रयोग से चला रहा हूँ, एक ही कोड और विन्यास ठीक पुराने संस्करणों

निम्नलिखित में काम किया मेरी विन्यास, objectify दस्तावेज में प्रदान की जाती उदाहरण के समान है

web.xml

<filter> 
    <filter-name>ObjectifyFilter</filter-name> 
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ObjectifyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

OfyService वर्ग

public class OfyService { 

static { 
    long start = System.currentTimeMillis(); 

    factory().register(User.class); 

    log.info(" Entity Registration took : {} ms", (System.currentTimeMillis() - start)); 
} 

public static Objectify ofy() { 
    return ObjectifyService.ofy(); 
} 

public static ObjectifyFactory factory() { 
    return (ObjectifyFactory) ObjectifyService.factory(); 
} 
} 

लेकिन मैं ऑब्जेक्टिफाइफ्टर परिभाषित करता हूं, कोई विचार मुझे यह त्रुटि क्यों मिल रही है? और मैं इसे कैसे ठीक कर सकता हूं?

धन्यवाद!

अद्यतन:

मैं v5.1.5 के लिए objectify संस्करण को अद्यतन किया है, लेकिन अभी भी इस मुद्दे को इस पर किसी भी अद्यतन हल नहीं होती है?

+0

चेक web.xml में जोड़ें यदि आपने ofy फोन धक्का सकता है() स्टार्टअप उदा किसी कारण से - अनुरोध के दायरे से बाहर - तो आप ऑब्जेक्टिफाइलर के माध्यम से नहीं गए हैं। – koma

+0

नहीं, इसे कहीं और नहीं कहा जाता है, मैं सख्ती से ऑफिस सेवा कक्षा के माध्यम से कॉल करता हूं, एफवाईआई भी उसी कोड को 5.1 –

+1

से पहले संस्करण में ठीक काम करता है यह सुनिश्चित करने के लिए जांचें कि 1) आप फिल्टर से पहले() को कॉल नहीं कर रहे हैं स्थापित; कहें, शायद, चेन में एक और फ़िल्टर से अधिक और 2) कि आपके क्लासपाथ (एमवीएन क्लीन) पर ऑब्जेक्टिफाइड के कई संस्करण नहीं हैं। आपको स्टैकट्रैक को देखने में सक्षम होना चाहिए और फ़िल्टर के बाहर ऑब्जेक्टिफ़ाई का उपयोग करने के लिए कौन सा कोड उपयोग करने का प्रयास कर रहा है; अगर फ़िल्टर स्थापित किया गया था, तो आप इसे स्टैकट्रैक में देखेंगे। इसे डाक से भेजें। – stickfigure

उत्तर

-1
import static com.googlecode.objectify.ObjectifyService.ofy; 

import java.util.List; 
... 
import ar.com.cra.entity.State; 
import com.googlecode.objectify.ObjectifyService; 

@Controller 
@RequestMapping("/state") 
public class StateController { 

    @RequestMapping(value = "/addState", method = RequestMethod.GET) 
    public String getAddState(ModelMap model) { 
     return "state/add"; 
    } 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public ModelAndView add(HttpServletRequest request, ModelMap model) { 

     ObjectifyService.register(State.class); 

     State state; 
     try { 
      state = new State(); 
      state.setName(request.getParameter("name")); 
      state.setShortName(request.getParameter("shortName")); 
      ofy().save().entity(state).now(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return new ModelAndView("redirect:list"); 

    } 

अद्यतन

public class DatastoreService { 

    static { 
     factory().register(State.class); 
    } 

    public static Objectify ofy() { 
     return ObjectifyService.ofy(); 
    } 
} 
+2

यह ऑब्जेक्ट सेवा पंजीकृत करने का अनुशंसित तरीका नहीं है, हर बार जब आप उस पथ को कॉल करते हैं, तो आप हर बार पंजीकरण करते हैं –

+0

धन्यवाद! मुझे यह नहीं पता। – Guillermo81

0

मैं एक ही समस्या हो रही किया गया है। मैंने पाया कि समस्या का कारण क्या है (मेरे लिए)। मैं अपनी पिछली सेवाओं को बनाने के लिए Guice और sitebricks का उपयोग कर रहा हूं।

समस्या

आदेश objectify का उपयोग करने के लिए मैं अपने मॉड्यूल में से एक में सिंगलटन के रूप में ObjectifyFilter बाध्य करने के लिए किया था। जिस मॉड्यूल को मैं बाध्यकारी कर रहा था वह ServletModule है जो SitebricksModule में गुइस के माध्यम से स्थापित किया गया है जहां मैं अपनी सेवाओं को यूआरएल से जोड़ता हूं। SiteBricksModule तब गुइस के इंजेक्टर को पास कर दिया जाता है।

मैंने देखा कि जब मैंने एक मॉड्यूल को दूसरे में स्थापित किया तो समस्या बनी रही।

समाधान है कि मैं

  • पाया मैं दो मॉड्यूल अलग कर दिया और उन दोनों को Guices के इंजेक्टर को पारित कर दिया।

या

  • अलग Objectify सामान Guice के इंजेक्टर के लिए फिल्टर बंधन और एक अलग मॉड्यूल में फिल्टर प्रतिमान निर्दिष्ट और पारित है कि पहले की तरह।

आशा है कि इससे मदद मिलती है!

0

मैंने अभी ऑब्जेक्टिफ़ का उपयोग करना शुरू कर दिया है और आपके जैसा ही समस्या है। मैं सिर्फ the setup information पढ़ा नहीं है ... आप मेरे web.xml पर कि जोड़ सकते हैं और यह काम किया:

@Start(order=100) 
public void generateDummyDataWhenInTest() { 
    if (ninjaProperties.isDev()) { 
     try (Closeable closeable = ObjectifyService.begin()) { 
      ObjectifyProvider.setup(); 
     } catch (IOException ex) { 
      Logger.getLogger(StartupActions.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

हम लंबे समय से है, जिन्हें ठीक किया जाना चाहिए था:

<filter> 
    <filter-name>ObjectifyFilter</filter-name> 
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ObjectifyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
1

तरह सुनिश्चित करें कि आपके StartupActions वर्ग लग रहा है बनाने के पहले archetype में, लेकिन यह prio सूची पर वास्तव में उच्च नहीं है। पर यह गज़ब का यदि आप एक पीआर :)

0

मैं एक ही त्रुटि का सामना करना पड़ रहा था और this solusion मेरे लिए काम किया

<filter> 
    <filter-name>ObjectifyFilter</filter-name> 
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ObjectifyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 
संबंधित मुद्दे