簡體   English   中英

Java EE EJB 3.0注釋

[英]Java EE EJB 3.0 Annotations

我正在使用Glassfish版本3,當我嘗試編譯應用程序時,此錯誤日志出現在日志文件中,

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

注釋是@Singleton@Stateless

有什么方法可以解決這個問題嗎?

帶有@Singleton注釋的bean用於Java VM的一個實例,帶有@Stateless的bean用於Java VM的多個實例。

如果你有commons方法,你可以定義一個基類,如下所示:

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

我們的豆是;

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

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

嚴重:超類中定義的注釋符號與使用@LocalBean @Local(LocalFoo.class)而不是@Singleton的Session ejb ManagerDaoImpl ++ SOLVED不兼容

我們的新豆是;

@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));

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM