我正在打开这个帖子,因为我被要求这样做,在回复评论/问题时我在这里添加: Disable scanning of CDI beans in WAR
问题如下。 除了将jandex添加到他的构建pom以启用该功能之外,是否还需要采取任何特定的附加步骤? 我注意到在Wildfly 10.1.0.Final和Weblogic 12.2.1.2部署上使用jandex时没有部署速度差异。如果有的话,部署往往会慢一秒钟。
采取的步骤: 1.访问https://github.com/wildfly/jandex-maven-plugin
<plugin> <groupId>org.jboss.jandex</groupId> <artifactId>jandex-maven-plugin</artifactId> <version>1.0.5</version> <executions> <execution> <id>make-index</id> <goals> <goal>jandex</goal> </goals> <!-- phase is 'process-classes by default' --> <configuration> <!-- Nothing needed here for simple cases --> </configuration> </execution> </executions> </plugin>
请注意,由于包含的Jandex.idx被写入META-INF /
通过wildfly / weblogic console
部署时间完全没有差异。 在这一点上,相信我,应用程序对它所拥有的CDI bean的数量并不轻量级。 这是一个正在解决的问题,但作为一个短期解决方案,我想找到一个加速部署时间的quickfix,并希望Jandex产生一些影响。
相反它似乎有0差异,如果有任何使用jandex的部署总是需要额外花费一到两秒。
也许是可能相关的其他信息。
在wildfly和weblogic中,都可以通过调整来告诉较新版本的WELD不扫描所有已部署的.jar文件。 我们使用告诉焊接的设置只考虑其中包含beans.xml文件的jar文件。
这些jar文件有bean-discover =&#34; all&#34; - 虽然CDI建议使用&#34; annoted&#34;加快分析时间和记忆足迹的方法(但这需要更大的重构)。
请参阅http://weld.cdi-spec.org/news/2016/10/25/tip3-performance/
简而言之: 是否还需要做一些事情来告诉容器考虑jandex索引。 或者只是Weld已经如此快速地分析已部署的类,预构建索引几乎没有区别,除了将部署加到几MB之外?
非常感谢你在这方面的任何帮助。
答案 0 :(得分:1)
你是对的 - 这不会更快。它(很可能)在SE和Servlet中,但不一定在EE服务器中。
Weld SPI为集成商(例如WildFly和WebLogic)提供服务接口,他们可能会或可能不会选择使用它并使用类信息(例如来自Jandex)提供Weld。现在,我不知道WebLogic,但我猜他们根本不使用Jandex(毕竟它是WFLY子项目)。但是当我们谈论WildFly时,他们确实使用了Jandex,但是他们在部署期间“在运行中”创建了自己的Jandex索引,然后他们使用它而不是你可能在那里预先准备好的那个。这解释了你看到的额外的第二件事。
另一方面,在SE / Servlet环境中,Weld本身就是一个“集成商”,可以(并确实)确保使用Jandex。