Ошибка Java Netbeans - PullRequest
       16

Ошибка Java Netbeans

2 голосов
/ 30 сентября 2010

Я следовал «учебному пособию по электронной коммерции Netbeans» и в настоящее время выполняю этот шаг: http://netbeans.org/kb/docs/javaee/ecommerce/entity-session.html

Я полностью настроил свою учетную запись Windows 7 в соответствии с этой страницей, используя NetBeans 6.9.1, сервер Glassfish и MySQL.

Я получаю ошибку 500 при выполнении страницы «Категория» (извлечение журнала ниже).Ошибка проявляется, когда я выполняю шаг 3 в подразделе «выбранная категория» «Доступ к данным с помощью EJB» на этой странице.Обсуждаемая строка:

// get selected category
selectedCategory = categoryFacade.find(Short.parseShort(categoryId));

Если я закомментирую эту строку, ошибка исчезнет.

Фрагмент файла журнала находится здесь:

[#|2010-09-29T18:32:32.570+0100|WARNING|glassfish3.0.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=30;_ThreadName=http-thread-pool-8080-(2);|StandardWrapperValve[Controller]: PWC1406: Servlet.service() for servlet Controller threw exception
javax.ejb.EJBException
 at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5119)
 at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5017)
 at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4805)
 at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2004)
 at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1955)
 at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:198)
 at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:84)
 at $Proxy355.find(Unknown Source)
 at session.__EJB31_Generated__CategoryFacade__Intf____Bean__.find(Unknown Source)
 at controller.ControllerServlet.doGet(ControllerServlet.java:68)

Строка68 в коде ControllerServlet соответствует приведенному выше.

Мой опыт работы с Java и Netbeans достаточно легок, и я даже не знаю, как начать отлаживать это.Я очень внимательно следил за этим руководством, поэтому я не должен пропустить его, но ошибки случаются.

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

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

Обновление: я работал через отладчик NetBeans.Похоже, что проблема в приведенном коде (Short.parseShort (categoryId)).Когда я заменяю это простой цифрой, это работает.например, этот код работает // получить выбранную категорию selectedCategory = categoryFacade.find (1);

У кого-нибудь есть идеи, почему приведение не удается?categoryId подтверждается как строка со значением "1" в отладчике ...

1 Ответ

2 голосов
/ 30 сентября 2010

Хорошо, я взломал это. Очевидно, это была моя вина ...

Идентификатор таблицы должен был быть задан как короткий, вместо этого я задал его как целое число. Поэтому, приведя строку 'categoryId' к short и передав ее в метод find, я передал неверный тип данных.

Замена аргумента Short.parseShort (categoryId) на Integer.parseInt (categoryId) исправила проблему.

Для тех, кто нашел время, чтобы прочитать это; спасибо.

...