Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix上JerseyTest Grizzly Web服务器的行为_Unix_Rest_Jersey_Junit4_Grizzly - Fatal编程技术网

Unix上JerseyTest Grizzly Web服务器的行为

Unix上JerseyTest Grizzly Web服务器的行为,unix,rest,jersey,junit4,grizzly,Unix,Rest,Jersey,Junit4,Grizzly,我们已经创建了一个测试套件,为了运行它,我们使用嵌入式Grizzly Web服务器和JerseyTest框架 我们从JerseyTest扩展了一个自定义类,并在其构造函数中创建ApplicationDescriptor,然后调用超类SetupTestenEnvironment(),它实际上启动了嵌入式grizzly web服务器 我们的测试用例很少扩展这个定制类来直接启动grizzly服务器。但是,我们不会在代码中的任何地方停止这个嵌入式服务器 测试用例在windows上运行正常,但在Unix上

我们已经创建了一个测试套件,为了运行它,我们使用嵌入式Grizzly Web服务器和JerseyTest框架

我们从JerseyTest扩展了一个自定义类,并在其构造函数中创建ApplicationDescriptor,然后调用超类SetupTestenEnvironment(),它实际上启动了嵌入式grizzly web服务器

我们的测试用例很少扩展这个定制类来直接启动grizzly服务器。但是,我们不会在代码中的任何地方停止这个嵌入式服务器

测试用例在windows上运行正常,但在Unix上失败,因为java.net.BindException端口9998正在被另一个进程使用

很明显,如果我们不在代码中停止嵌入式web服务器,这些测试在windows上也会失败,并出现类似的错误。它们在windows上运行良好,在unix上运行失败。这与Unix如何生成线程或进程有关吗


另外,我们还使用netstat-a | grep 9998测试了其他进程是否正在使用端口9998,但找不到使用该端口的其他进程。

我遇到了类似的问题,如果已经使用了默认端口,我确实通过不使用默认端口来修复了它。只需将以下代码添加到测试用例中:

@覆盖
受保护的int getPort(int defaultPort){
serversocketserver=null;
int端口=-1;
试一试{
服务器=新服务器套接字(默认端口);
port=server.getLocalPort();
}捕获(IOE异常){
//忽略
}最后{
如果(服务器!=null){
试一试{
server.close();
}捕获(IOE异常){
//忽略
}
}
}
如果((端口!=-1)| |(默认端口==0)){
返回端口;
}
返回getPort(0);
}

我在编写集成测试时也遇到了同样的问题。我没有在Windows机器上进行测试,但在我的Unix机器上,我发现问题在于,默认情况下,JerseyTest类在其
tearDown
方法上使用
关闭嵌入式服务器。因为我已经重写了这个方法来进行清理,所以我必须调用
super.tearDown()


完成此操作后,一切正常。

我发现这很有帮助,尽管我没有使用建议的实现,而是将另一个端口返回到默认的9998。很抱歉晚了+1。这是我上面提到的问题的解决方案,但我愿意了解为什么会发生特定的行为,因为在用Java开发跨平台应用程序时,我可能必须围绕类似的问题构建一个模式。
@After
public void tearDown() throws Exception{
    super.tearDown();
    ...
}