将 Java 应用程序部署到 Tomcat 时出现问题
Issues deploying a Java application to Tomcat
我构建了一个简单的 Java 网络应用程序。它提供了一系列RESTful API 供用户通过Web 界面对Java DB 进行某些操作。开发时使用NetBeans环境,测试使用Glassfish
现在我完成了它,我希望能够使用二进制文件将它部署到另一台机器上(尽管现在我使用同一台机器直到我学会如何操作)。
我安装了 Tomcat 7,并将 .war 文件移动到 Tomcat 的 webapp 文件夹中。应用程序部署。此后,我尝试使用为此创建的按钮从数据库中读取一些数据,但出现以下错误
我不确定哪里出了问题,但我有两种说法。
1) Web 应用程序无法连接到数据库。然而,当我再次尝试 运行 应用程序时,在从 NetBeans 启动 JavaDB 后,没有任何区别。
2) 不知何故,应用程序无法访问节点服务。我假设在移动应用程序时不需要更改 API 链接,但也许我错了。
或者还有其他一些我没有考虑到的问题?对于如何正确部署此类应用程序的任何建议,我将不胜感激。
编辑:问题已通过使用 TomEE 解决。
错误来自您选择的应用程序服务器。
TomCat 只是一个 servlet 容器(意味着它只支持 Servlet/JSP)。
任何其他功能(JAX-RS、CDI 等)都需要 Java EE 认证服务器,例如GlassFish、WildFly、Payara、WebLogic、OpenLiberty 或 TomEE。
如果您想在生产或测试环境中使用 TomCat,TomEE 可能是您最好的选择,它基本上是 TomCat + Java EE 的其他功能。
编辑:
TomEE 没有像 GlassFish 这样的 JNDI 数据源配置的 GUI,您需要编辑 conf/tomee.xml
<Resource id="myDataSource" type="javax.sql.DataSource">
jdbcDriver = org.apache.derby.jdbc.ClientDriver
jdbcUrl = jdbc:derby://localhost:1527/dbname
userName = app
password = app
</Resource>
并且在您的 java 代码中:
@Path("resources")
@Stateless
public class MyResources{
@Resource(name="myDataSource")
DataSource dataSource;
@GET
public Response SomeMethod(){
//Do stuff here
}
}
您可以查看 here 了解有关数据源的更多详细配置。
我构建了一个简单的 Java 网络应用程序。它提供了一系列RESTful API 供用户通过Web 界面对Java DB 进行某些操作。开发时使用NetBeans环境,测试使用Glassfish
现在我完成了它,我希望能够使用二进制文件将它部署到另一台机器上(尽管现在我使用同一台机器直到我学会如何操作)。
我安装了 Tomcat 7,并将 .war 文件移动到 Tomcat 的 webapp 文件夹中。应用程序部署。此后,我尝试使用为此创建的按钮从数据库中读取一些数据,但出现以下错误
我不确定哪里出了问题,但我有两种说法。
1) Web 应用程序无法连接到数据库。然而,当我再次尝试 运行 应用程序时,在从 NetBeans 启动 JavaDB 后,没有任何区别。
2) 不知何故,应用程序无法访问节点服务。我假设在移动应用程序时不需要更改 API 链接,但也许我错了。
或者还有其他一些我没有考虑到的问题?对于如何正确部署此类应用程序的任何建议,我将不胜感激。
编辑:问题已通过使用 TomEE 解决。
错误来自您选择的应用程序服务器。 TomCat 只是一个 servlet 容器(意味着它只支持 Servlet/JSP)。 任何其他功能(JAX-RS、CDI 等)都需要 Java EE 认证服务器,例如GlassFish、WildFly、Payara、WebLogic、OpenLiberty 或 TomEE。
如果您想在生产或测试环境中使用 TomCat,TomEE 可能是您最好的选择,它基本上是 TomCat + Java EE 的其他功能。
编辑: TomEE 没有像 GlassFish 这样的 JNDI 数据源配置的 GUI,您需要编辑 conf/tomee.xml
<Resource id="myDataSource" type="javax.sql.DataSource">
jdbcDriver = org.apache.derby.jdbc.ClientDriver
jdbcUrl = jdbc:derby://localhost:1527/dbname
userName = app
password = app
</Resource>
并且在您的 java 代码中:
@Path("resources")
@Stateless
public class MyResources{
@Resource(name="myDataSource")
DataSource dataSource;
@GET
public Response SomeMethod(){
//Do stuff here
}
}
您可以查看 here 了解有关数据源的更多详细配置。