我们需要在 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) 有没有办法在 Spring Boot 中配置 logback 以在与系统时区不同的时区中输出日志消息的本地时间?
我想通过配置进行设置(即 application.yml /在特定系统上使用环境变量覆盖)
我的环境是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也有一些评论).但它不适合我的情况.这可能是什么原因?
如果我做
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)
一切正常。
我想念什么?第一次字符串有什么问题?
我有一个可用于注释的方面:
@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 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)
然而,发生的是,hanlderA和handlerB是同一个对象.但我想有两个不同的.我怎样才能以正确的方式实现这一目标?当然,我可以创建一个基类处理程序,然后推导出两个独立的类HandlerA和HandlerB和@Inject他们作为handlerA和handlerB.但我希望以更清洁的方式.
我们有一个 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) java ×4
spring ×2
ajax ×1
amazon-sqs ×1
annotations ×1
aop ×1
aspectj ×1
cors ×1
ejb ×1
haproxy ×1
jakarta-ee ×1
java-8 ×1
java-ee ×1
java-time ×1
javascript ×1
jax-ws ×1
jms ×1
logback ×1
logging ×1
soap ×1
spring-boot ×1
ssl ×1
wildfly ×1