常见问题及其解决办法
不能启动J2EE服务器
命名目录服务端口冲突
症状:当你使用-verbose选择启动J2EE服务器时,显示以下信息:
J2EE server listen port: 1050 RuntimeException: Could not initialize server. . .
解决办法:其它程序使用了1050端口。如果J2EE服务已经运行了,你可以通过输入 j2ee -stop停止这个服务。如果其它程序使用了这个端口,你可以通过修改你的J2EE SDK安装的config/orb.properties文件以改变默认端口(1050)。
有关默认端口号的更多信息,请参看下载J2EE SDK时同时提供的配置向导。
Web服务端口冲突
症状:当你使用-verbose选项启动J2EE服务时,显示以下信息:
LifecycleException: HttpConnector[8000].open:
java.net.BindException: Address in use. . .
解决办法:其它程序使用了端口8000。你可以通过修改你的J2EE SDK安装的config/orb.properties文件以改变默认端口(8000)。
错误的XML解析
症状:当你使用-verbose选项启动J2EE服务时,显示以下信息:
Exception in thread "main"
javax.xml.parsers.FactoryConfigurationError:
org.apache.xerces.jaxp.SAXParserFactoryImpl at . . .
解决办法:从你的J2SE安装目录中删除jre/lib/jaxp.properties文件。
编译错误
ant不能找到构造文件
症状:当你输入ant converter后,显示以下信息:
Buildfile: build.xml does not exist!
Build failed.
解决办法:在运行ant前,先转到j2eetutorial/examples/src目录。如果你想要在当前目录中运行ant,你必须在命令行指定构造文件。例如,在窗口中你需要在同一行中输入以下命令:
ant -buildfile C:j2eetutorialexamplessrcuild.xml
converter
编译器不能解析符号
症状:当你输入ant converter后,编译器报告很多错误,其中包括:
cannot resolve symbol
. . .
BUILD FAILED
. . .
Compile failed, messages should have been provided
解决办法:确保你是否已经正确配置了J2EE_HOME环境变量。详细信息请参阅检查环境变量。
在你运行客户端后ant 1.4不能编译示例
症状:ant 1.4显示以下错误:
The filename, directory name, or volume label syntax is
incorrect.
解决办法:使用ant的1.3版本。对于1.4版本,ant.bat脚本和J2EE SDK的脚本都使用了JAVACMD环境变量。而SDK的runclient.bat脚本可能对JAVACMD进行了设置,这就造成了ant.bat的问题。
部署错误
在你的类路径中错误的XML解析
症状:显示以下错误:
. . .
[]java.rmi.RemoteException:Error saving/opening
Deployment Error:Bad mapping of key{0} class{1},
not found: com.sum.enterprise.deployment.xml.ApplicationNode
解决办法:从你的J2SE安装目录的jre/lib/ext子目录下删除jaxp.jar文件。这个JAR文件包含了和J2EE服务器不兼容的XML解析程序。如果你没有一个jaxp.jar文件,你的类路径可能会引用一个Tomcat安装的XML程序。在这种情况下,你需要从你的类路径中删除这个环境。
远程Home接口被指定为一个本地Home接口
症状:显示以下错误:
LocalHomeImpl must be declared abstract.
It does not define javax.ejb.HomeHandle getHomeHandle()
from interface javax.ejb.EJBHome.
解决办法:从EAR文件中删除这个enterprise bean(EditDelete)并使用New Enterprise Bean向导建立一个新的bean。在向导的综合对话框中,选择Remote Home Interface和Remote Interface组合框。
J2EE应用程序客户端运行错误
客户端抛出一个NoClassDefFoundError
症状:客户端报告以下例外:
java.lang.NoClassDefFoundError:converter.ConverterHome
解决办法:造成这个错误的原因是客户端不能找到ConverterAppClient.jar文件中的类。请认真检查你是否正确地按照运行J2EE应用程序客户端中的部署执行了。
客户端不能找到ConverterApp.ear
症状:客户端报告以下例外:
IOException: ConverterApp.ear does not exist
解决办法:认真检查ConverterApp.ear文件是否存在,并且为其指定了-client选项:
runclient -client ConverterApp.ear -name ConverterClient
有关创建ConverterApp.ear文件的详细信息请参看创建J2EE应用程序和运行J2EE应用程序客户端。
客户端不能找到ConverterClient组件
症状:客户端显示以下信息:
No application client descriptors defined for: . . .
解决办法:检查你是否已经建立了ConverterClient组件以及是否在runclient命令中指定了-name选项。有关建立ConverterClient组件的详细信息请参看将J2EE应用程序客户端打包。
登录失败
症状:在登录后,显示如下信息:
Incorrect login and/or password
解决办法:在登录提示符后用户名输入guest,口令输入guest123。
J2EE应用程序未被部署
症状:客户端报告以下例外:
NameNotFoundException. Root exception is org.omg.CosNaming. . .
解决办法:部署应用程序,详细介绍请参看部署J2EE应用程序。
JNDI命名错误
症状:客户端报告以下例外:
NameNotFoundException. Root exception is org.omg.CosNaming. . .
解决办法:在标志为ConverterApp的JNDI命名面板中,检查ConverterBean的JNDI命名是否与ejb/SimpleConverter匹配。重新指定正确的JNDI命名并重新部署应用程序。
Web客户端运行错误
Web的URL环境不正确
症状:浏览器报告页面未找到(HTTP 404)。
解决办法:检查Web的URL环境(converter)是否与你在Component General Properties对话框中指定的匹配(参见将Web客户端打包)。在特别注意大小写的问题。
J2EE应用程序未被部署
症状:浏览器报告页面未找到(HTTP 404)。
解决办法:部署应用程序。
JNDI命名错误
症状:当你点击Web页面上的Submit按钮后,浏览器报告
A Servlet Exception Has Occurred。
解决办法:在标志为ConverterApp的JNDI命名面板中,检查ConverterBean的JNDI命名和ConverterWAR的JNDI命名是否匹配。重新指定正确的JNDI命名并重新部署应用程序。
校验工具发现的错误
校验工具(verifier)可以发现部署描述和方法特征之间的矛盾。这些矛盾常常会导致部署和运行时的错误。在deploytool中,你可以通过选择ToolsVerifier运行verifier的GUI版本。你也可以单独运行verifier的GUI版本或命令行版。更多的信息请参看附录B.
将你的EAR文件与我们的比较
对于这个例子的绝大部分,在下载的文件中包含了J2EE应用程序的EAR文件,它们位于j2eetutorial/examples/ears目录下。
其它错误
如果上面的这些建议都不能解决问题,你可能需要重新安装应用程序并通过运行cleanup脚本清除服务器中的存储内容。你当然还需要关闭并重新启动服务器:
j2ee -stop
cleanup
j2ee -verbose