小编bad*_*era的帖子

在 @MessageDriven bean 中使用 amazon sqs - 池化/并行处理

我们需要在 Java EE 应用程序中使用队列,因为它是一个基于云的应用程序(部署在 OpenShift Online 上),我们喜欢使用 amazon sqs。

如果我正确理解了 JMS/Java EE 接收部分的理论,一个@MessageDrivenbean 由 Java EE 容器管理,以便并行创建许多 bean 实例(根据最大池大小),如果传入消息的数量高。这对于处理高负载当然是一个很大的好处。

但是,我不知道如何在 Java EE 应用程序中以这种方式集成 aws sqs。我知道来自http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-java-message-service-jms-client.html的异步接收器示例:

class MyListener implements MessageListener {

    @Override
    public void onMessage(Message message) {
        try {
            // Cast the received message as TextMessage and print the text to screen.
            if (message != null) {
                System.out.println("Received: " + ((TextMessage) message).getText());
            }
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

进而:

// Create a consumer …
Run Code Online (Sandbox Code Playgroud)

ejb jms message-driven-bean amazon-sqs jakarta-ee

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

设置日志消息的时区

有没有办法在 Spring Boot 中配置 logback 以在与系统时区不同的时区中输出日志消息的本地时间?

我想通过配置进行设置(即 application.yml /在特定系统上使用环境变量覆盖)

logging spring logback spring-boot

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

Wildfly的JAXWS实现似乎忽略了bindingProvider属性com.sun.xml.ws.transport.https.client.SSLSocketFactory

我的环境是Maven Project和Wildfly(8.2.1)作为Application Server.我需要的是使用SOAP将传入的REST调用连接到第三方服务器.我需要SSL客户端身份验证; 因此,我有自己的KeyStore和TrustStore.因此,我创建了自己的SSLContext,并且需要让WebService使用此SSLContext.

Wildfly有一个问题,它使用了JAXWS(Apache CXF?)的实现 - 我在这里描述它(但是用另一个方法来解决问题;因此它不是一个重复的帖子!):
Wildfly:如何使用JAXWS-RI而不是Apache CXF(仅限WebService客户端)

其中一个主要问题似乎是Wildfly中使用的JAXWS似乎忽略了使用属性设置自己的SSLContext com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory:

MyWS_Service service = new MyWS_Service(null, new QName("http://...", "MyWS"));
MyWS port = service.getMyWSSOAP();

BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://hostname:443/.../...");

// the following setting is ignored!
bindingProvider.getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", mySslSocketFactory);

// in some posts, we see that we need to eliminate 'internal' in the property. This does not help!
bindingProvider.getRequestContext().put("com.sun.xml.ws.transport.https.client.SSLSocketFactory", mySslSocketFactory);
Run Code Online (Sandbox Code Playgroud)

它被忽略的证据是,如果我HttpsURLConnection.setDefaultSSLSocketFactory(mySslSocketFactory)用来设置SSLContext,它确实有效 - 意味着SSL连接已建立,这要归功于导入的根CA到SSLContext中自定义的TrustStore设置.

如果我们查看其他帖子(例如,如何以编程方式设置JAX-WS客户端的SSLContext?),这个属性应该可以工作(即使对Wildfly也有一些评论).但它不适合我的情况.这可能是什么原因?

java ssl soap jax-ws wildfly

4
推荐指数
2
解决办法
3889
查看次数

Instant.parse和RFC3339字符串引发java.time.format.DateTimeParseException

如果我做

import java.time.Instant;
...
    Instant instant = Instant.parse("2018-01-02T18:14:59.000+01:00")
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

Caused by: java.time.format.DateTimeParseException: Text '2018-06-19T23:00:00.000+01:00' could not be parsed at index 23
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1777)
Run Code Online (Sandbox Code Playgroud)

但是如果我这样做

    Instant instant = Instant.parse("2018-06-19T23:00:00.000Z");
Run Code Online (Sandbox Code Playgroud)

一切正常。

我想念什么?第一次字符串有什么问题?

java java-8 java-time

4
推荐指数
1
解决办法
878
查看次数

带有方面参数的注释

我有一个可用于注释的方面:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DumpToFile {

}
Run Code Online (Sandbox Code Playgroud)

和连接点:

@Aspect
@Component
public class DumpToFileAspect {

  @Around("@annotation(DumpToFile)")
  public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {

    ...
    // I likte to read out a parameter from the annotation...
    Object proceed = joinPoint.proceed();

    ...

    return proceed;
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以在一个方法上成功使用方面@DumpToFile;但是,我想将一个参数传递给注释并在我的方面检索它的值。
例如。@DumpToFile(fileName="mydump"). 有人可以告诉我怎么做吗?

java aop spring annotations aspectj

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

将两个@RequestScoped bean作为不同的实例注入

我有以下情况(Java EE,CDI,jax.rs):

我有一个RequestScoped Bean,它存储在请求的实时时间中使用的一些数据:

MyHandler.java:
@RequestScoped
public class MyHandler
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

然后我有我的REST调用,它使用我的处理程序Bean的两个不同实例:

MyRestCall.java:
@Stateless
public class MyRestCall
{
    @Inject
    MyHandler handlerA;

    @Inject
    MyHandler handlerB;

    ....
}
Run Code Online (Sandbox Code Playgroud)

然而,发生的是,hanlderAhandlerB是同一个对象.但我想有两个不同的.我怎样才能以正确的方式实现这一目标?当然,我可以创建一个基类处理程序,然后推导出两个独立的类HandlerAHandlerB和@Inject他们作为handlerAhandlerB.但我希望以更清洁的方式.

java java-ee

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

HAproxy:OPTIONS 和 POST 方法的 503 错误文件不同

我们有一个 Web 应用程序,使用 ajax 调用运行在不同域上的后端(-> 需要 CORS)。后端由HAproxy 1.4.22组成和多个 Wildfly(在 OpenShift PaaS 上运行)组成。如果没有 Wildfly 可用(例如,在“维护”期间),HAproxy 会为每个请求或配置的错误文件提供 503 服务。到目前为止,一切都很好...

对于 Web 应用程序来说,根据被拒绝的后端请求(带有 503)正确可视化“维护模式”是一个问题,因为浏览器首先发送一个 OPTIONS 请求(预检)并已收到 503。这最终导致浏览器不会将此状态代码反映到 JavaScript 中执行的 ajax 调用(我们总是得到状态代码 0 作为响应,因为浏览器将其解释为预检的致命失败并拒绝任何访问)。这个故事并不新鲜,在 stackoverflow 上有很多帖子。

那么如何解决这个问题呢?我的想法是提供两个不同的错误文件(HAproxy 语言中的“错误文件”) - 一个提供内容为“HTTP/1.1 200 OK.... Access-Control-Allow-Origin: *....”的 OPTIONS 请求以传递在浏览器中进行预检,然后一个错误文件为 POST 请求提供内容“HTTP/1.1 503 .....”,让浏览器在 ajax 响应中真正反映状态 503。但是,我无法运行它。

global
    maxconn     256

defaults
    mode                    http
    log                     global
    option                  httplog
    ...

listen express 127.4.184.2:8080
    acl is_options method OPTIONS
    acl is_post method POST

    errorfile 503 /var/lib/openshift/564468c90c1e66c7f2000077/app-root/runtime/repo/503.http if is_post …
Run Code Online (Sandbox Code Playgroud)

javascript ajax haproxy cors

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