标签: grizzly

针对Comet应用程序的Node.js与Java

我们期望构建一个高性能,可扩展的Comet服务器,并首先考虑将Java Grizzly与GlassFish一起使用.

但经过一些研究,我们发现Node.JS由于极端简单而迅速成为首选,并声称性能:

http://news.ycombinator.com/item?id=1088699

http://amix.dk/blog/post/19484

我将很高兴听到一些使用这两者的真实体验,以及最终可能成为最佳选择.

谢谢!

java comet grizzly node.js

11
推荐指数
2
解决办法
1万
查看次数

grizzly http服务器应该继续运行

下面是启动Grizzly Http Server的代码.如果我按任意键,服务器就会停止.有没有办法让它保持活力.

Jetty有join()方法,它不会退出主程序.Grizzly还有类似的东西吗?

public static void main(String args){



ResourceConfig rc = new PackagesResourceConfig("com.test.resources");

        HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
        logger.info(String.format("Jersey app started with WADL available at "
                        + "%sapplication.wadl\nTry out %shelloworld\nHit enter to stop it...",
                        BASE_URI, BASE_URI));

        System.in.read();
        httpServer.stop();

        }
Run Code Online (Sandbox Code Playgroud)

根据上面的代码,如果你点击任何键,服务器就会停止.我想让它继续运行.当我真的想要停止服务器时,我会杀死进程.主要方法不应该终止.

谢谢

grizzly

11
推荐指数
2
解决办法
6337
查看次数

具有静态内容和REST资源的Grizzly Server

我有一个Jersey REST 2.5.1服务,通过Grizzly服务器提供服务.到目前为止一切正常.我想添加一些静态内容,这些内容也通过Grizzly提供,并从我的JAR文件中提供.所以我用CLStaticHttpHandler.当我访问静态资源时,例如我的index.html显式(例如http://localhost:8080/index.html),一切正常.但是,当我尝试访问root时http://localhost:8080,我得到一个404.代码如下所示:

ObjectMapper mapper = new ObjectMapper();
// some configuration stuff here

JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider();
provider.setMapper(mapper);

ResourceConfig resourceConfig = new ResourceConfig()
            .packages("my.restapi.package")
            .register(provider);

HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), resourceConfig);
HttpHandler httpHandler = new CLStaticHttpHandler(HttpServer.class.getClassLoader(), "/static/");
httpServer.getServerConfiguration().addHttpHandler(httpHandler, "/");
Run Code Online (Sandbox Code Playgroud)

据我所知,从调试开始,org.glassfish.grizzly.http.server.CLStaticHttpHandler.handle(String, Request, Response)永远不会被调用.任何提示,我如何使index.html可访问的默认页面?

java grizzly jersey-2.0

11
推荐指数
1
解决办法
6031
查看次数

Java NIO2 AsynchronousSocketChannel/AsynchronousServerSocketChannel和TLS/SSL

在NIO2上可用的INTERNET上的所有源/样本都没有TLS/SSL支持,

java.nio.channels.AsynchronousSocketChannel java.nio.channels.AsynchronousServerSocketChannel

据我所知,连接的SSLEngine生命周期与AsynchronousSocketChannel.connect && AsynchronousServerSocketChanne.accept不同,TLS/SSL应该封装在AIO实现中,所以如何才能使用它们?注意:我在Grizzly项目中是一个视频,谈论他们已经实现了它,我查看了源代码,但是我看到了AIO而不是TLS/SSL集成......

提前致谢!

java grizzly java-7 nio2

10
推荐指数
1
解决办法
2011
查看次数

Jersey/Grizzly的基本HTTP身份验证

我使用JAX-RS,Jersey和Grizzly编写了一个简单的REST服务器.这就是我启动服务器的方式:

URI baseUri = UriBuilder.fromUri("http://localhost/api")
                        .port(8081)
                        .build();

ResourceConfig rc = new PackagesResourceConfig("se.aioobe.resources");
HttpServer httpServer = GrizzlyServerFactory.createHttpServer(baseUri, rc);
Run Code Online (Sandbox Code Playgroud)

现在我需要使用基本HTTP身份验证来保护资源,我无法弄清楚如何执行此操作.

我可以从Grizzly切换到例如Jetty,如果它更容易让它工作,但我真的很重视Grizzly提供的简单配置/启动.

我已经阅读了很多教程.他们都提到了web.xml,但在我目前的配置中我没有.(我是否需要添加一个用于HTTP身份验证?)我发现了以下 问题,它们都没有任何帮助:-(

(此时不需要SSL.此时的身份验证只是为了防止公众在我们的测试版中偷看.)

TL; DR:如何向Jersey/Grizzly webapp添加基本HTTP身份验证?

java jax-rs jersey http-authentication grizzly

10
推荐指数
1
解决办法
1万
查看次数

jersey和jax-rs RI2 - 缺少HttpServerFactory

我有一个简单的项目来测试JAX-RS服务.昨天我下载了jersey-1.7.1,并使用com.sun.jersey.api.container.httpserver.HttpServerFactory和com.sun.net.httpserver.HttpServer来创建一个http服务器来测试我在Eclipse中的服务(没有重载重量容器)

今天,我下载了最新的球衣罐(jaxrs-ri),缺少HttpServerFactory.看起来他们在1.7.1 => 2.0之间删除了类,但我在弃用部分找不到它.我在API部分看到了grizzly2类(也许这就是我现在应该使用的)但是jaxrs-ri bundle中的jar都没有提供这些类.我下载了jersey-grizzly 1.12 jar,但它只有com/sun/jersey/server/impl/container/grizzly2/GrizzlyContainer类,没有实现.

对善良的灵魂提出质疑

1 - 使用来自泽西下载页面的最新jaxrs-ri jar,如果不推荐使用1.7.1方式,建议使用命令行创建简单http服务器的方法.什么罐子下载/包括,也许是一个简短的代码示例?

2 - 关于使用java创建简单REST服务的整个文档是一个很大的混乱.那么你如何找到正确的信息呢?

(真的,这不是一个玩笑.也许这需要一个单独的博客文章 - 只看一塌糊涂,更改API,没有关于弃用功能的信息,实现差异,例如CXF vs. jersey,API 1.x vs API 2.0, Glassfish容器v xy与Tomcat,y版本x与y版本x2,servlet 3.0将拥有此文件,您是否正在扩展应用程序!)

更新

JDKHttp服务器的工作示例

package test.jersey;

import java.net.URI;
import com.sun.net.httpserver.HttpServer;
import org.glassfish.jersey.jdkhttp.JdkHttpServerFactory ;
import org.glassfish.jersey.server.ResourceConfig;

public class ConsoleServerV2 {

    static final String BASE_URI = "http://localhost:9099/";

    public static void main(String[] args) throws Exception {
        HttpServer server = null ;

        ResourceConfig rc = new ResourceConfig(rest.Service.class);
        URI endpoint = new URI(BASE_URI);

        server = JdkHttpServerFactory.createHttpServer(endpoint,rc);
        System.out.println("console v2.0 : Press …
Run Code Online (Sandbox Code Playgroud)

java jax-rs jersey grizzly

10
推荐指数
1
解决办法
1万
查看次数

泽西2/Grizzly的GZIP编码

我无法在Jersey服务中激活gzip-encoding.这就是我尝试过的:

  1. 与开始了jersey-quickstart-grizzly2从原型入门指南.

  2. 添加 rc.register(org.glassfish.grizzly.http.GZipContentEncoding.class);

    (也尝试过rc.register(org.glassfish.jersey.message.GZipEncoder.class);)

  3. 开始于 mvn exec:java

  4. 经过测试 curl --compressed -v -o - http://localhost:8080/myapp/myresource

结果如下:

> GET /myapp/myresource HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 zlib/1.2.3.4 ...
> Host: localhost:8080
> Accept: */*
> Accept-Encoding: deflate, gzip
> 
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Date: Sun, 03 Nov 2013 08:07:10 GMT
< Content-Length: 7
< 
* Connection #0 to host localhost left intact
* Closing connection #0
Got it!
Run Code Online (Sandbox Code Playgroud)

也就是说,尽管Accept-Encoding: deflate, …

gzip jersey grizzly

10
推荐指数
2
解决办法
3672
查看次数

SSL与Grizzly和Jersey

我试图让灰熊使用SSL加密,但仍然可以使用Jersey.我看过整个互联网,我发现了与Grizzly和Jersey的各种不同的SSL尝试.看起来有不同的方法,取决于您使用的版本,以及您决定如何实现它.我还没有能够使用任何示例来处理我的代码.

这是我启动服务器的方式:

static HttpServer startSecureServer() throws IOException{
        ResourceConfig rc=new PackagesResourceConfig("server.grizzlyresources");
        SSLContextConfigurator sslCon=new SSLContextConfigurator();

        sslCon.setKeyStoreFile(ConfigLoader.getKeystoreLocation()); // contains server keypair
        sslCon.setKeyStorePass(ConfigLoader.getKeystorePassword());

        System.out.println("Starting server on port "+ConfigLoader.getHttpsServerPort());
        HttpServer secure=GrizzlyServerFactory.createHttpServer(BASE_URI_SECURED, rc);
        secure.stop();

        HashSet<NetworkListener> lists=new HashSet<NetworkListener>(secure.getListeners());
        for (NetworkListener listener : lists){
            listener.setSecure(true);
            SSLEngineConfigurator ssle=new SSLEngineConfigurator(sslCon);
            listener.setSSLEngineConfig(ssle);
            secure.addListener(listener);
            System.out.println(listener);
        }

        secure.start();
        return secure;
}

private static URI getBaseURISecured(){
    return UriBuilder.fromUri("https://0.0.0.0/").port(ConfigLoader.getHttpsServerPort()).build();
}

private static final URI BASE_URI_SECURED = getBaseURISecured();
Run Code Online (Sandbox Code Playgroud)

ConfigLoader从配置文件加载信息.当我运行这段代码时,它会启动服务器,它会在server.grizzlyresources包中找到资源,而且效果很好!除了一件事.服务器不安全.我可以telnet到它并以纯文本形式发送我的一个资源的HTTP请求,它将返回它.所以代码适用于启动服务器,但它的整个SSL部分只是被绕过了.任何想法如何解决这个或为什么它可能会这样做?

这是运行时控制台的输出:

Starting server on port 9999
Jan 13, 2014 9:51:08 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root …
Run Code Online (Sandbox Code Playgroud)

java rest ssl jersey grizzly

10
推荐指数
2
解决办法
1万
查看次数

GRIZZLY0023 Glassfish警告

我在GlassFish服务器上的java中部署了2个Web应用程序.我正在使用Glassfish Server 3.1.2.2.它们都有来自接收http请求的java servlet页面,代码也是相同的,只有不同的参数(针对不同的客户端).第一个工作正常,另一个处理http请求很长.之后我注意到了下一件事:

我经常在Netbeans的Glassfish输出中收到此警告.

WARNING: GRIZZLY0023: Interrupting idle Thread: http-thread-pool-9990
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我为什么会得到这个警告,以及如何解决它.

java warnings http glassfish grizzly

10
推荐指数
2
解决办法
1万
查看次数

使用ContainerRequestContext.abortWith()后,Jersey为每个调用抛出NPE

我有一个RESTful端点,我通过自定义ContainerRequestFilter进行简单的授权检查.过滤器检查HTTP会话中包含的所有信息是否正确,如果不是,则执行以下操作:

requestContext.abortWith(Response.status(Response.Status.FORBIDDEN)
.entity("Forbidden").build());
Run Code Online (Sandbox Code Playgroud)

这一切都很好,花花公子.奇怪的是,当我再次发出相同的GET请求时,Jersey服务器报告NPE并且不返回任何内容.

NPE堆栈跟踪:

Jul 20, 2016 5:27:53 PM org.glassfish.jersey.server.ServerRuntime$Responder writeResponse
SEVERE: An I/O error has occurred while writing a response message entity to the container output stream.
java.lang.IllegalStateException: The output stream has already been closed.
    at org.glassfish.jersey.message.internal.CommittingOutputStream.setStreamProvider(CommittingOutputStream.java:147)
    at org.glassfish.jersey.message.internal.OutboundMessageContext.setStreamProvider(OutboundMessageContext.java:803)
    at org.glassfish.jersey.server.ContainerResponse.setStreamProvider(ContainerResponse.java:372)
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:694)
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444)
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434)
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
    at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:384)
    at org.glassfish.grizzly.http.server.HttpHandler$1.run(HttpHandler.java:224)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

怎么了?我不想关闭输出流.我只需要一个方法将http返回代码+消息返回给请求者.

java rest grizzly jersey-2.0

9
推荐指数
2
解决办法
4217
查看次数