2011-12-20 17 views
6

Bu kurulumla ilgili bir sorunum var ve günlükleri bile görüntüleyemiyorum.@Singleton, @Startup, @PostConstruct, EJB3.1 ve Glassfishv3.0.1 üzerinde çalışmıyor.

Bu benim @Singleton@Startup EJB:

SchedulerEJB
@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", "*", "*"); 
    } 
} 

:

@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 pom:

//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

Hata ayıklayabilir mi? Ayrıca, commons günlüğü kullanarak sorunları vardı, slf4j 'LoggerFactory.getLogger (SchedulerStartUp.class)' –

+0

günlüğü kullanarak uygulama sona erdikten sonra sona erdi, bu bağlamda kullanıldığında sadece görünüyor gibi görünüyor :( –

+0

hata ayıklayın? –

cevap

6

Sen @DependsOn bir özelliği olarak fasulye geçersiz türü var. DependsOn, Singleton ve Vatansız arasında değil, iki Singleton oturum fasulyesi arasındaki bağımlılığı ifade etmek içindir. SchedulerEJB'yi Singleton olarak değiştirmeli veya bağımlılığı kaldırmalısınız.

Singleton değişiklik SchedulerEJB karar verirseniz, o zaman @DepensOn ayrıca, gerekli değildir, çünkü (dan EJB 3.1 spesifikasyonu):

Not biri Singleton sadece kendi PostConstruct yönteminden başka Singleton çağırmak gerekiyorsa o , hiçbir açık sipariş meta verileri gereklidir. Bu durumda, ilk Singleton, hedef Tektonu çağırmak için sadece bir ejb referansını kullanır. Orada, ejb referansının (ya enjeksiyon ya da arama yoluyla) edinimi, 'un ilgili tekil fasulye örneğinin gerçek yaratımını zorunlu olarak ima etmediğini göstermektedir.

+0

Ama ben @Stateless olmak için ihtiyacım var, herhangi bir geçici çözüm? Belki de kaldırmak gerekir' @DependsOn 'tamamen? ama benim' @EJB 'çalışacak mı? (( –

+0

' @EJB 'çalışmıyor, yukarıda' SchedulerEJB 'isimli fasulyeyi başlatmak için herhangi bir yol var mı? –

+0

Vatansız olarak nitelendirebileceğim bir durumum yok. singleton dan fasulye, ama ben SchedulerEJB daha önce başlatılması gerekir neden kodun diğer bölümlerinde herhangi bir gizli ihtiyaç olmadığını varsayarak, @DependsOn çalışmasının kaldırılması varsayalım. Kapsayıcı, geçerli kodunuzda herhangi bir ekleme yapmadan kullanılabilir olduğunu garanti etmelidir. –