= 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
----
