标签: grizzly

Grizzly和Jersey独立罐子

我正在尝试使用Maven shade插件将Grizzly打包为Jersey作为单个jar.但我总是得到消息No container provider supports the type class org.glassfish.grizzly.http.server.HttpHandler

代码在Eclipse中运行良好,但在打包的jar中不行:

public class Main {

private static URI getBaseURI() {
    return UriBuilder.fromUri("http://localhost/").port(9998).build();
}

public static final URI BASE_URI = getBaseURI();

protected static HttpServer startServer() throws IOException {
    System.out.println("Starting grizzly...");
    ResourceConfig rc = new PackagesResourceConfig("share.test");
    rc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
    return GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
}

public static void main(String[] args) throws IOException {
    HttpServer httpServer = startServer();
    System.in.read();
    httpServer.stop();
}    
}
Run Code Online (Sandbox Code Playgroud)

这是完整的例外

$ java -jar target/webServiceTest-0.0.1-SNAPSHOT.jar
Starting grizzly...
Mar 20, 2012 12:48:53 PM com.sun.jersey.api.core.PackagesResourceConfig init …
Run Code Online (Sandbox Code Playgroud)

java jersey grizzly maven

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

Grizzly和ServletContainerContext

我试图在我编写的Servlet中获取一些注入的上下文(例如Session或HttpServletRequest),在Grizzly上运行,但我做的任何事情似乎都没有用.整个过程似乎过早停顿,出现以下错误:

SEVERE: Missing dependency for field: javax.servlet.http.HttpServletRequest com.test.server.LolCat.hsr
Run Code Online (Sandbox Code Playgroud)

服务器很简单,它由两个文件组成,静态入口点(Main.java):

package com.test.server;

import java.io.IOException;
import java.net.URI;
import javax.ws.rs.core.UriBuilder;

import org.glassfish.grizzly.http.server.HttpServer;
import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.ClassNamesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;

public class Main {

    private static URI getBaseURI() {
        return UriBuilder.fromUri("http://localhost/").port(8080).build();
    }

    public static final URI BASE_URI = getBaseURI();

    public static void main(String[] args) throws IOException {
        ResourceConfig rc = new ClassNamesResourceConfig(LolCat.class);
        HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
        System.in.read();
        httpServer.stop();
    }
}
Run Code Online (Sandbox Code Playgroud)

和serlvet(LolCat.java):

package com.test.server;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;

@Path(value = "/lol") …
Run Code Online (Sandbox Code Playgroud)

java servlets jersey grizzly

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

泽西岛客户端无阻塞

产生大量线程绝不是一个好主意(当你创建太多时,你可能会耗尽内存).

通常,Jersey需要为每个请求创建一个线程.这似乎是这种情况,无论我使用async() (泽西为我创建线程 - 我在调试器中调查过这个),或者不是(我显然必须自己创建线程).

所以这是一个不够好的具体情况:

我是HTTP发布到远程服务器,速率高达500请求/秒.但由于响应可能需要一些时间才能到达(我计算最多30秒),线程总数可以轻松达到数千(此时,JVM进程通常会崩溃).而且,创建这么多线程真的很疯狂.对于处理该负载的可用处理器/网络/ OS资源而言,它实际上应该是一块蛋糕.

所以我想做的是,只需触发请求 - 并在HTTP响应到达时通知操作系统.

  • 如上所述,简单地使用target.request(...).async()....并不能解决问题(因为那时,泽西岛只会产生自己的线程).
  • 此外,限制线程数通过new ClientConfig().property(ClientProperties.ASYNC_THREADPOOL_SIZE, 10)是没有用的,因为这意味着一次最多发送10个请求,这显然不是我想要的(它只会堆积队列).

我尝试过new ClientConfig().connectorProvider(new GrizzlyConnectorProvider())获得NIO支持 - 但根本没有看到任何行为上的差异.

那么有没有办法发出请求而不必为每个请求创建一个额外的线程?

java nio jersey grizzly jersey-client

8
推荐指数
1
解决办法
5406
查看次数

nio上下文中的请求 - 响应同步/匹配

我有一个服务器客户端应用程序(Java EE和Android),通过websockets进行通信.通信工作以及协议本身用于以json方式发送对象,这些对象将被正确包装,序列化,发送,反序列化,解包和重建.两个应用程序都使用另一个库项目,包含所有可能的请求和响应类.

现在我的问题: 图书馆还应实施非阻塞通信策略,但透明的请求 - 响应实现.可能我不是第一个遇到这个问题的人,所以我认为那里可能有一些不错的实现:).

我想要的是:

// server should sleep 5000ms and then return 3*3
Future<Integer> f1 = server.put(
  new SleepAndReturnSquareRequest(5000, 3),
  new FutureCallback<Integer>{
    public void onSuccess(Integer square) {
      runOnUiThread(new Runnable{
        // Android Toast show square
      });
    }

    // impl onFailure
  }
);

Future<Date> f2 = server.put(
  new TimeRequest(),
  new FutureCallback<Date>{
    public void onSuccess(Date date) {
      // called before other onSuccess
    }

    // impl onFailure
  }
);

// e.g. when the activity in android changes I'll cancel all futures. …
Run Code Online (Sandbox Code Playgroud)

java communication grizzly guava netty

8
推荐指数
1
解决办法
731
查看次数

在Linux和Windows上运行Grizzly上的Jersey

我来自Windows .NET背景,但我正在尝试扩展我的专业知识,所以已经选择了一些Java项目.目前,我正在尝试创建一个REST API,所以我决定在这里浏览Jersey:http://jersey.java.net/nonav/documentation/latest/getting-started.html

我已经让Hello World项目在Windows中运行良好(使用NetBeans和Maven),但是当我尝试在Ubuntu中做同样的事情时(再次使用NetBeans和Maven)我收到以下错误:

Starting grizzly...
Aug 09, 2012 11:27:46 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
  com.javarest.javarest2
Aug 09, 2012 11:27:47 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class com.javarest.javarest2.HelloWorldResource
Aug 09, 2012 11:27:47 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Exception in thread "main" java.lang.IllegalArgumentException: No container provider supports the type class org.glassfish.grizzly.http.server.HttpHandler
    at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:196)
    at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:134)
    at com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory.createHttpServer(GrizzlyServerFactory.java:242)
    at Main.startServer(Main.java:25)
    at Main.main(Main.java:29)
Java Result: …
Run Code Online (Sandbox Code Playgroud)

java ubuntu netbeans jersey grizzly

7
推荐指数
1
解决办法
6544
查看次数

Is it possible to setup Grizzly for graceful shutdown?

I have a Jersey application running on embedded Grizzly, that is initialized like the following:

HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
Run Code Online (Sandbox Code Playgroud)

What i want to achieve is let the running requests finish when shutting down, but not let new requests in. I couldn't find a way to achieve this through public methods of HttpServer, or not even with private methods and such (although it is not nice, a solution by accessing private stuff through reflection is also ok)

Does anyone know …

java nio jersey grizzly

7
推荐指数
1
解决办法
628
查看次数

Grizzly Jersey吞咽异常

我正在使用最后的quickstart原型构建Jersey Moxy服务.我的代码工作正常,我可以返回一些JSON.然而,正如我正在开发的那样,如果我犯了一个错误,说请求处理程序有一个不支持的类型,我将得到一个空的500响应,这使调试变得困难.例如,如果我使用@XmlElementRef错误地修饰属性,我将得到如下响应:

$ curl -i http://localhost:8080/myapp/test
HTTP/1.1 500 Internal Server Error
Date: Thu, 05 Sep 2013 10:27:55 GMT
Connection: close
Content-Length: 0
Run Code Online (Sandbox Code Playgroud)

服务器将表现为没有错误:

Sep 5, 2013 11:27:46 AM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Jersey app started with WADL available at http://localhost:8080/application.wadl
Hit enter to stop it...
Run Code Online (Sandbox Code Playgroud)

我尝试使用日志配置文件:

-Djava.util.logging.config.file=log.conf
Run Code Online (Sandbox Code Playgroud)

这会产生大量输出,但仍然没有显示任何异常.

我试过调查Grizzly配置,但我找不到办法关闭优雅的错误处理.理想情况下,我希望服务器抛出异常.关于我缺少什么的任何建议?

这是我的主要代码:

import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
import org.glassfish.jersey.server.ResourceConfig;

import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import java.io.IOException;
import java.net.URI;
import java.util.*;

public class Main {
    // Base URI the Grizzly HTTP server …
Run Code Online (Sandbox Code Playgroud)

java logging exception jersey grizzly

7
推荐指数
1
解决办法
7374
查看次数

Jersey + HK2 + Grizzly:注入EntityManager的正确方法是什么?

我已经设法在Jersey,HK2和一个简单的GrizzlyServer中设置我自己的服务类的注入(进入资源类).(基本上遵循这个例子.)

我现在好奇将JPA EntityManagers注入我的资源类最好的是什么?(我目前正在考虑将一个请求作为一个工作单元).我目前正在探索的一个选项是以Factory<EntityManager>下列方式使用a :

class MyEntityManagerFactory implements Factory<EntityManager> {

    EntityManagerFactory emf;

    public MyEntityManagerFactory() {
        emf = Persistence.createEntityManagerFactory("manager1");
    }

    @Override
    public void dispose(EntityManager em) {
        em.close();
    }

    @Override
    public EntityManager provide() {
        return emf.createEntityManager();
    }

}
Run Code Online (Sandbox Code Playgroud)

并按如下方式绑定它:

bindFactory(new MyEntityManagerFactory())
        .to(EntityManager.class)
        .in(RequestScoped.class);
Run Code Online (Sandbox Code Playgroud)

问题是dispose从不调用-method.

我的问题:

  1. 这是在Jersey + HK2中注入EntityManagers的正确方法吗?
  2. 如果是这样,我该如何确保我的EntityManagers正确关闭?

(我宁愿不依赖于重量级容器或额外的依赖注入库来覆盖这个用例.)

dependency-injection jpa jersey grizzly hk2

7
推荐指数
1
解决办法
3101
查看次数

Websocket SSL握手失败

我有用于安全websocket连接的spring-boot Tomcat服务器.服务器接受Android 4.4,iOS,Firefox和Chrome客户端,并且没有使用授权签名证书的失败.但是,Android 5.0无法通过SSL握手.

Caused by: javax.net.ssl.SSLHandshakeException: Handshake failed
        at com.android.org.conscrypt.OpenSSLEngineImpl.unwrap(OpenSSLEngineImpl.java:436)
        at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:1006)
        at org.glassfish.grizzly.ssl.SSLConnectionContext.unwrap(SSLConnectionContext.java:172)
        at org.glassfish.grizzly.ssl.SSLUtils.handshakeUnwrap(SSLUtils.java:263)
        at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:603)
        at org.glassfish.grizzly.ssl.SSLFilter.doHandshakeStep(SSLFilter.java:312)
        at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:552)
        at org.glassfish.grizzly.ssl.SSLBaseFilter.handleRead(SSLBaseFilter.java:273)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
        at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:818)
 Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0xa1f34200: Failure in SSL library, usually a protocol error
error:1408E0F4:SSL routines:SSL3_GET_MESSAGE:unexpected message (external/openssl/ssl/s3_both.c:498 0xac526e61:0x00000000)
        at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake_bio(Native Method)
        at com.android.org.conscrypt.OpenSSLEngineImpl.unwrap(OpenSSLEngineImpl.java:423)
Run Code Online (Sandbox Code Playgroud)

我认为问题在于TLS或密码套件由于Android …

ssl grizzly websocket tyrus android-5.0-lollipop

7
推荐指数
1
解决办法
7451
查看次数

灰熊管泄漏 - 我做错了什么?

我写了以下测试代码:

@Test
public void testLeakWithGrizzly() throws Throwable {
    ExecutorService executor = Executors.newFixedThreadPool(N_THREADS);
    Set<Future<Void>> futures = new HashSet<>();
    InetSocketAddress inetSocketAddress = new InetSocketAddress(localhostAddress, 111);
    for (int i = 0; i < N_THREADS; i++) {
        Future<Void> future = executor.submit(new GrizzlyConnectTask(inetSocketAddress, requests, bindFailures, successfulOpens, failedOpens, successfulCloses, failedCloses));
        futures.add(future);
    }
    for (Future<Void> future : futures) {
        future.get(); //block
    }
    Thread.sleep(1000); //let everything calm down
    reporter.report();
    throw causeOfDeath;
}    
private static class GrizzlyConnectTask implements Callable<Void> {
    private final InetSocketAddress address;
    private final Meter requests;
    private …
Run Code Online (Sandbox Code Playgroud)

java grizzly

7
推荐指数
1
解决办法
789
查看次数