【发布时间】:2010-09-30 09:03:28
【问题描述】:
我一直在关注“Netbeans 电子商务教程”,目前正在执行此步骤: http://netbeans.org/kb/docs/javaee/ecommerce/entity-session.html
我已根据该页面完全配置了我的 Window 7 帐户,包括 NetBeans 6.9.1、Glassfish 服务器和 MySQL。
执行“类别”页面时出现错误 500(下面的日志摘录)。当我完成“使用 EJB 访问数据”此页面的“选定类别”子部分中的第 3 步时,错误就会显现出来。有问题的行是:
// get selected category
selectedCategory = categoryFacade.find(Short.parseShort(categoryId));
如果我将此行注释掉,错误就会消失。
日志文件sn-p在这里:
[#|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)
ControllerServlet 代码中的第 68 行就是上述代码。
我对 Java 和 Netbeans 的经验非常浅,以至于我什至不确定如何开始调试它。我已经非常密切地遵循了本教程,所以我不应该错过它 - 但确实会发生错误。
我了解基于所包含信息的彻底解决方案会很困难。如果需要任何进一步的信息,请询问。如果做不到这一点,如果有人对我如何自行进一步调查有任何建议,我将不胜感激。
我一直认为破解问题是最好的学习方式,但也很令人沮丧。
更新: 我一直在运行 NetBeans 调试器。看来问题出在演员代码(Short.parseShort(categoryId))上。当我用一个简单的数字替换它时,它可以工作。 例如此代码有效 // 获取选择的类别 selectedCategory = categoryFacade.find(1);
有人知道演员阵容失败的原因吗? categoryId 在调试器中被确认为值为“1”的字符串...
【问题讨论】:
-
你是说 Netbeans 6.9.1?
-
是的,我以为我在上次的帖子编辑中已经解决了这个问题。我现在有:D
-
您在 EJB 的
find()方法中得到了什么?这可能会有所帮助。 -
@Adeel。目前我有一个字符串转换为短。当我用数字替换字符串时,代码有效。如果我用字符串(例如“1”)替换 categoryId 变量,那么我会遇到同样的错误。因此,我想一定是演员失败了。