我工作的Glassfish的版本3,當我試圖編譯應用這個錯誤日誌出現在日誌文件中,的Java EE EJB 3.0批註
SEVERE: The annotation symbol defined in super-class is not compatible with Session ejb ManagerDaoImpl
的註解是@Singleton
和@Stateless
是有沒有辦法解決這個問題?
我工作的Glassfish的版本3,當我試圖編譯應用這個錯誤日誌出現在日誌文件中,的Java EE EJB 3.0批註
SEVERE: The annotation symbol defined in super-class is not compatible with Session ejb ManagerDaoImpl
的註解是@Singleton
和@Stateless
是有沒有辦法解決這個問題?
我們的bean是;
@Stateless
@Singleton
public class ManagerDaoImpl extends AbstractDAO<X> implements ManagerDAO {
@EJB
PersonDAO personDao;
@PersistenceContext(unitName = "PoyrazPU")
private EntityManager em;
。 。 。
重度:在超類中定義的註釋符號不與會話EJB ManagerDaoImpl ++通過使用@LocalBean @Local(LocalFoo.class)解決,而不是@Singleton
我們的新bean是兼容;
@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));
}
}
}
你是否設法解決這個問題?怎麼樣? –
具有@Singleton
註釋的bean由Java VM執行一個實例,而具有@Stateless
的bean由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
}
}
問題已解決,但有關於@Lock註釋的新問題。我得到這個錯誤, – Poyraz
在你的bean中用'@ Singleton'改變'@ Stateless'註解。 –
後的EJB有意義的代碼和完整的堆棧跟蹤。 –