Гибернация умирает, когда в проект добавляются библиотеки JAX - PullRequest
0 голосов
/ 03 марта 2011

Пожалуйста, потерпите меня, я из .net и новичок в мире Java.

У меня есть веб-сайт Spring MVC 3, который использует Hibernate в качестве DAL. Я пытаюсь добавить пакет веб-службы в проект.

Вот проблема. Как только я добавляю библиотеки core и jaxb JAX-RS в свое решение (библиотеки, которые позволяют мне добавлять методы REST-JAX в мои классы сервисных проектов), hibernate перестает работать по всему проекту (включая мой веб-сайт). Любой вызов hibernate, который запрашивает базу данных (findbyblah ()), генерирует исключение NullPointerException. Когда я удаляю обе эти основные библиотеки, очищаю и перестраиваю, мой веб-сайт снова начинает работать.

Мне просто нужно иметь возможность реализовать несколько методов обслуживания с моего сайта. Может ли кто-нибудь указать мне правильное направление? Спасибо.

ОБНОВЛЕНИЕ: Вот трассировка стека:

java.lang.NullPointerException
    com.myeclipse.hibernate.ServicetypeDAO.findAll(ServicetypeDAO.java:100)
    com.indixium.models.RegistrationModel.<init>(RegistrationModel.java:27)
    com.indixium.controllers.RegisterController.get(RegisterController.java:29)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

ОБНОВЛЕНИЕ СНОВА:

Итак, я нашел две статьи, которые выглядят многообещающими:

http://www.hildeberto.com/2008/05/hibernate-and-jersey-conflict-on.html

описывает, что и hibernate, и jersey используют asm.jar, но разные версии, поэтому существует конфликтующее поведение. Это говорит, чтобы решить это:

Чтобы разрешить этот конфликт, используйте cglib-nodep.jar вместо cglib.jar и оставьте версию 3.x ASM на Джерси. cglib-nodep.jar включает в себя некоторые классы ASM, требуемые cglib.jar, изменяя имя пакета, чтобы избежать конфликта классов.

К сожалению, я не знаю, как «использовать» разные банки для каждой библиотеки. Любая помощь по этому вопросу приветствуется.

Второе решение, которое я нашел, говорит об изменении файла pom.xml (что я также не знаю, как это сделать). Я безуспешно искал в моем проекте и на всем жестком диске файл pom.xml. Как я могу изменить pom.xml? Вот ссылка на второе решение:

http://blog.idm.fr/2009/04/jersey-hibernate-conflict.html

Если кто-то может помочь мне реализовать любой из них, это будет очень цениться. Спасибо.

Ответы [ 2 ]

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

Закончилось отказом от подхода JAX-RS. Сейчас я использую встроенный в Spring MVC 3 атрибут @RequestBody для создания службы на моем сайте.

@ RequestBody заставляет веб-метод писать напрямую в выходной поток, а не в механизм маршрутизации, который будет проанализирован и передан в словарь представления.

Я создал контроллер, выделенный для моей службы, и связал его с @RequestMapping ("/ services"). Все веб-методы в этом контроллере декорированы с помощью @RequestBody, чтобы можно было возвращать прямой вывод данных.

0 голосов
/ 04 марта 2011

Я бы начал с просмотра кода на (ServicetypeDAO.java:100), который вызывает NPE, но странно, что простое включение библиотеки может нарушить работу приложения.

Если у вас нет pom.xml, то я предполагаю, что вы используете IDE. pom.xml - это файл проекта maven , который используется для поддержки конфигурации проекта и используется maven для сборки / запуска тестов / упаковки / развертывания вашего проекта.

Я бы начал с первых принципов и сам написал POM и использовал maven для генерации настроек проекта для вашей IDE.Генерация POM из IDE обычно приводит к чрезмерно сложному POM, но выполнение этого самостоятельно позволяет лучше контролировать артефакты, необходимые для вашего проекта.Затем вы можете также вывести IDE из уравнения при исследовании проблем, создав / развернув его из командной строки.

В POM вы можете указать, какие версии файлов JAR нужны вашему проекту, которые в вашем случае являютсяверсии, которые не упакованы с зависимостями.

...