【问题标题】:Changing Java EE server from GlassFish to Tomcat将 Java EE 服务器从 GlassFish 更改为 Tomcat
【发布时间】:2012-11-12 08:25:33
【问题描述】:

我使用带有 JSF、JPA 和 Primefaces 的 Netbeans 开发了一个应用程序,并且在 GlassFish 服务器中运行良好。我想部署在Tomcat服务器中。我通过属性更改了服务器,但是项目无法清理并成功构建。如何正确更换服务器?

详情:

Netbeans 7.3

玻璃鱼 3.1

雄猫 7

我用 Netbeans 打开了这个项目。 右键单击该项目并选择 GlassFish 作为服务器。 右键单击并选择清理并构建。它是成功的。 右键单击并选择运行。 Web 应用程序开始完美运行。

然后我停止 GlassFish 并通过 Netbeans 服务器窗口启动 Tomcat。

右键单击并选择项目属性。将服务器更改为 Tomcat。 右键单击并选择清理并构建 这个错误来了。也没有创建 Dist 文件夹。

堆栈跟踪如下所示。

An annotation processor threw an uncaught exception.
Consult the following stack trace for details.
java.lang.RuntimeException: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for javax.faces.event.AjaxBehaviorEvent not found
at     org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process(CanonicalModelProcessor.java:407)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:793)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:722)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1700(JavacProcessingEnvironment.java:97)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1029)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1163)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1108)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824)
at com.sun.tools.javac.main.Main.compile(Main.java:439)
at com.sun.tools.javac.main.Main.compile(Main.java:353)
at com.sun.tools.javac.main.Main.compile(Main.java:342)
at com.sun.tools.javac.main.Main.compile(Main.java:333)
at com.sun.tools.javac.Main.compile(Main.java:76)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:56)
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1153)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:930)
at org.netbeans.modules.java.source.ant.JavacTask.execute(JavacTask.java:145)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:283)
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:541)
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)
Caused by: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for javax.faces.event.AjaxBehaviorEvent not found
C:\Users\Buddhika\Documents\ho\HealthOffice\nbproject\build-impl.xml:887: The following error occurred while executing this line:
C:\Users\Buddhika\Documents\ho\HealthOffice\nbproject\build-impl.xml:309: Compile failed; see the compiler error output for details.
BUILD FAILED (total time: 2 seconds)

【问题讨论】:

    标签: jsf tomcat netbeans glassfish


    【解决方案1】:

    Glassfish 是一个成熟的 Java EE Web 应用程序服务器,并与其他已捆绑的 JSF 一起提供。 Tomcat 是一个准系统 JSP/Servlet 容器,不附带 Java EE 捆绑的任何其他内容。将 JSF Web 应用程序部署到 Tomcat 时,开发人员需要在 webapp 的 /WEB-INF/lib 或 Tomcat 的 /lib 中单独提供 JSF 库。

    这个异常试图告诉您它找不到特定于 JSF 的类来编译您的代码,这表明您没有这样做。 Download JSF 2.x 并将 javax.faces.jar 文件放到 webapp 的 /WEB-INF/lib 或 Tomcat 的 /lib 中,你应该已经准备好了。

    【讨论】:

    • 我下载了javax.faces-2.1.14.jar,放到Tomcat服务器的lib文件夹下,重启服务器。和以前一样的错误。然后我将 jar 保存在该 lib 文件夹中,但通过项目属性添加了相同的文件。这导致在现有类中带来了几个错误,例如,以下所有导入都无法识别。导入 javax.persistence.EntityManager;导入 javax.persistence.Query;导入 javax.persistence.TemporalType;导入 javax.persistence.TypedQuery;
    • 所以你最初的问题解决了,你进入了下一个问题。这些课程来自 JPA。这也没有捆绑在 Tomcat 中。您需要自己在 Tomcat 中安装 JPA。为什么你甚至不考虑 Tomcat 是否真的支持你的 web 应用程序就从 Glassfish 退回到 Tomcat?您不能更好地考虑 TomEE 吗?
    • 非常感谢。是的,我可以按照您的指示继续使用 JPA 配置 Tomcat。我重新考虑坚持使用 GlassFish。我只想去 Tomcat,因为虚拟主机提供商给了我一个 Tomcat 的托管计划。因此,尽管我会坚持使用 GlassFish,但我会寻找具有 GlassFish 托管的虚拟服务器提供商。由于它不是免费提供的,所以我想去 Tomcat。我也没有听说过 TomEE,但据我所知,现在将阅读它,但正如您所说,我没有理由放弃 GlassFish。再次感谢您为解释一切所做的努力。
    【解决方案2】:

    Q:但是项目无法清理构建成功。

    A:您的错误消息表明 runtime 错误,不是吗?

    问:到底是什么失败了?雄猫?试图编译你的 .war?只是尝试在您的 IDE 中打开它?

    Q:如果是编译器,那你是怎么编译的?从你的IDE?来自 ANT 脚本?还有什么?

    问:您使用的是 IDE 吗?什么类型(例如 Netbeans)和什么版本?

    问:什么平台?

    还有:

    看看这个链接是否适用:

    【讨论】:

    • 已编辑添加您要求提问的详细信息。谢谢
    • 这根本不是答案。这更适合作为对问题的评论。
    • @Buddhika Ariyaratne - 感谢您的更新。请阅读我的链接,并请确保安装 JSF(您发布的错误消息的原因)。以及 Tomcat 中可能缺少的任何其他组件。这个链接也可能有帮助:uaihebert.com/?p=1440祝你好运!
    • 谢谢。该配置似乎非常复杂。我会坚持使用 GlassFish。我只想转移,因为虚拟服务器提供商提供了 Tomcat,因为他们已经安装了它。但他们没有 GlassFish 托管。我会找到 GlassFish 的托管服务。谢谢大家
    • 问:不能在提供商的 VPS 上安装 GlassFish 吗?
    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 2023-03-08
    • 1970-01-01
    • 2015-04-13
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多