小编Flo*_*umé的帖子

Java反应框架的比较

我看到许多框架/库声称他们可以帮助用Java构建反应式应用程序,例如:Akka,Vert.x,RxJava,Reactor,QBit等.

他们似乎有不同的方法,功能,优点,缺点等.我找不到详细的比较.有关于这些框架中的每一个的文档,但我不能理解这些差异.

主要Java反应框架之间有什么区别?

什么是可以推动Java反应式框架选择的应用程序需求?

感谢您的时间.

java reactive-programming akka rx-java project-reactor

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

Spring WebFlux和Reactor的线程模型

目前正在尝试使用Spring 5.0.0.RC2,Reactor 3.1.0.M2Spring Boot 2.0.0.M2进行反应式编程.

想知道WebFlux和Reactor使用的并发和线程模型来正确编写应用程序并处理可变状态.

Reactor doc声明该库被认为是并发不可知的,并提到了Scheduler抽象.WebFlux文档不提供信息.

然而,当通过Spring Boot使用WebFlux时,定义了一个线程模型.

从我的实验中得到的是:

  • 该模型既不是1个事件线程,也不是1个事件线程+工作者
  • 使用了几个线程池
  • " reactor-http-nio-3 "线程:可能每个核心一个,处理传入的HTTP请求
  • " Thread-7 "线程:由对MongoDB或HTTP资源的异步请求使用
  • " parallel-1 "线程:每个核心一个,由Reactor的Schedulers.parallel()创建,由延迟运算符等使用
  • 共享可变状态必须由应用程序同步
  • ThreadLocal(用于应用程序状态,MDC日志记录等)不是请求作用域,因此不是很有趣

它是否正确 ?什么是WebFlux的并发和线程模型:例如,什么是默认线程池?

感谢您的信息

java multithreading reactive-programming project-reactor spring-webflux

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

Spring WebFlux的会话和请求范围

目前正在使用Spring Boot 2.0.0.M4,Spring 5.0.0.RC4Reactor 3.1.0.RC1试验反应式编程.

在运行时将@RequestScope或@SessionScope bean注入WebFlux REST控制器失败:

java.lang.IllegalStateException: No Scope registered for scope name 'request'
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:342) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.0.RC4.jar:5.0.0.RC4]
    at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:35) ~[spring-aop-5.0.0.RC4.jar:5.0.0.RC4]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673) ~[spring-aop-5.0.0.RC4.jar:5.0.0.RC4]
    at com.adeliosys.scope.Counter$$EnhancerBySpringCGLIB$$7dce0361.increment(<generated>) ~[classes/:na]
    at com.adeliosys.scope.Controller.getQuote(Controller.java:25) ~[classes/:na] // line with theScopedBean.doSometing() call in the REST controller
    (...)
Run Code Online (Sandbox Code Playgroud)

使用Spring Web MVC的阻塞等效工作正常.

我理解反应式编程与线程本地混淆,但WebFlux是否支持请求或会话范围的bean注入

如果没有,这是否计划好了?

感谢您的时间.

spring-webflux

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

在JSP中注入CDI

在JSP中,可以使用EL表达式(如$ {myBean.myAttribute})来使用CDI托管bean.这里没问题.

我想在JSP文件中使用@Inject的"常规注入"(即不使用EL表达式),例如:<%!@Inject MyBean myBean; %>然后是<%= myBean.getMyAttribute()%>.即使使用EL表达式可以实现该示例,其他一些用例也不能.

这似乎并不完全支持应用程序服务器:
- JBoss 6.0.0,JBoss 6.1.0,Resin 4.0.22:好的,它运行得很好.
- JBoss 7.0.1,GlassFish 3.x(测试了几个版本):FAILS,myBean仍为null.

它应该在JSP中正常工作,因为:
(1)它根据各种相关规范在servlet中正常工作;
(2)JSP在运行时被转换为servlet.

你们知道我想要做的事情是否得到支持?任何内部/实施信息可能?

最好的祝福.

感谢您的时间.

jsp el code-injection java-ee cdi

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

GlassFish 4 / EclipseLink 延迟加载 @ManyToOne 关系失败

GlassFish 4(实际上是它的 JPA 实现,即 EclipseLink)无法从我们的 Java EE 7 应用程序延迟加载 @ManyToOne JPA 关系。默认/急切加载是可以的,但不是延迟加载。

“学生”实体中的关系是:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "addr_id")
private Address address;
Run Code Online (Sandbox Code Playgroud)

(简化的)persistence.xml 看起来像:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
    <persistence-unit name="foo-PU" transaction-type="JTA">
        <jta-data-source>jdbc/foo-DS</jta-data-source>
        <class>foo.domain.Student</class>
        <class>foo.domain.Address</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="eclipselink.target-database" value="PostgreSQL"/>
            <property name="eclipselink.logging.level" value="FINE"/>
        </properties>
    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

该应用程序使用多个 API:PrimeFaces、JSF 2.2、CDI 1.1、JPA 2.1。

另请注意,EntityManager 不是通过注入会话 EJB 获得的,而是使用 Persistence.createEntityManagerFactory(...) 然后使用 emf.createEntityManager(...) 手动创建的。

错误信息是:

WARNING:   Reverting the lazy setting on the OneToOne or ManyToOne attribute [address] for the entity class [class foo.domain.Student] since …
Run Code Online (Sandbox Code Playgroud)

jpa glassfish eclipselink

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

使用Spring Data MongoDB进行基于集合的多租户

我们的Spring Boot 1.3.3应用程序使用Spring Data MongoDB 1.8.4在MongoDB(2.6 ou 3.2)上保留数据.

我们需要支持多租户.我们选择使用"基于集合"的多租户,即每个租户都有自己的集合.例如,对于Article实体,集合是"{tenantName} _articles".

Oliver Gierke亲切地解释了使用例如使用spring-data-mongodb多租户实现的实现:

@Document(collectionName = "#{tenantProvider.getTenantId()}_articles")
Run Code Online (Sandbox Code Playgroud)

这在纸上是非常好的,但似乎不适用于现实生活中的应用程序,因为我发现了两个问题,一个是主要问题:

问题1(我可以忍受):在应用程序启动时,Spring Boot使数据库为具有自定义索引的实体(例如@Indexed属性)构建索引.但在创业时,没有"当前租户",因此Spring Data创建了无关的集合,例如"_articles".我们怎么能阻止这个?

问题2(这里主要问题):在运行时,多租户集合(如"{tenantName} _articles")在没有自定义索引的情况下创建和使用(除了"_id"上的默认MongoDB索引).我怀疑Spring会在运行时忽略索引,因为它认为它已经在启动时完成了工作.这是一个主要的性能问题.我们该如何解决这个问题?

感谢您的时间.

multi-tenant mongodb spring-data spring-data-mongodb

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

Maven测试执行错误

当我使用Maven为我的Java EE应用程序运行单元测试时,我收到一个奇怪的错误:org.apache.maven.plugin.MojoExecutionException:无法将工件复制到java.io.FileNotFoundException引起的工作目录:D:\Work\Projets\RT_GAF\Dev\Sandbox\client\target\classes(访问被拒绝)

该应用程序的Maven结构是:

  • ...\Dev\Sandbox \:应用程序的根目录,这是一个列出其他模块的'pom'模块
  • ...\dev\Sandbox\common \:'jar'模块,包含客户端和服务器通用的类,以及测试(仅限JUnit)
  • ...\dev\Sandbox\client \:'jar'模块,包含通过Java Web Start部署的智能客户端类(Swing stuff等)和测试(仅限JUnit)
  • ...\Dev\Sandbox\server \:'jar'模块,包含服务器端类(MVC东西,DAO等)和测试(JUnit和Arquillian)
  • ...\dev\Sandbox\webapp \:'war'模块,包含web项目(JSP,图像,web.xml等),绝对没有类别或测试,将收到'common'和'server'罐子
  • ...\dev\Sandbox\application \:'ear'模块,包含application.xml,将收到'webapp'战争

如上所述,我们有JUnit和Arquillian测试.

从应用程序的根测试执行"mvn test -Pjbossas-remote-6"(该配置文件用于Arquillian测试,以便将容器内测试执行到JBoss 6)失败:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Sandbox ........................................... SUCCESS [0.003s]
[INFO] Sandbox Common .................................... SUCCESS [45.003s]
[INFO] Sandbox Client .................................... SUCCESS [20.226s]
[INFO] Sandbox Server .................................... SUCCESS [49.064s]
[INFO] Sandbox WebApp .................................... FAILURE [3.128s]
[INFO] Sandbox Application ............................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total …
Run Code Online (Sandbox Code Playgroud)

java maven

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

OpenShift的临时503和404托管了webapp

我在OpenShift上向WildFly 8.0.0部署了一个webapp.该应用程序目前只有很少的用户,但工作正常.对于WildFly,我使​​用一个免费的OpenShift帐户(我不知道它是否相关).

有时,当我访问应用程序时,我得到503(有时)或404(大多数时候)错误.

如果应用程序已经使用了一段时间(比如2或3天),我似乎得到了这些错误.大约一分钟,如果我重新加载页面,我会得到同样的错误.但大约一分钟后,我不再得到错误,而是应用程序正确可用.

看起来OpenShift"禁用"webapps如果它们已经使用了一段时间,然后根据需要"重新启用"它们(但在"重新启用"webapps期间显示503或404).

=>这是一个错误吗?这是一个众所周知的OpenShift问题吗?

=>如何防止我的webapp不可用?

问候

http-status-code-404 http-status-code-503 openshift wildfly

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

Wildfly Swarm 的日志级别配置

在开发基于 Wildfly Swarm 的应用程序时,如何使用 project-stages.yml 中可用的属性配置日志记录级别?

换句话说,Spring Boot 的“logging.level.com.acme.rest=DEBUG”属性相当于什么?

目前我知道:

  • “swarm.logging=DEBUG”可用于配置所有日志级别(不是我需要的)
  • 可以使用“standalone.xml”,但操作不够友好
  • LoggingFraction 可用于以编程方式配置日志记录级别(也不是我需要的)
  • 该文档还提到了“logging.level”,但到目前为止我无法让它工作

感谢您的时间

logging spring-boot wildfly-swarm

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