2011-12-20 8 views
6

पर काम नहीं करता है मुझे इस सेटअप में कोई समस्या है और मैं लॉग भी नहीं देख सकता।@Singleton, @Startup, @PostConstruct EJB3.1 और Glassfishv3.0.1

यह मेरा @Singleton@Startup EJB है:

@Singleton 
@Startup 
@DependsOn("SchedulerEJB") 
public class SchedulerStartUp { 

    private static Logger log = Logger.getLogger(SchedulerStartUp.class); 

    @EJB 
    SchedulerEJB schedEJB; 

    @PostConstruct 
    public void atStartup() { 
     log.info("startUp") 
     System.out.println("startUp"); 

     schedEJB.cancelTimer("EBlastScheduler"); 
     schedEJB.createTimer("*/1", "*", "*"); 
    } 
} 

SchedulerEJB:

@Stateless 
public class SchedulerEJB { 

    @Resource 
    TimerService timerService;   

    public cancelTimer(String timerInfo){/*...*/} 

    public createTimer(String sec, String min, String hour) {/*...*/} 

    @Timeout 
    public void execute(Timer timer) {/*...*/} 
} 

Maven पोम:

//Been Using Glassfishv3.0.1 and EJB3.1 with a dependency of: 
<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
    <scope>provided</scope> 
</dependency> 
+0

क्या आप इसे डीबग कर सकते हैं? इसके अलावा, मुझे कॉमन्स लॉगिंग का उपयोग करने में समस्याएं थीं, मैं slf4j 'LoggerFactory.getLogger (SchedulerStartUp.class)' –

+0

का उपयोग करके समाप्त हुआ, एप्लिकेशन को तैनात करते समय लॉगिंग ठीक हो जाती है, ऐसा लगता है कि इस संदर्भ में उपयोग होने पर ही ऐसा होता है :( –

+0

क्या आप वास्तव में इसे डीबग करें? –

उत्तर

6

आप @DependsOn की विशेषता के रूप सेम के अमान्य प्रकार की है। निर्भर करता है कि सिंगलटन और स्टेटलेस के बीच नहीं, दो सिंगलटन सत्र बीन्स के बीच निर्भरता व्यक्त करने के लिए है। आपको शेड्यूलरईजेबी को सिंगलटन होने या निर्भरता को हटाने के लिए बदलना चाहिए।

आप सिंगलटन करने के लिए परिवर्तन SchedulerEJB निर्णय लेते हैं, तो @DepensOn भी जरूरत नहीं है, क्योंकि (EJB 3.1 से विनिर्देश):

नोट अगर एक सिंगलटन केवल उसके PostConstruct विधि से दूसरे सिंगलटन आह्वान करने के लिए की जरूरत है , कोई स्पष्ट क्रम मेटाडेटा आवश्यक है। उस स्थिति में, पहला सिंगलटन लक्ष्य सिंगलटन को आमंत्रित करने के लिए केवल एक ejb संदर्भ का उपयोग करेगा। वहां, का अधिग्रहण ईजेबी संदर्भ (या तो इंजेक्शन या लुकअप के माध्यम से) आवश्यक सिंगलटन बीन उदाहरण के वास्तविक निर्माण को इंगित करता है।

+0

लेकिन मुझे इसे किसी भी कामकाज के लिए @ स्टेटलेस होना चाहिए? शायद मुझे '@DependsOn' को हटा देना चाहिए 'पूरी तरह से? लेकिन क्या मेरा' @EJB 'काम करेगा ?:( –

+0

' @EJB 'काम नहीं करता है, उपरोक्त' शेड्यूलरईजेबी 'नामक बीन को शुरू करने का कोई तरीका? –

+0

मेरे पास ऐसी स्थिति नहीं है जहां मैं स्टेटलेस कहूंगा सिंगलटन से बीन, लेकिन मुझे लगता है कि @DependsOn को हटाने का काम करना चाहिए, यह मानते हुए कि कोड के अन्य हिस्सों में कोई छुपी आवश्यकता नहीं है क्यों शेड्यूलरईजेबी को पहले शुरू किया जाना चाहिए। कंटेनर को यह गारंटी देनी चाहिए कि बिना किसी अतिरिक्त के आपके वर्तमान कोड के साथ उदाहरण उपलब्ध है। –

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