我看到许多框架/库声称他们可以帮助用Java构建反应式应用程序,例如:Akka,Vert.x,RxJava,Reactor,QBit等.
他们似乎有不同的方法,功能,优点,缺点等.我找不到详细的比较.有关于这些框架中的每一个的文档,但我不能理解这些差异.
主要Java反应框架之间有什么区别?
什么是可以推动Java反应式框架选择的应用程序需求?
感谢您的时间.
目前正在尝试使用Spring 5.0.0.RC2,Reactor 3.1.0.M2和Spring Boot 2.0.0.M2进行反应式编程.
想知道WebFlux和Reactor使用的并发和线程模型来正确编写应用程序并处理可变状态.
Reactor doc声明该库被认为是并发不可知的,并提到了Scheduler抽象.WebFlux文档不提供信息.
然而,当通过Spring Boot使用WebFlux时,定义了一个线程模型.
从我的实验中得到的是:
它是否正确 ?什么是WebFlux的并发和线程模型:例如,什么是默认线程池?
感谢您的信息
java multithreading reactive-programming project-reactor spring-webflux
目前正在使用Spring Boot 2.0.0.M4,Spring 5.0.0.RC4和Reactor 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注入?
如果没有,这是否计划好了?
感谢您的时间.
在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.
你们知道我想要做的事情是否得到支持?任何内部/实施信息可能?
最好的祝福.
感谢您的时间.
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) 我们的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会在运行时忽略索引,因为它认为它已经在启动时完成了工作.这是一个主要的性能问题.我们该如何解决这个问题?
感谢您的时间.
当我使用Maven为我的Java EE应用程序运行单元测试时,我收到一个奇怪的错误:org.apache.maven.plugin.MojoExecutionException:无法将工件复制到 由java.io.FileNotFoundException引起的工作目录:D:\Work\Projets\RT_GAF\Dev\Sandbox\client\target\classes(访问被拒绝)
该应用程序的Maven结构是:
如上所述,我们有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) 我在OpenShift上向WildFly 8.0.0部署了一个webapp.该应用程序目前只有很少的用户,但工作正常.对于WildFly,我使用一个免费的OpenShift帐户(我不知道它是否相关).
有时,当我访问应用程序时,我得到503(有时)或404(大多数时候)错误.
如果应用程序已经使用了一段时间(比如2或3天),我似乎得到了这些错误.大约一分钟,如果我重新加载页面,我会得到同样的错误.但大约一分钟后,我不再得到错误,而是应用程序正确可用.
看起来OpenShift"禁用"webapps如果它们已经使用了一段时间,然后根据需要"重新启用"它们(但在"重新启用"webapps期间显示503或404).
=>这是一个错误吗?这是一个众所周知的OpenShift问题吗?
=>如何防止我的webapp不可用?
问候
在开发基于 Wildfly Swarm 的应用程序时,如何使用 project-stages.yml 中可用的属性配置日志记录级别?
换句话说,Spring Boot 的“logging.level.com.acme.rest=DEBUG”属性相当于什么?
目前我知道:
感谢您的时间
java ×3
akka ×1
cdi ×1
eclipselink ×1
el ×1
glassfish ×1
java-ee ×1
jpa ×1
jsp ×1
logging ×1
maven ×1
mongodb ×1
multi-tenant ×1
openshift ×1
rx-java ×1
spring-boot ×1
spring-data ×1
wildfly ×1