Glassfish 3.1.2.2を使用しており、認証情報を収集して、Glassfishアプリケーションサーバーに接続されているMySQLデータベースに保存したいと考えています。これまでのところ、ejb-projectに配置したカスタマイズされた監査モジュールの実装に成功しました。これは今のところ問題なく動作します。
ここで、ログインの試行が失敗したときにいくつかのフラグとカウンターを設定したいと思います。この目的のために、EntityManagerインスタンスをAuditModuleクラス/オブジェクトに注入しようとしましたが、注入が失敗するため、これは常にnullポインター例外をスローします。
私はすでに@Statelessアノテーションを追加しようとしましたが(このクラスをコンテナー管理する必要があることを伝えるため)、成功しませんでした。エンティティマネージャインスタンス「em」はまだnullです。
これが私のカスタマイズされた監査モジュールです:
@Stateless
public class CustomAuditModule extends AuditModule {
@PersistenceContext(unitName = "MyPersistenceUnit-ejbPU")
private EntityManager em;
@Override
public void init(Properties props) {
this.props = props;
}
@Override
public void authentication(String username, String realm, boolean success) {
if(success) {
try {
User user = em.createQuery("SELECT u FROM User u WHERE u.name='"+username+"'", User.class).getSingleResult();
user.setLastLoginFail(new Long(-1L));
user.setLoginFails(0);
em.merge(user);
em.flush();
} catch(NoResultException ex) {
Logger.getLogger(CustomAuditModule.class.getName()).log(Level.WARNING, "User "+username+" does not exist.");
}
} else {
try {
User user = em.createQuery("SELECT u FROM User u WHERE u.name='"+username+"'", User.class).getSingleResult();
user.setLastLoginFail(System.currentTimeMillis());
int fails = user.getLoginFails().intValue();
fails++;
user.setLoginFails(fails);
em.merge(user);
em.flush();
} catch(NoResultException ex) {
Logger.getLogger(CustomAuditModule.class.getName()).log(Level.WARNING, "User "+username+" does not exist.");
}
}
}
@Override
public void ejbInvocation(String user, String ejb, String method, boolean success) {
Logger.getLogger(CustomAuditModule.class.getName()).log(Level.INFO, "EJB Invocation.");
}
@Override
public void serverStarted() {
Logger.getLogger(CustomAuditModule.class.getName()).log(Level.INFO, "Server Started.");
}
@Override
public void serverShutdown() {
Logger.getLogger(CustomAuditModule.class.getName()).log(Level.INFO, "Server Shutdown.");
}
}
jdbcリソースにアクセスする方法/EntityManagerインスタンスを正しく挿入する方法を誰かが考えていますか?
よろしくお願いします!