2015-01-06 11 views
12

मैं वैडिन 7 में नए Push technology का उपयोग करने का सबसे कम उदाहरण देखना चाहता हूं, जैसे नया @Push एनोटेशन।वाडिन 7 ऐप ("@ पुश") में पुश का न्यूनतम उदाहरण

मुझे अपने ऐप में काम करने के लिए server-push मिलने में समस्याएं आ रही हैं। मैं अपने ऐप को ठीक करने की कोशिश करने से पहले एक साधारण उदाहरण ऐप आज़माउंगा।

उदाहरण के
+0

प्रिय डाउन-मतदाता: कृपया अपने वोट के साथ आलोचना छोड़ दें। –

उत्तर

20

सरलीकरण में Vaadin

Book Of Vaadin की किताब एक उदाहरण Vaadin Charts का उपयोग भी शामिल पुश पर एक अध्याय शामिल हैं।

नीचे मेरा कोड है। ऊपर वर्णित उस वैदिन चार्ट्स उदाहरण के आधार पर, मैंने Chart ऑब्जेक्ट के उपयोग को एक सरल Label ऑब्जेक्ट के साथ बदलकर इसे सरल बना दिया। लेबल आपको वर्तमान समय बताने के लिए हर सेकेंड या तो अपडेट करता है।

screen shot of example Vaadin app telling current time in UTC as text

के लिए उदाहरण उपयोग केवल -

चेतावनी वास्तविक दुनिया परियोजना में एक निर्वाहक का उपयोग करें: नीचे दी गई मेरी उदाहरण सादगी के लिए बनाया गया है, उत्पादन कोड के रूप में नहीं। एक थ्रेड सोना अनुसूचित थ्रेड किए गए काम को प्रबंधित करने के लिए एक कच्चा और अजीब तरीका है। जावा इस तरह के काम के लिए Executor सुविधा प्रदान करता है। एक वास्तविक दुनिया परियोजना में मैं अपने कार्य (समय बताने) को निर्धारित करने के लिए एक नींद Thread ऑब्जेक्ट की बजाय ScheduledExecutorService का उपयोग करूंगा। संबंधित युक्ति: सर्वलेट वातावरण में Timer का कभी भी उपयोग न करें। एक पूर्ण और अधिक वास्तविक दुनिया के उदाहरण के लिए, वाडिन के साथ पुश के बारे में एक समान प्रश्न के लिए my Answer देखें। UI पर Label विजेट सीधे मैं जगह जबकि वास्तविक दुनिया काम एक Layout का प्रयोग करेंगे Label को रोकने के लिए:

मैं जैसे इस उदाहरण में अन्य शॉर्टकट, ले लिया।

मेरी विन्यास

मेरे कोड NetBeans 8.0.2 और पर मैक ओएस एक्स 10.8.5 बिलाव 8.0.15 (माउंटेन शेर) में Vaadin 7.3.7 उपयोग कर रहा है जावा 8 अद्यतन 25 के साथ।

पुश प्रौद्योगिकी अपेक्षाकृत नई है, खासकर WebSocket विविधता। ऐसे कैसे इस उदाहरण

इस कोड को एक एकल फाइल है, MyUI.java फ़ाइल का उपयोग करने के 8.

बिलाव 7 के हाल के अपडेट के रूप में या अपने वेब सर्वर, के हाल के संस्करणों का उपयोग सुनिश्चित करें। इस कोड का उपयोग करने के लिए:

  1. अपनी पसंद के आईडीई में एक नया डिफ़ॉल्ट वैडिन ऐप बनाएं।
  2. संशोधित करने से पहले उस उदाहरण को सफलतापूर्वक चलाएं।
  3. नीचे दिए गए कोड के साथ MyUI कक्षा की सामग्री को बदलें।

@Push एनोटेशन

बीच में कोड के अलावा, ध्यान दें कि किस प्रकार हम MyUI वर्ग परिभाषा के @Push एनोटेशन गयी।

उदाहरण कोड

package com.example.pushvaadinapp; 

import com.vaadin.annotations.Push; 
import com.vaadin.annotations.Theme; 
import com.vaadin.annotations.VaadinServletConfiguration; 
import com.vaadin.annotations.Widgetset; 
import com.vaadin.server.VaadinRequest; 
import com.vaadin.server.VaadinServlet; 
import com.vaadin.ui.Label; 
import com.vaadin.ui.UI; 
import javax.servlet.annotation.WebServlet; 

/** 
* © 2014 Basil Bourque. This source code may be used freely forever by anyone absolving me of any and all responsibility. 
* 
* +----------------------------+ 
* | NOT FOR PRODUCTION USE! | 
* +----------------------------+ 
*  Sleeping threads is an awkward way to manage scheduled background work. 
*  By the way, never use a 'Timer' in a Servlet environment. 
*  Use an Executor instead, probably a ScheduledExecutorService. 
*/ 
@Push 
@Theme ("mytheme") 
@Widgetset ("com.example.pushvaadinapp.MyAppWidgetset") 
public class MyUI extends UI 
{ 

    Label label = new Label("Now : "); 

    @Override 
    protected void init (VaadinRequest vaadinRequest) 
    { 
     // Put a widget on this UI. In real work we would use a Layout. 
     setContent(this.label); 

     // Start the data feed thread 
     new FeederThread().start(); 
    } 

    @WebServlet (urlPatterns = "/*" , name = "MyUIServlet" , asyncSupported = true) 
    @VaadinServletConfiguration (ui = MyUI.class , productionMode = false) 
    public static class MyUIServlet extends VaadinServlet 
    { 
    } 

    public void tellTime() 
    { 
     label.setValue("Now : " + new java.util.Date()); // If Java 8, use: Instant.now(). Or, in Joda-Time: DateTime.now(). 
    } 

    class FeederThread extends Thread 
    { 

     int count = 0; 

     @Override 
     public void run() 
     { 
      try { 
       // Update the data for a while 
       while (count < 100) { 
        Thread.sleep(1000); 

        // Calling special 'access' method on UI object, for inter-thread communication. 
        access(new Runnable() 
        { 
         @Override 
         public void run() 
         { 
          count ++; 
          tellTime(); 
         } 
        }); 
       } 

       // Inform that we have stopped running 
       // Calling special 'access' method on UI object, for inter-thread communication. 
       access(new Runnable() 
       { 
        @Override 
        public void run() 
        { 
         label.setValue("Done."); 
        } 
       }); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+2

क्या विजेटसेट आवश्यक है? मेरा अनुमान है: नहीं। जावा.टाइम के साथ परेशान क्यों करें (और पूरे अनुच्छेद के लिए समझाएं), जब लक्ष्य कम से कम काम करने वाला उदाहरण है? बस काउंटर या 'नई तिथि()। toString() 'का उपयोग करें। और आपके प्रश्न में आप कहते हैं कि आप एक साधारण परीक्षण ऐप चाहते थे जहां आप इस सामान का परीक्षण कर सकते हैं। तो SO ** उपयोगकर्ताओं के लिए github पर अपनी ** पूरी परियोजना ** (अपने पोम/ग्रेडल/younameit सहित) क्यों न डालें, जो आपका प्रश्न ढूंढता है? – cfrick

+0

@cfrick सभी अच्छे अंक; धन्यवाद। [ए] मैंने आपके द्वारा सुझाए गए जावा.टाइम उपयोग और चर्चा को मार डाला। [बी] विजेटसेट के लिए, यह एनोटेशन नई मल्टी-मॉड्यूल प्रोजेक्ट में डिफ़ॉल्ट है [नया मैवेन आर्केटाइप] द्वारा निर्मित (https://vaadin.com/blog/-/blogs/vaadin-7-3-7 -और-न्यू-मेवेन-आर्केटीप्स), 1.1.3 अपडेट द्वारा वितरित [नेटबीन के लिए वैडिन प्लगइन] (http://plugins.netbeans.org/plugin/50531/vaadin-plug-in-for-netbeans)। इसके अलावा, अस्पष्ट दस्तावेज़ का मतलब है कि विजेटसेट (और थीम) अब स्वचालित रूप से 'उत्पादन' मॉड्यूल के संकलन में अनुकूलित है। तो मैं इसे जगह में छोड़ दूंगा। –

1

Here एक सरल लेकिन पूर्ण Vaadin 8 उदाहरण दर्शाता है कि कैसे Broadcaster patternVaadin docs में वर्णित का उपयोग कर विभिन्न UI के बीच संदेश भेजने के लिए सर्वर धक्का और जावा ईई संदेश सेवा API का उपयोग करने के लिए है। यदि आप अन्य उपयोगकर्ताओं को संदेश या प्रसारण में रूचि नहीं रखते हैं, तो केवल ReceiveMessageUI देखें।

  1. एन्नोटेट जब यह तक पहुँचने सर्वर धक्का (डिफ़ॉल्ट रूप से एक WebSocket कनेक्शन पर) access() साथ
  2. लपेटें यूआई अद्यतन सक्षम करने के लिए @Push साथ Vaadin यूआई:

    सिद्धांत रूप में यह सब निम्नलिखित करने पर निर्भर करता

    getUI().access(() -> layout.addComponent(new Label("Hello!"))); 
    
  3. का उपयोग करें: अन्य धागे से, अद्यतन भेजने डिफ़ॉल्ट रूप से अपने आप होता है 210 अन्य उपयोगकर्ताओं को संदेश प्रकाशित करने और उनके संदेशों की सदस्यता लेने के लिए।

+0

"ब्रॉडकास्टर पैटर्न" से आपका मतलब है [* पर्यवेक्षक * पैटर्न] (https://en.wikipedia.org/wiki/Observer_pattern) या कुछ और? –

+1

कुछ और, मेरा मतलब है [ब्रॉडकास्टर पैटर्न] (https://github.com/vaadin/framework/blob/master/documentation/advanced/advanced-push.asciidoc#the-broadcaster) वैडिन दस्तावेज़ों में प्रलेखित। – mrts

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