Java 如何将Jersey REST服务器部署到Heroku

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

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(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