2013-08-04 2 views
1

Я работаю на Glassfish версии 3, когда я пытаюсь скомпилировать приложение появляется этот журнал ошибок в лог-файле,Java EE EJB 3.0 Аннотации

SEVERE: The annotation symbol defined in super-class is not compatible with Session ejb ManagerDaoImpl 

Аннотации @Singleton и @Stateless

ли есть ли способ решить эту проблему?

+0

Сообщение EJB-значимый код и полное StackTrace. –

ответ

0

Наша фасоль;

@Stateless 
@Singleton 
public class ManagerDaoImpl extends AbstractDAO<X> implements ManagerDAO { 

@EJB 
PersonDAO personDao; 
@PersistenceContext(unitName = "PoyrazPU") 
private EntityManager em; 

. . .

СИЛЬНЫЙ: Символ аннотаций определяется в супер-класса не совместим с сеансного ManagerDaoImpl ++, решаемые с помощью @LocalBean @LOCAL (LocalFoo.class) вместо @Singleton

Наш новый боб;

@Stateless 
@LocalBean 
@Local(MAanagerDAO.class) 
public class ManagerDaoImpl extends AbstractDAO<X> implements ManagerDAO { 

@EJB 
PersonDAO personDao; 
@PersistenceContext(unitName = "PoyrazPU") 
private EntityManager em; 

Проблема решена, но есть новая проблема с аннотацией @Lock. Я получил эту ошибку,

СИЛЬНЫЙ: @Lock разрешается только для одноэлементных сеансовых компонентов

@Asynchronous 
@Lock() 
@AccessTimeout(-1) 
@Override 
public void doStuff(Mass mass) { 

    for (int i = 0; i < RETRY_COUNT; i++) { 
     notify(mass); 
     try { 
      Thread.sleep(TIME); 
     } catch (InterruptedException ex) { 
      BeanLogger.logError("Thread sleep threw exception while informing masses: ", new ThreadSleepException(ex)); 

     } 
    } 
} 
+0

Удалось ли вам решить эту проблему? Как? –

3

Боб с @Singleton аннотации для одного экземпляра Java VM, а компонент с @Stateless - это несколько экземпляров Java VM.

Если у вас есть методы Общин, вы можете определить базовый класс, что-то вроде следующего:

public abstract class AbstractBean { 
    public void commonMethod() { 
     // do common operation 
    } 
} 

public interface LocalFoo { 
    public void foo(); 
} 

public interface RemoteFoo { 
    public void foo(); 
} 

@LocalBean 
@Local(LocalFoo.class) 
@Remote(RemoteFoo.class) 
@Stateless 
public class FooBean extends AbstractBean implements LocalFoo, RemoteFoo { 
    @Override 
    public void foo() { 
     // do something 
    } 
} 
+0

Проблема решена, но есть новая проблема с аннотацией @Lock. Я получил эту ошибку, – Poyraz

+0

Измените аннотацию '@ Stateless' на' @ Singleton' в вашем компоненте. –

Смежные вопросы