2

Glassfish バージョン 3 で作業しています。アプリをコンパイルしようとすると、このエラー ログがログ ファイルに表示されます。

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

注釈は@Singleton@Stateless

この問題を解決する方法はありますか?

4

2 に答える 2

4

アノテーション付きの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
    }
}  
于 2013-08-04T21:15:37.933 に答える
0

私たちの豆は;

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

        }
    }
}
于 2013-08-05T09:56:48.423 に答える