= OpenWebBeans CDI SE implementation It is a plain CDI SE implementation but with a few specific features: . It enables to be extended through `org.apache.openwebbeans.se.SeContainerSelector`, . It has specific properties intended to be used to configured the container, . It provides a generic `main(String[])` == `SeContainer` OpenWebBeans properties [opts="header"] |=== | Name | Description | `openwebbeans.disableDiscovery`|`true` to disable the automatic discovery, false otherwise | `openwebbeans.classes`|Comma separated values of fully qualified classes names to register in the container | `openwebbeans.packages`|Comma separated values of fully qualified packages (either direct packages if `package-info` exists or a class of this package if not) names to register in the container | `openwebbeans.packages.recursive`|Comma separated values of fully qualified packages (either direct packages if `package-info` exists or a class of this package if not) names to register in the container recursively | `openwebbeans.decorators`|List of decorators to enable | `openwebbeans.interceptors`|List of interceptors to enable | `openwebbeans.alternatives`|List of alternatives to enable | `openwebbeans.stereotypes`|List of alternative stereotypes to enable | `openwebbeans.properties`|Properties to enable - in `java.util.Properties` format | `openwebbeans.property.${key}`|A property to enable, this is not useful by itself in programmatic mode but `CDILauncher` can rely on it. |=== == Generic Launcher `org.apache.openwebbeans.se.CDILauncher` is a reusable main to launch any CDI application. In other words you can launch. It reuses the previous part properties prefixed with `--` and getting their value using a space as separator. This main also takes a new property `--openwebbeans.main` to specify an optional main. The value is either a bean name or a fully qualified class name using `@Default` qualifier. The method executed is either `Runnable#run` if the bean implements it or a `run()` method or a `main()` method or a `main(String...)̀ method taking the cleaned up arguments. Example: [source,sh] ---- java -cp .... \ org.apache.openwebbeans.se.CDILauncher \ --openwebbeans.main myNamedMain \ --openwebbeans.disableDiscovery true \ --openwebbeans.packaged com.company.myapp --cli-opt opt-value \ other thing ---- If the bean named `myNamedMain` is the following one: [source,java] ---- @Named("myNamedMain") @ApplicationScoped public class MyMain { public void main(String... args) { Stream.of(args).forEach(System.out::println); } } ---- Then the execution will print: [source] ---- --cli-opt opt-value other thing ----