論理的に理解できないエラーがあります。RSS処理アプリを実装しています。ロジックは、ユーザーが RSS フィードのリンクを取得し、データベースに追加することです。フィードがデータベースに既に存在する場合、フィードの ID を取得し、それをユーザーのサブスクリプションに追加します。コードは次のとおりです。
if (existfeed == null) {
feed = loadFeed(url, syndfeed);
em.persist(feed);
if (feed.getFeedId() == null) {
return "Persist of feed failed";
}
uf.setFeedId(feed);
uf.setUserId(user_id);
try {
em.persist(uf);
loadFeedItems(syndfeed, feed);
//boolean ufadded = uf.addUserFeed(em);
} catch (NoResultException ex) {
return "Persist of userfeed failed";
} catch (PersistenceException ex) {
return "Persist of userfeed failed, em";
}
//boolean ufadded = uf.addUserFeed(em);
//return true;
return "Feed added";
} else {
dbFeed = getFeed(feed.getLink());
if(dbFeed==null)
return "Faile to get feed from database";
//http://appleinsider.ru/feed
uf.setFeedId(dbFeed);
uf.setUserId(user_id);
try {
em.persist(uf);
} catch (PersistenceException ex) {
//System.out.println(ex.getMessage());
return "Unable to persist userfeed";
}
return "Feed added, existing";
}
ただし、ユーザーがフィードを追加した場合、別のユーザーはそれを追加できず、次のエラーが発生します。
Caused by: java.lang.NullPointerException
at ejb.FeedBean.addNewFeed(FeedBean.java:203) [Group_7_Impl_uwx09sua-ejb.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [classes.jar:1.6.0_51]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [classes.jar:1.6.0_51]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [classes.jar:1.6.0_51]
at java.lang.reflect.Method.invoke(Method.java:597) [classes.jar:1.6.0_51]
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory
なぜ失敗するのかわかりません。私の意見の 1 つは、おそらく EntityManager が null であるということです。しかし、ifステートメントの最初の部分では機能します。
更新: EntityManager find メソッドを使用しようとしましたが、同じエラーが発生しました。したがって、間違いなく、if ステートメントの 2 番目の部分で EntityManager が何らかの形で null になります。
すべての助けに感謝します。