[weld-dev] Staring weld container for SE environment makes me load java ee classes.

Martin Kouba mkouba at redhat.com
Thu May 17 03:12:20 EDT 2018


Dne 16.5.2018 v 20:02 Alex Sviridov napsal(a):
> Hi Matej
> 
> I followed your answer and run Weld (SE) as auto module in my JPMS 
> layer. In this layer I have an arhive with beans.xml
> This is my code:
>         Weld weld = new Weld();
>          WeldContainer container = weld.initialize();
> 
> This is what I get:
> 
> INFO: WELD-000900: 3.0.4 (Final)
> May 16, 2018 7:00:39 PM 
> org.jboss.weld.environment.deployment.discovery.ReflectionDiscoveryStrategy 
> processAnnotatedDiscovery
> INFO: WELD-ENV-000014: Falling back to Java Reflection for 
> bean-discovery-mode="annotated" discovery. Add org.jboss:jandex to the 
> classpath to speed-up startup.
> 2018-05-16 19:00:39:187 [main] ERROR 
> com.techsenger.webserver.core.internal.Activator - Error starting server
> java.lang.IllegalStateException: WELD-ENV-002009: Weld SE container 
> cannot be initialized - no bean archives found
>      at 
> weld.se.core at 3.0.4.Final/org.jboss.weld.environment.se.Weld.createDeployment(Weld.java:962)
>      at 
> weld.se.core at 3.0.4.Final/org.jboss.weld.environment.se.Weld.initialize(Weld.java:773)
> 
> Are there any ways to control what modules Weld should scan if we 
> initialize via Weld class?

Weld SE does not support JPMS modules atm. By default, the 
TCCL#getResources() is used to find all beans.xml (if set) or the 
ClassLoader which loaded the WeldResourceLoader.class. However, you can 
provide a custom ClassLoader or 
org.jboss.weld.resources.spi.ResourceLoader respectively (see 
Weld#setClassLoader() and Weld#setResourceLoader()).

> 
> By the way: STOP creating packages with the same name in different JAR 
> arhives! JPMS doesn't allow it! I had to merge core-impl, spi and api in 
> one file.

Which packages are you talking about? We do know about this limitation 
and AFAIK this was fixed in 3.0.0. If there is a duplicit package pls 
create a JIRA issue.

> 
> Best regards, Alex
> 
>     Среда, 16 мая 2018, 16:47 +03:00 от Matej Novotny
>     <manovotn at redhat.com <mailto:manovotn at redhat.com>>:
> 
>     Weld 2.x is NOT to be executed with Java 9+.
>     Use Weld 3, please. Best use latest release of course (3.0.4.Final).
> 
>     If you can share the test project on GH, that would be neat as well.
>     Then we could see how you use weld as auto module (as well as many
>     other configurations) and go from there.
> 
>     As for starting SE container, you shouldn't manually call
>     `bootstrap.startContainer(Environments.SE, deployment);`
>     Please see the docs on how to bootstrap Weld in SE, you shouldn't
>     need to deal with any of the methods you listed below.
>     Here is a doc link -
>     http://docs.jboss.org/weld/reference/latest-master/en-US/html_single/#_bootstrapping_cdi_se
> 
>     Regards
>     Matej
> 
>     ----- Original Message -----
>      > From: "Alex Sviridov" <ooo_saturn7 at mail.ru
>     <//e.mail.ru/compose/?mailto=mailto%3aooo_saturn7 at mail.ru>>
>      > To: "weld-dev" <weld-dev at lists.jboss.org
>     <//e.mail.ru/compose/?mailto=mailto%3aweld%2ddev at lists.jboss.org>>
>      > Sent: Wednesday, May 16, 2018 1:51:20 PM
>      > Subject: [weld-dev] Staring weld container for SE environment
>     makes me load java ee classes.
>      >
>      > Hi all
>      >
>      > I am trying to start weld container (2.3.5) as auto module in
>     JPMS. This is
>      > my code
>      >
>      > Deployment deployment = new Deployment() {
>      > @Override
>      > public Collection<BeanDeploymentArchive>
>     getBeanDeploymentArchives() {
>      > List<BeanDeploymentArchive> list = new ArrayList<>();
>      > list.add(archive);
>      > return list;
>      > }
>      >
>      > @Override
>      > public BeanDeploymentArchive loadBeanDeploymentArchive(Class<?>
>     beanClass) {
>      > throw new UnsupportedOperationException("Not supported yet.");
>      > }
>      >
>      > @Override
>      > public ServiceRegistry getServices() {
>      > SimpleServiceRegistry simpleServiceRegistry = new
>     SimpleServiceRegistry();
>      > simpleServiceRegistry.add(ResourceLoader.class, new
>     ResourceLoaderImpl());
>      > return simpleServiceRegistry;
>      > }
>      >
>      > @Override
>      > public Iterable getExtensions() {
>      > return new ArrayList<>();
>      > }
>      > };
>      >
>      > bootstrap.startContainer(Environments.SE, deployment);
>      >
>      > The problem is that in BeanDeployment constructor all services
>     are loaded
>      > here
>      >
>     https://github.com/weld/core/blob/d0019511ea776e9c35eab68c4d493c2df882a121/impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployment.java#L117
>      > and if I in my resource loader service return instead of all
>     java-ee classes
>      > null, I get null pointer exception, for example here
>      >
>     https://github.com/weld/core/blob/d0019511ea776e9c35eab68c4d493c2df882a121/impl/src/main/java/org/jboss/weld/ejb/EJBApiAbstraction.java#L44
>      >
>      > I can't understand why all these classes are requested from me,
>     as I am in
>      > SE. Or I am doing something wrong. Could anyone help me?
>      >
>      > --
>      > Best regards, Alex Sviridov
>      >
>      > _______________________________________________
>      > weld-dev mailing list
>      > weld-dev at lists.jboss.org
>     <//e.mail.ru/compose/?mailto=mailto%3aweld%2ddev at lists.jboss.org>
>      > https://lists.jboss.org/mailman/listinfo/weld-dev
> 
> 
> 
> -- 
> Alex Sviridov
> 
> 
> _______________________________________________
> weld-dev mailing list
> weld-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/weld-dev
> 

-- 
Martin Kouba
Senior Software Engineer
Red Hat, Czech Republic


More information about the weld-dev mailing list