Java 如何将Jersey REST服务器部署到Heroku
Jersey的“入门”示例使用Grizzly,因此我们使用了它。这使我们能够以相当简单的方式配置身份验证,因此:Java 如何将Jersey REST服务器部署到Heroku,java,heroku,jersey,jetty,grizzly,Java,Heroku,Jersey,Jetty,Grizzly,Jersey的“入门”示例使用Grizzly,因此我们使用了它。这使我们能够以相当简单的方式配置身份验证,因此: private static final String BASE_URI = "http://localhost:8080/rest/"; // com.ourapp.AuthFilter is a javax.ws.rs.container.ContainerRequestContext final ResourceConfig rc = new ResourceConfig(c
private static final String BASE_URI = "http://localhost:8080/rest/";
// com.ourapp.AuthFilter is a javax.ws.rs.container.ContainerRequestContext
final ResourceConfig rc = new ResourceConfig(com.ourapp.AuthFilter.class).packages("com.ourapp");
// create and start a new instance of grizzly http server
// exposing the Jersey application at BASE_URI
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
所有这些都是在当地进行的,这给了我们很大的希望
遗憾的是,当我们将所有这些部署到Heroku时,我们遇到了一些关于BASE\u URI
的主要问题。我们尝试了各种URI,但在启动时遇到了Heroku的运行时异常,例如:
javax.ws.rs.ProcessingException: Failed to start Grizzly HTTP server: Permission denied
及
最后,我们决定放弃灰熊,尝试Jersey docs提供的Jetty解决方案
令人惊讶的是,文档中提供的Maven原型无法直接编译
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.28
具体而言:
root.setContextPath("/");
root.setResourceBase(webappDirLocation);
server.setHandler(root);
完全未定义,以及
server.start();
需要类型为LifeCycle
的参数
那么,有人能帮我让灰熊在Heroku工作吗?如果做不到这一点,有人能告诉我Jetty应用程序的正确配置是什么,以及如何获得类型为
javax.ws.rs.container.ContainerRequestContext
的过滤器来完成Jetty的工作吗?很多小时,几十种不同事物的随机组合,以及以后的大量头发
final String port = System.getenv("PORT");
final String baseUri = "http://0.0.0.0:" + port;
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(baseUri), rc);
并且,在Procfile中:
web: java $JAVA_OPTS -Dserver.port=$PORT -cp target/classes:target/dependency/* com.ourapp.Main
这会使我们的Heroku在启动时为应用程序分配一个随机端口号,该端口号必须像这样传递给Grizzly。哦,那0.0.0.0的东西似乎完全没有文档记录
web: java $JAVA_OPTS -Dserver.port=$PORT -cp target/classes:target/dependency/* com.ourapp.Main