我正在使用 Glassfish 版本 3,当我尝试编译应用程序时,此错误日志出现在日志文件中,
SEVERE: The annotation symbol defined in super-class is not compatible with Session ejb ManagerDaoImpl
注释是@Singleton
和@Stateless
有没有办法解决这个问题?
我正在使用 Glassfish 版本 3,当我尝试编译应用程序时,此错误日志出现在日志文件中,
SEVERE: The annotation symbol defined in super-class is not compatible with Session ejb ManagerDaoImpl
注释是@Singleton
和@Stateless
有没有办法解决这个问题?
带有@Singleton
注解的bean 用于Java VM 的一个实例,带有注释的bean 用于Java VM@Stateless
的多个实例。
如果您有公共方法,则可以定义一个基类,如下所示:
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
}
}
我们的 bean 是 ;
@Stateless
@Singleton
public class ManagerDaoImpl extends AbstractDAO<X> implements ManagerDAO {
@EJB
PersonDAO personDao;
@PersistenceContext(unitName = "PoyrazPU")
private EntityManager em;
. . .
严重:超类中定义的注解符号与 Session ejb 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 仅允许用于单例会话 bean
@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));
}
}
}