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
この問題を解決する方法はありますか?
アノテーション付きのBean@Singleton
はJava VMによる1インスタンス分、アノテーション付きのBean@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
}
}
私たちの豆は;
@Stateless
@Singleton
public class ManagerDaoImpl extends AbstractDAO<X> implements ManagerDAO {
@EJB
PersonDAO personDao;
@PersistenceContext(unitName = "PoyrazPU")
private EntityManager em;
. . .
SEVERE: スーパークラスで定義されたアノテーション シンボルは、Session ejb ManagerDaoImpl ++ と互換性がありません @Singleton の代わりに @LocalBean @Local(LocalFoo.class) を使用して解決しました
新しい Bean は ;
@Stateless
@LocalBean
@Local(MAanagerDAO.class)
public class ManagerDaoImpl extends AbstractDAO<X> implements ManagerDAO {
@EJB
PersonDAO personDao;
@PersistenceContext(unitName = "PoyrazPU")
private EntityManager em;
問題は解決しましたが、@Lock アノテーションに関して新たな問題が発生しています。このエラーが発生しました。
SEVERE: @Lock は、singleton セッション 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));
}
}
}