小编Koh*_*aki的帖子

Tomcat偶尔会返回没有HTTP头的响应

我正在研究Tomcat(7.0.90 7.0.92)偶尔返回没有HTTP头的响应的问题.

根据Wireshark捕获的数据包,在Tomcat收到请求后,它只返回一个响应体.它既不返回状态行也不返回HTTP响应头.

它使下游Nginx实例产生错误"上游在从上游读取响应头时没有发送有效HTTP/1.0头",向客户端返回502错误并关闭Nginx和Tomcat之间的相应http连接.

这种行为可能是什么原因?是否有任何可能使Tomcat以这种方式行事?或者在某些情况下可能会出现剥离HTTP标头的内容?或Wireshark无法捕获包含HTTP标头的帧?任何建议缩小问题的范围也非常感谢.

这是Wireshark的"关注HTTP流"的屏幕截图,显示了有问题的响应:

在此输入图像描述

编辑:

这是相关部分(仅响应)的"TCP流"的屏幕截图.似乎从上一次的第二个响应中的块看起来很好:

在此输入图像描述

EDIT2:

我将此问题转发给Tomcat用户邮件列表,并从开发人员那里获得了一些进一步调查的建议:

http://tomcat.10.x6.nabble.com/Tomcat-occasionally-returns-a-response-without-HTTP-headers-td5080623.html

但我还没有找到任何适当的解决方案.我仍然在寻找解决这个问题的见解..

tomcat http java-metro-framework nginx chunked

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

如何在不嵌套的情况下使用 Jackson 序列化单值 @Data 对象(例如 {"id":123},而不是 {"id":{"value":123}})?

我计划使用 Lombok 创建数百个基于“值对象”模式的类,如下所示:

@Data
public final class SomeId implements Serializable {
    private final long value;
}
Run Code Online (Sandbox Code Playgroud)

我想将这些类用于由 Jackson 提供支持的 JSON 序列化。例如,考虑一个 DTO 类,如下所示:

public class SomeDTO {
    SomeId id;
    public SomeId getId() {
        return id;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想这DTO类序列化为类似{"id":123},但杰克逊会产生类似{"id":{"value":123}},它配备了不必要的嵌套对象有一个名为场value。即一个测试用例表达了我的要求:

public class SomeDTOTest {
    @Test
    public void serializationTest() throws Exception {
        SomeDTO dto = new SomeDTO();
        dto.id = new SomeId(123);

        String serialized = new ObjectMapper().writeValueAsString(dto);

        System.out.println(serialized);             // {"id":{"value":123}}
        assertThat(serialized, is("{\"id\":123}")); // I want {"id":123} instead!
    } …
Run Code Online (Sandbox Code Playgroud)

java json jackson lombok

7
推荐指数
2
解决办法
8535
查看次数

如何关闭在WildFly上正确定义为DataSource的嵌入式Derby

当我在WildFly上正常定义Derby DataSource时,db.lck文件保持未删除状态,表示数据库在每次关闭WildFly时都没有正确关闭.因为嵌入式Derby需要一个特殊的关闭过程,该过程正在使用以"; shutdown = true"字符串结尾的JDBC URL获取新连接.

所以,我需要像shutdown-hook那样执行shutdown程序.我发现旧的JBoss有办法实现它:

https://developer.jboss.org/wiki/SetUpADerbyDatasource http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.jboss.jbossas/jboss-as-varia/6.0 .0.Final /组织/ JBoss的/ JDBC/DerbyDatabase.java

但我不知道如何在最近的WildFly上应用它,因为它看起来像"mbean"和"依赖"元素不再允许其数据源定义,我在最近的WildFly上找不到它的等价物.

我认为数据源定义的"connection-listener-class"变量是相当可观的,它可能是实现它的一种方法.我还没有尝试过,但它看起来有点复杂,我不确定它是否按预期工作.

那么,有没有办法定义一个shutdown-hook,它使用最近的WildFly执行Derby的shutdown程序?

编辑:

我发布了一条安装Apache Derby到WildFly的说明,其中包括我的解决方案. http://www.nailedtothex.org/roller/kyle/entry/installing-apache-derby-to-wildfly

derby wildfly

5
推荐指数
1
解决办法
1277
查看次数

匿名类可以完全不可变吗?

在 Java Concurrency In Practice 一书中,有一个几乎不可变对象的例子,如果没有正确发布,它有失败的风险:

// Taken from Java Concurrency In Practice
// p.51 Listing 3.15: Class at risk of failure if not properly published.
public class Holder {
    private int n;

    public Holder(int n) { this.n = n; }

    public void assertSanity() {
        if(n != n)
            throw new AssertionError("This statement is false.");
    }
}

// p.50 Listing 3.14: Publishing an object without adequate synchronization. Don't do this.
class Client {
    public Holder holder;

    public void initialize() {
        holder …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading language-lawyer

5
推荐指数
1
解决办法
158
查看次数

QueryDSL如何写“在哪里?col1和col2之间”

如何编写WHERE类似于WHERE ? BETWEEN col1 AND col2QueryDSL的子句?我知道我可以这样写,

...
.where(mytable.col1.loe(constant), mytable.col2.goe(constant))
...
Run Code Online (Sandbox Code Playgroud)

但是,使用BETWEEN会使查询更具可读性。

我使用QueryDSL 3.2.3。


更新:

我最终得到了这样的东西(一个可通过运行的测试用例mvn test):

final int constant = 10;
final QMyTable m = QMyTable.myTable;
final SimpleExpression<Boolean> operation = Expressions.operation(Boolean.class, Ops.BETWEEN,
        Expressions.constant(constant), m.col1, m.col2);

// This yields:
// SELECT ID, COL1, COL2 FROM MYTABLE WHERE ((? BETWEEN COL1 AND COL2) = ?)
// bind => [10, true]
final MyTable actual = new JPAQuery(em).from(m).where(operation.eq(true)).uniqueResult(m);
Run Code Online (Sandbox Code Playgroud)

无论如何它都能工作,但是该部分= ?是多余的。我想要一个更简单的东西,例如:

SELECT ID, COL1, …
Run Code Online (Sandbox Code Playgroud)

querydsl

3
推荐指数
1
解决办法
1084
查看次数