データストアにオブジェクト (JPA) を追加しようとすると問題が発生します。App Engine にデプロイしています。私はWeb開発に慣れていないので、問題が発生したと思われる場所から各ステップの前後に印刷を実行しようとすることで、非常に基本的なデバッグを実行しようとしました。どうやら、Entity Managerが作成されていないことが問題のようで、そのため(当然)データベースへの追加は行われていません。これが私のコードです:
// all the parameters are previously initialized.
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
Symptoms aSymptoms = new Symptoms(thePatientId,theHeadacke,theMorningHeadacke,theDiziness,theFatigue,theMuscularFatigue,
theTinitus,theVisualImpairment,theWeightLoss,theHeartPalpitation,thePallor,theWeightProblems,theUpperBodyObesity,
theBrutalIncreaseDiastolic,theLumbarPain,theFever,thePolyuria,theSweating,thePositionChangeDiziness);
// using a SymptomsDAOJPA object I can perform add in the datastore.
SymptomsDAO dao = new SymptomsDAOJPA();
try {
// Save the symptom.
out.println("Entered try in doPost.");
dao.add(aSymptoms);
resp.setStatus(HttpServletResponse.SC_OK);
out.println("Saved symptom.");
out.println(aSymptoms);
} catch (Exception e) {
resp.setStatus(HttpServletResponse.SC_EXPECTATION_FAILED);
out.println("Problem saving symptom.");
}
}
add(symptom) メソッドは次のとおりです。
@Override
public void add(Symptoms setSymptoms) {
EntityManager em = null;
System.out.println("Entity Manager is null so far.");
try {
em = EMF.get().createEntityManager();
System.out.println("Created Entity Manager.");
SymptomsJPA setSymtomsJPA = new SymptomsJPA(setSymptoms);
System.out.println("Created SymptomsJPA object to be added in the database.");
em.persist(setSymtomsJPA);
} finally {
em.close();
}
}
出力される最後のメッセージは次のとおりです。Entity Manager is null so far. したがって、私の仮定は、これがうまくいかないことです:
em = EMF.get().createEntityManager();
ここに私のEMFクラスがあります:
public final class EMF {
private static final EntityManagerFactory emfInstance = Persistence
.createEntityManagerFactory("transactions-optional");
private EMF() {
// intentionally empty
}
public static EntityManagerFactory get() {
return emfInstance;
}
}
そして、私のpersistance.xml(部分的)は次のとおりです。
<persistence-unit name="transactions-optional">
<provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
<properties>
<property name="datanucleus.NontransactionalRead" value="true"/>
<property name="datanucleus.NontransactionalWrite" value="true"/>
<property name="datanucleus.ConnectionURL" value="appengine"/>
</properties>
</persistence-unit>
Entity Manager が作成されない理由がわかりません。私はこのコードを使用してきましたが、機能しましたが、今は機能せず、何が欠けているのかわかりません。これに関する考えは本当に感謝しています。
ありがとうございました。