Не удается заставить REST WS работать с Netbeans - PullRequest
1 голос
/ 28 января 2012

Я читал учебник на веб-сайте Netbeans , но не могу заставить его работать.Я разместил соответствующие файлы в гисте здесь .Я выбрал проект maven, Tomcat 7 и Java 5EE (поскольку Java 6EE явно не работает с Tomcat 7)

Следуя руководству, я создал базу данных с таблицей «user», и Netbeans мог подключиться кбазы данных и создайте необходимые файлы, так что с моей базой все в порядке.При запуске веб-приложения отображается страница index.jsp по умолчанию, поэтому веб-сервер также работает.

Если я пытаюсь получить доступ к одному из ресурсов (http://localhost:8084/test3/resources/com.mycompany.test3.user/count), я получаю следующее исключение:

java.lang.RuntimeException: javax.naming.NameNotFoundException: Name persistence-factory is not bound in this Context
    service.UserRESTFacade.getJpaController(UserRESTFacade.java:33)
    service.UserRESTFacade.count(UserRESTFacade.java:97)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:601)    
    com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)

Исходя из того, что я могу сказать, файл persistence.xml выглядит правильно, а имя файла указано в файлах Java, поэтому я не знаю, с чего начать. Как уже упоминалось, файлы доступны в виде GIST(см. ссылки вверху)

Я использую версию 7 как Netbeans, так и Tomcat, если это поможет

1 Ответ

0 голосов
/ 28 января 2012

Эта ошибка означает, что ваше приложение попыталось найти источник данных в JNDI и не удалось.JNDI - это метод предоставления конфигурации приложению, привязанному к контейнеру приложения, и он чаще всего используется для настройки соединений с базой данных.

Выполните поиск "Tomcat JNDI JPA", и вы должны получить некоторую полезную информацию.

РЕДАКТИРОВАТЬ:

ОК, я внимательно посмотрел на ваш код.Я на самом деле не уверен, почему поиск JNDI терпит неудачу, но, поскольку вы настроены для соединений, управляемых приложениями, вы должны иметь возможность полностью пропустить JNDI и получить фабрику, подобную этой:

// use the name specified in persistence.xml
javax.persistence.Persistence.createEntityManagerFactory("com.mycompany_test3_war_1.0-SNAPSHOTPU")

Другое дело: создание EntityManagerFactory стоит дорого, поэтому вы должны сделать это только один раз.То, как вы это делаете сейчас, вы создаете по одной на каждую транзакцию, что будет ужасно неэффективно.Я бы сделал это при запуске приложения и затем сохранил его где-нибудь, например, в ServletContext.

...