我正在开发一款在 Java 16 上运行的 Jetty Web 应用程序。我尝试将其升级到 Java 17,但完全由一次调用parallelStream().
唯一的变化是 Java 版本从 16 提升到 17,--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED运行时openjdk:16.0.1-jdk-oraclelinux8从openjdk:17.0.1-jdk-oraclelinux8.
我们设法获得了一个线程转储,其中包含许多内容:
"qtp1368594774-200" #200 prio=5 os_prio=0 cpu=475.94ms elapsed=7189.65s tid=0x00007fd49c50cc10 nid=0xd1 waiting on condition [0x00007fd48fef7000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@17.0.1/Native Method)
- parking to wait for <0x00000007b73439a8> (a java.util.stream.ReduceOps$ReduceTask)
at java.util.concurrent.locks.LockSupport.park(java.base@17.0.1/LockSupport.java:341)
at java.util.concurrent.ForkJoinTask.awaitDone(java.base@17.0.1/ForkJoinTask.java:468)
at java.util.concurrent.ForkJoinTask.invoke(java.base@17.0.1/ForkJoinTask.java:687)
at java.util.stream.ReduceOps$ReduceOp.evaluateParallel(java.base@17.0.1/ReduceOps.java:927)
at java.util.stream.AbstractPipeline.evaluate(java.base@17.0.1/AbstractPipeline.java:233)
at java.util.stream.ReferencePipeline.collect(java.base@17.0.1/ReferencePipeline.java:682)
at com.stackoverflowexample.aMethodThatDoesBlockingIOUsingParallelStream()
Run Code Online (Sandbox Code Playgroud)
导致问题的代码类似于:
list.parallelStream()
.map(this::callRestServiceToGetSomeData)
.collect(Collectors.toUnmodifiableList());
Run Code Online (Sandbox Code Playgroud)
此图显示了从 jdk16(左轴)升级到 jdk17(中间的巨大尖峰),然后删除对parallelStream()仍然在 jdk17(右轴)上的调用之前的线程使用情况:
Java 17 (openjdk-17.0.1_linux-x64_bin.tar.gz) …
我正在尝试使用Spring 3.1和嵌入式Jetty 8服务器创建一个没有任何XML配置的简单webapp.
但是,我正在努力让Jetty认识到我对Spring WebApplicationInitializer接口的实现.
项目结构:
src
+- main
+- java
| +- JettyServer.java
| +- Initializer.java
|
+- webapp
+- web.xml (objective is to remove this - see below).
Run Code Online (Sandbox Code Playgroud)
上面的Initializer类是WebApplicationInitializer的一个简单实现:
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.springframework.web.WebApplicationInitializer;
public class Initializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
System.out.println("onStartup");
}
}
Run Code Online (Sandbox Code Playgroud)
同样JettyServer是嵌入式Jetty服务器的简单实现:
import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext;
public class JettyServer {
public static void main(String[] args) throws …Run Code Online (Sandbox Code Playgroud) 我已配置Jetty的跨源过滤器,但我继续收到以下错误.有谁知道什么是错的以及如何解决它?错误消息下面是我的覆盖描述符(即补充web.xml)
错误:
Origin http://localhost:8090 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
覆盖描述符:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<filter-pattern>/*</filter-pattern>
</filter-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
请求标题
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:Origin, Content-Type, Accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:8090
Referer:http://localhost:8090/home
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.942.0
Run Code Online (Sandbox Code Playgroud)
响应标题
Allow:POST,GET,OPTIONS,HEAD
Content-Length:0
Date:Wed, 30 Nov 2011 02:13:21 GMT
Server:Jetty(7.5.4.v20111024)
Run Code Online (Sandbox Code Playgroud) 我正在使用s/o代码,它是由maven构建的java webapp.webapp由maven脚本运行,如下所示,应用程序在localhost:8080上运行,:
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.8.v20121106</version>
<configuration>
<contextPath>/</contextPath>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<!--<port>8085</port>-->
<port>8080</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
<stopKey>stop</stopKey>
<stopPort>8089</stopPort>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
我想附加IntelliJ的调试器,以便我可以单步执行代码.我尝试设置一个调试器配置,如:Jetty Server,然后是'Remote',但它说没有指定Application Server.我也试过'Local',它说'主配置文件不包括'.
那么我该怎么做才能附加调试器?提前致谢.
debugging web-applications jetty intellij-idea maven-jetty-plugin
过去的场景
- 使用Tomcat并以调试模式启动并使用Eclipse进行远程调试.
- 在此调试/远程端口中定义端口并与eclipse连接.
- 用于调试其他主机/服务器中的服务器
今天的场景
现在,我正在使用 Jetty而且我也尝试过这样做,但是没有成功,有人可以帮助我吗?
我没有使用Maven,也不想从Eclipse中启动Jetty.
环境:
Windows XP
Java V. 5
Jetty V. 6.1.15
链接:
http:// docs.codehaus.org/display/JETTY/Debugging
这对我没有帮助!
HTTP:// docs.codehaus.org/display/JETTY/Debugging+Jetty+with+Eclipse
HTTP:// neelzone.wordpress.com/2007/06/18/jetty-and-eclipse-integration
这些是启动内部的Eclipse
当未经身份验证的客户端请求需要非匿名访问级别的URL时security-config.xml,spring security会将HTTP重定向发送到我们的登录页面(例如/login).没关系.
问题是,如果没有现有会话(由客户端请求中提供的cookie标识),spring-security会发出重定向,该重定向也指定客户端在URL中的新会话,例如/login;jsessionid=8o7pglapojus.
许多容器支持这个(显然在Tomcat中正常工作?),但现在看来,码头(这就是我们现在正在使用)不-重定向的URL来通过我们的网址路由器完全不变(包括jsessionid"参数"),并且命名会话不与/loginjetty/spring-security 的请求相关联(即,在对/login请求的响应的Set-Cookie头中提供了全新的会话ID ).
我们可以通过匹配/login.*我们的路由来解决这个问题,但我很好奇是否有任何方法可以防止在身份验证重定向中发出会话ID.
我讨厌问这么模糊的问题,但我很难找到一个简单的例子.这是我到目前为止所拥有的:
public class JettyWebSocketServlet extends WebSocketServlet{
@Override
public void configure(WebSocketServletFactory factory) {
factory.register(MyEchoSocket.class);
}
}
@WebSocket
public class MyEchoSocket {
@OnWebSocketMessage
public void onText(WebSocketConnection conn, String message) {
System.out.println("text: " + message);
try {
conn.write(null, new FutureCallback(), "got: " + message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以找到的嵌入式Jetty示例总是显示如下所示,以启动Server实例运行,但我不知道如何实例化我的WebSocketServlet.
Server server = new Server(8080);
server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)
如何创建可以处理WebSocket连接请求的嵌入式服务器?
我正在尝试在我的Jetty上配置SSL.
我读到这个:http: //docs.codehaus.org/display/JETTY/How+to+configure+SSL 并创建了一个密钥库.
然后,我直接跳到第4节.但是这个配置文件在哪里我应该配置Jetty?
我试图搜索jetty.xml,但我的计算机上没有这样的...
尝试将-XX:OnOutOfMemoryError="kill -9 %p"命令传递给我的jvm args时遇到问题.
我正在使用Jetty7,并在start.ini文件中使用它.在启动时,它给出了以下错误.这是jre /jre1.6.0_03l64
启动Jetty:STARTED Jetty Tue Apr 26 09:54:26 EDT 2011
无法识别的选项:-9
无法创建Java虚拟机.
start.ini文件如下所示.
#===========================================================
# If the arguements in this file include JVM arguments
# (eg -Xmx512m) or JVM System properties (eg com.sun.???),
# then these will not take affect unless the --exec
# parameter is included or if the output from --dry-run
# is executed like:
# eval $(java -jar start.jar --dry-run)
#
# Below are some recommended options for Sun's JRE
#----------------------------------------------------------- …Run Code Online (Sandbox Code Playgroud) Server server = new Server(0);
(..)
server.start();
// this returns _zero_ ?!?!
int listeningPort = server.getConnectors()[0].getPort();
Run Code Online (Sandbox Code Playgroud)
我正在使用嵌入式Jetty 7 API.将零传递给Server(int)构造函数会导致Jetty自动分配可用端口,如何才能发现分配了哪个端口?
我已阅读文档,但无法找到此信息.
谢谢..