Thursday, June 25, 2009

JPA в Google App Engine

Як відомо, робота зі стореджем в google app engine зроблена через JDO i JPA. В якості імплементації цих технологій google вибрав DataNucleus. Так от, якщо з JDO наче все більш чи меньше все працює, то з підтримкою JPA не все так добре. А саме, якщо у вас є параметризований запит і ви очікуєте отримати колекцію об'єктів, то, скоріше за все, у вас нічого не вийде. Щоб отримати колекцію з результатами, як правило, визивається javax.persistence.Query.getResultList(). Реалізація цього методу знаходиться у класі org.datanucleus.jpa.JPAQuery. Так от в момент виконання запиту до бази, ця реалізація замість того щоб передати список параметрів зі значеннями. передає null - query.executeWithMap(null). Ну і ви відповідно отримуєте NullPointerException.

2 comments:

  1. Ахрєнєть :) Це блін якась лажа, якщо чесно. Може просто там щось десь треба наконфігірувати? Тіпа jndi чи щось таке?

    ReplyDelete
  2. Більш детальний аналіз показав, що при визові метода setMaxResults виконується скидання стану класу і, таким чином, всі параметри які були передані до цього затераються. Висновок: параметри передавати в останню чергу.
    Бага зареєстрована за номером 38 і в останній версії java sdk пофікшена

    ReplyDelete