小编Dav*_*Rlz的帖子

当消费者关闭时,javax.jms.MessageConsumer会挂起

根据javadoc,如果我在javax.jms.MessageConsumer上调用receive(),它将无限期地阻塞,直到产生消息或消息使用者关闭为止.

我有一个调用receive()的线程.作为线程关闭的一部分,我调用close(),但是消费者仍然在receive()中阻塞,因此线程不会关闭.我的代码的要点是:

public String receiveMessage() {
...
...
   System.out.println("About to receive")
   TextMessage message = (TextMessage) consumer.receive();
   System.out.println("No longer receiving")
...
...
}

public void stop() {
    try {
        if (consumer != null) {
            consumer.close();
        }
    } catch (JMSException ex) {
        throw new IllegalStateException(ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

在调试器中,我可以看到正在调用close(),但接收仍然阻塞.如果我使用带有超时的receive()方法,它将一直阻塞,直到超时到期.

一切看起来都对我来说,希望有人可以告诉我我做错了什么.

java jms ibm-mq

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

在Java中更改SOAP接口和弃用Web方法

我的团队正在使用soap开发java中的服务层和dot-net中的GUI.GUI开发人员不断变得烦恼,因为服务层偶尔会改变Web服务接口.

为了让GUI保持高兴,而不是诋毁原始的网络方法,我们现在正在编写与现有网络方法并存的新方法.由于我们的肥皂界面设计仍在不断完善,因此变得更加混乱,肯定有更好的方法!有什么建议?

此外,有时我们想要弃用Web服务方法 - 是否有用于执行此操作的java注释(将在WSDL中显示的注释)?

谢谢你的任何建议

java wsdl

6
推荐指数
1
解决办法
2760
查看次数

类在通用接口中实现自身是一种好习惯吗?

对问题标题表示道歉,我无法轻易将其写入文字.

我在一些代码中遇到过这个问题:

public class MyClass implements Message<MyClass> {...}
Run Code Online (Sandbox Code Playgroud)

我理解它的作用,但我以前从未见过以这种方式宣布的类.

我看到的缺点是现在MyClass是一个消息,需要包含与其主要目的无关的已实现方法.

我看到的一个优点(除了它减少了我本来需要编写的其他类的数量)是因为对于类似的事情Comparable,MyClass会知道如何将自己与其他实例进行比较,这反过来会使代码更简洁.

这是好习惯吗?有没有经验法则?

java generics

6
推荐指数
1
解决办法
1473
查看次数

如何让maven在JDK中使用不同的JAXB库

我正在使用java 1.6.0_14,其中包含注释的实现javax.xml.bind.annotation.XmlElement.但是JDK中的那个仅适用于Method和Field.

我发现jaxb-api.jar版本2.2.3也允许这个参数,所以我想使用这个版本.

问题是,我无法弄清楚如何让maven使用这个优先于JDK中的那个,这样当我编写代码时,它不会抱怨注释被用在一个无效的位置.

有什么建议?

java xml jaxb maven

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

Oracle到H2/hsqldb等适配器

我不能成为唯一有这个问题的人所以我正在寻找建议.

我们在Oracle上运行我们的应用程序,但我们的集成测试使用h2进行快速的内存中测试,数据库是在测试开始时使用DDL脚本构建的.

问题是Oracle和h2/hsqldb之间的某些DDL命令的使用/语法不同.例如,今天我花了一些时间才意识到'grant select on ...'适用于Oracle中的序列,但仅适用于h2中的表.

在之前的项目中,我们有一个适配器来删除/翻译这些错误的命令,这意味着我们的测试数据库运行的代码与我们实现的代码完全不同.虽然一切都经过了彻底的验收测试,但这意味着在开发周期的最后阶段才会发现某些问题.

在我的最新项目中,我感觉自己走的是同样的道路 - 所以其他人也必须踏上它.

有什么建议?我们正在使用java/maven,欢迎大家使用!

java sql oracle h2 maven

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

TLS协议定义的致命警报代码是70

我正在尝试从 Windows 浏览器访问另一台运行 Tomcat 的计算机上的 SSL URL,但我在 Windows 计算机上的系统事件日志中看到来自 Schannel 的错误 36887,其描述如下:

TLS协议定义的致命警报代码是70

根据 MS 文档: 微软文档

我已在 Windows 计算机上打开 Schannel 日志记录(最大值 = 7),并且可以从事件日志中看到 SSL 握手已正确协商:

An SSL server handshake completed successfully. The negotiated cryptographic parameters are as follows.
  Protocol: TLS 1.2
  CipherSuite: 0xC028
  Exchange strength: 256
Run Code Online (Sandbox Code Playgroud)

这似乎与代码 70 错误相矛盾。

密码套件 0xC028 是 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384。我检查了 Tomcat 机器,可以看到这是可用的,并且两台机器上也启用了 TLS1.2,因此成功的握手是有意义的。

与代码 70 错误相关的进程 ID 属于 lsass.exe - 我的 Windows 知识非常有限,所以我不知道它的作用。

我在 Tomcat 机器上的 catalina.out 日志中找不到任何内容,代码 70 似乎是在请求实际发送之前发生的。我确信证书都已正确配置,因为我可以从其他计算机成功访问 URL。

我怎样才能从这里进步?

iis ssl tomcat schannel

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

JMSCorrelationID前缀为ID:

我有一些代码正在执行此操作:

String transactionId = incoming.getJMSCorrelationID();
Run Code Online (Sandbox Code Playgroud)

当我使用ActiveMQ进行测试时,我能够通过发送消息并毫无问题地获取此值.但是,当我连接到Websphere时,值的前缀是"ID:"我不知道为什么会出现这种情况 - 中间件人告诉我,我的代码必须添加它 - 但事实并非如此.

这是一个简单的情况让我删除它,但我想知道为什么这个前缀出现 - 任何人的想法?

java jms

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

H2数据库授权认为序列是一个表

我在H2上运行脚本执行以下操作:

create role admin_role;
create user app_user password 'password' ;

grant admin_role to app_user;

create sequence from_event_seq;
grant select on from_event_seq to admin_role;
Run Code Online (Sandbox Code Playgroud)

令人沮丧的是这不起作用,我收到以下错误:

 [Error Code: 42102, SQL State: 42S02]  Table "FROM_EVENT_SEQ" not found; SQL statement: grant select on  from_event_seq to admin_role [42102-154]
Run Code Online (Sandbox Code Playgroud)

奇怪的是,错误消息似乎认为我试图授予一个表(42102是一个表未找到错误).此外,我实际上可以查询序列,它的工作原理(这意味着它已被创建).H2的授权语法未指定应将授权应用于哪种对象类型.

我错过了什么?

database h2

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

标签 统计

java ×6

h2 ×2

jms ×2

maven ×2

database ×1

generics ×1

ibm-mq ×1

iis ×1

jaxb ×1

oracle ×1

schannel ×1

sql ×1

ssl ×1

tomcat ×1

wsdl ×1

xml ×1