Google App Engine JDO Persistence Manager и 500 ошибка сервера - PullRequest
1 голос
/ 07 марта 2011

Каждый раз, когда я запускаю свой сервис, я получаю ошибку 500, так как сообщение Google почти ничего не говорит мне, что я начал загружать сервис и комментировать части. Кажется, что это нормально работает без использования объекта диспетчера персистентности JDO. Было бы здорово, если бы кто-то мог быстро взглянуть на мой код и сказать мне, правильно ли я использую JDO Persistence Manager. Это бы мне очень помогло.

@Path("/surveymakerpro/")
public class SurveyResource {

    // JDO Persistence object
    private PersistenceManager surveyDataStore = SurveyPersistenceManagerFactory
            .get().getPersistenceManager();

    @GET
    @Produces({ "application/xml", "application/json" })
    @Path("/survey/{surveyName}/")
    public Survey getSurvey(@PathParam("surveyName") String surveyName) {

        Survey e = surveyDataStore.getObjectById(Survey.class, surveyName);

        return e;
    }

    @GET
    @Produces({ "application/xml", "application/json" })
    @Path("/allsurveys")
    public SurveyNames getListOfSurveys() {

        //test code

        SurveyQuestion one = new SurveyQuestion();
        one.setAnswer("Yes");
        one.setId(3);
        one.setQuestion("Do you like cake?");

        SurveyQuestion two = new SurveyQuestion();
        two.setAnswer("Yes");
        two.setId(3);
        two.setQuestion("Do you like cake?");

        List<SurveyConverter> sur = new ArrayList<SurveyConverter>();
        sur.add(new SurveyConverter(one));
        sur.add(new SurveyConverter(two));

        Survey surv = new Survey(sur);

        surv.setSurveyName("Test Survey");

        Survey survv = new Survey(sur);
        survv.setSurveyName("sdd");


        surveyDataStore.makePersistent(surv);
        surveyDataStore.makePersistent(survv);

        //test code

        List<String> surveyNames = new ArrayList<String>();

        Extent<Survey> extent = surveyDataStore.getExtent(Survey.class, false);

        for (Survey survey : extent) {

            surveyNames.add(survey.getSurveyName());

        }
        extent.closeAll();

        SurveyNames surveyName = new SurveyNames(surveyNames);

        surveyDataStore.close();
        return surveyName;

    }

    @POST
    @Consumes({ MediaType.APPLICATION_XML })
    @Path("/addSurvey")
    public void addSurvey(Survey survey) {

        surveyDataStore.makePersistent(survey);

    }

    // This method gets a survey object stores its data into a TakenSurvey
    // object and stores it
    // in the Google data store.
    @POST
    @Consumes({ MediaType.APPLICATION_XML })
    @Path("/addTakenSurvey")
    public void addTakenSurvey(Survey survey) {

        List<SurveyConverter> surveyConverter = survey.getSurvey();
        TakenSurvey takenSurvey = new TakenSurvey();

        for (SurveyConverter s : surveyConverter) {

            TakenSurveyQuestion tsq = new TakenSurveyQuestion(s.getId(),
                    s.getQuestion(), s.getAnswer());

            takenSurvey.getSurvey().add(tsq);
        }

        surveyDataStore.makePersistent(takenSurvey);

    }

    @GET
    @Produces({ "application/xml", "application/json" })
    @Path("/analysis/{surveyName}/{question}/")
    public SurveyDataConverter analyzeSurveys(
            @PathParam("surveyName") String surveyName,
            @PathParam("question") String questionNum) {

        Extent<TakenSurvey> extent = surveyDataStore.getExtent(
                TakenSurvey.class, false);

        List<TakenSurvey> takenSurveys = new ArrayList<TakenSurvey>();

        for (TakenSurvey ts : extent) {

            if (ts.getSurveyName().equals(surveyName)) {

                takenSurveys.add(ts);
            }

        }
        extent.closeAll();

        SurveyAnalyzer analyze = new SurveyAnalyzer(takenSurveys);
        analyze.getData();
        SurveyData data = analyze.getSurveyData(Integer.parseInt(questionNum));

        return new SurveyDataConverter(data);

    }

    // remove survey

    // remove taken survey

}

1 Ответ

2 голосов
/ 08 марта 2011

Не ожидайте, что страница с ошибкой даст вам трассировку стека - это было бы крайне плохой практикой как из соображений безопасности, так и из-за удобства использования.Вместо этого исключения регистрируются в консоли администратора App Engine в разделе «ведение журнала».Трассировка стека скажет вам, что не так;если вы все еще не можете понять это, обновите свой вопрос, чтобы включить его, чтобы мы могли помочь вам в дальнейшем.

...