java जर्सी 2 में एच.के. 2 में ईगरसिंगलिंगटन के साथ क्या संबंध है?




rest jersey (3)

जर्सी (लेकिन जो जल्द ही एकीकृत हो जाएगा) से एकीकृत एचके 2 के बाद के रिलीज में आप उन सेवाओं को हो सकते हैं, जिन्हें @ आपातकाल के रूप में चिह्नित किया गया है ये मूल रूप से जैसे ही वे hk2 में जुड़ जाते हैं, आरंभ हो जाते हैं। हालांकि, यह काम करने के लिए आपको सिस्टम को तत्काल संदर्भ जोड़ना होगा (जैसे https://hk2.java.net/2.2.0-b27/apidocs/org/glassfish/hk2/utilities/ServiceLocatorUtilities.html # सक्षमआममिडियाटस्कप% 28org.glassfish.hk2.api.ServiceLocator% 29 )

जर्सी टीम के साथ लॉबी करने का यह एक अच्छा विचार होगा कि यह दायरा / संदर्भ युग्म को डिफ़ॉल्ट रूप से सक्षम किया गया हो (वे पहले से ही पेर्टहैड क्षेत्र जैसी चीजों को सक्षम करते हैं)

मैंने यह मुद्दा बनाया है: https://java.net/jira/browse/JERSEY-2291 अनुरोध करने के लिए कि जर्सी डिफ़ॉल्ट रूप से @ प्राथमिक सेवाएं सक्षम करें

मैं जर्सी 2 का उपयोग करते हुए एक REST एपीआई विकसित कर रहा हूं और मुझे कुछ कक्षाओं की आवश्यकता होती है, शुरू करने के लिए तत्काल और न केवल जब कुछ संसाधन अनुरोध इसे ट्रिगर करता है

तो मैं क्या पूछ रहा हूं: मैं कैसे प्राप्त कर सकता हूं कि यहाँ नीचे परिभाषित SomethingImpl का एक उदाहरण बनाया गया है सर्वर पर शुरू होता है और न कि जब कोई किसी संसाधन को मारता है? Guice में मैं .asEagerSingleton() उपयोग करेगा।

आवेदन:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new AbstractBinder() {
            @Override
            protected void configure() {
                bind(" else").to(String.class);
                bind(SomethingImpl.class).to(Something.class).in(Singleton.class);
            }
        });

        register(SomeResource.class);
    }
}

कुछ कुछ:

public interface Something {
   String something();
}

public class SomethingImpl implements Something {
    @Inject
    public SomethingImpl(final String something) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println(something() + something);

                    try {
                        Thread.sleep(4000);

                    } catch (final InterruptedException e) {
                        break;
                    }
                }
            }
        }).start();
    }

    @Override
    public String something() {
        return "Something";
    }
}

कुछ संसाधन:

@Path("/")
public class SomeResource {
    private final Something something;

    @Inject
    public SomeResource(final Something something) {
        this.something = something;
    }

    @GET
    @Path("something")
    public String something() {
        return something.something();
    }
}

क्या msknapp कहा इसके अलावा, आप servlet प्रसंग श्रोता के लिए @WebListener का उपयोग भी कर सकते हैं ताकि आप web.xml में श्रोता को जोड़ने की जरूरत नहीं है। तब आपका श्रोता दिखेगा

@WebListener
public class SomethingListener implements ServletContextListener {
    @Inject
    private final Something something;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //put code about something here
    }
}





hk2