-------------------------------
Apache OpenWebBeans 1.1.6
-------------------------------
Welcome! 
Thanks for downloading and using OpenWebBeans. 
This document is a "Getting Started Guide" for OpenWebBeans.

This document is based on the 1.1.6 release of Apache OpenWebBeans.

--------------------------------
What is Apache OpenWebBeans?
--------------------------------
OpenWebBeans is an Apache License V 2.0 licensed implementation of the JSR-299,
Contexts and Dependency Injection for the Java EE platform.

It also already incorporates some features which are part of JSR-346 (CDI-1.1)
but doesn't need API changes as we still use the JCDI-1.0 API. The
incorporated CDI-1.1 features are mostly parts which are not well
defined in the CDI-1.0 specification, like Serialisation checks, etc.

Our project's web page can be found at:
http://openwebbeans.apache.org

The projects WIKI page can be found at:
https://cwiki.apache.org/confluence/display/OWB/Index


--------------------------------
OpenWebBeans 1.1.6 Release Features
--------------------------------

- The 1.1.6 release supports the following features
-----------------------------------
* Managed Beans Support
* Session Beans Support (via Embeddable OpenEJB container in Tomcat)
* Producer Method Support
* Producer Field Support
* Java EE Resource Injection Support
* JMS OpenWebBeans Support(OWB Specific)
* Inheritance, Stereotype Inheritances
* Specialization Support
* Event Support
* Decorator and Interceptor Support
* Lookup and Dependency Injection Support
* Java EE Plugin Support (via ServetContextListener interface)
* Portable Integration Support
* Passivation Capability of Beans
* @Alternative support
* OSGi environment support with an own plugable bundle ClassPath scanner
* vastly improved Interceptor performance
* plugable SecurityManager integration doubles speed if no SecurityManager is being used
* improved Serialization handling
* improved CreationalContext handling
* revised internal logging
* upgrade to JPA-2 and JSF-2 support
* support for direct CDI usage in tomcat-6 and tomcat-7 environments
* optional lenient lifecycle interceptor checking
* automatically detect if BeanManager#isInUse()
* improved Serialization checks from the CDI-1.1 specification



Noteable differences to CDI spec behaviour
--------------------------------------------

In a few special cases Apache OpenWebBeans might behave a little bit different than
other CDI implementations. This is to some degree caused by the JSR-299 spec being
not clear about some special topics so we needed to interpret the wording on our own.
This mainly concerns the area of section 12.1 Bean Archives (BDA) which doesn't work
out when it comes to OSGi containers and likes.
In Apache OpenWebBeans, a settings configured in a beans.xml file of a BDA is not
only effective for this very bean archive but for the whole BeanManager in control
of the Application. This is especially the case for <alternatives> and
<interceptors>! An Alternative, Interceptor or Decorator enabled in one BDA is active
for the whole Application. This behaviour will most likely also be the default behaviour
in the CDI-1.1 JSR-346 specification.

-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.6
-------------------------------------------

Bug

    [OWB-694] - Misleading exception message "Wrong termination object"
    [OWB-696] - check for unproxyable API types should get moved to the validateBeans phase
    [OWB-697] - Non-Static Loggers leads to NonSerizializableException
    [OWB-698] - InjectableBeanManager not serializable
    [OWB-703] - getBeans cache key algorithm must be unique
    [OWB-707] - tomcat-sample and tomcat7-sample are just broken.
    [OWB-708] - PrincipalBean doesn't get found
    [OWB-709] - webbeans-tomcat6 must honour WEB-INF/classes/META-INF/beans.xml

Improvement

    [OWB-695] - Cause missing in AnnotationDB$CrossReferenceException
    [OWB-701] - Support ASM for Bean Proxies
    [OWB-702] - Add serialization unit tests to openwebbeans-web to catch future regressions
    [OWB-704] - use method filter in javassist proxies instead of "manual" filtering



-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.5
-------------------------------------------

Bug

    * [OWB-498] - Java EE Resource Injections for CDI Interceptors & Decorators
    * [OWB-605] - tomcat plugins must register WebBeansConfigurationListener as first Listener
    * [OWB-663] - Maven dependencies between impl and spi
    * [OWB-666] - invalid check in AnnotationManager#checkStereoTypeClass
    * [OWB-667] - Bean queries have strange behavior (difference between Open Web Beans and the Reference Implementation)
    * [OWB-669] - Bean fail over is not in sync with specs
    * [OWB-672] - Decorators creates Stackoverflow or NPE if under heavy load
    * [OWB-673] - injecttarget are not updated after ProcessInjectionTarget event
    * [OWB-676] - CdiTest OwbContainer fails if WebContainerLifecycle is being used
    * [OWB-677] - improve getBeans cache key algorithm
    * [OWB-680] - drop unused getInstance() methods from our services
    * [OWB-681] - remove deprecated methods from BeanManagerImpl
    * [OWB-682] - get rid of OWB InterceptorType and usejavax.enterprise.inject.spi.InterceptionType instead
    * [OWB-683] - remove obsolete Methods from our Bean implementations and handlers
    * [OWB-685] - OwbApplicationFactory doesn't set Application
    * [OWB-686] - OWBApplicationFactory wrappedApp should be consistent between getter and setter and volatile
    * [OWB-687] - clean up non-static loggers
    * [OWB-688] - fix non-serializable fields in Serializable classes
    * [OWB-689] - OWBInjector should be stateless
    * [OWB-690] - WebContextsService cleanup should get reworked
    * [OWB-693] - webbeans-web shall not declare StandaloneResourceInjectionService

Improvement

    * [OWB-674] - rewrite owb logger api
    * [OWB-684] - move from ancient 'ContextTypes' definition to standadrd scope annotations

Task

    * [OWB-678] - Check for unused classes and remove them
    * [OWB-691] - Sonar cleanup before the 1.1.5 release


-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.4
-------------------------------------------

Bug

    * [OWB-567] - Lookup of Provider results in NullPointerException on get()
    * [OWB-574] - NewBean doesn't support EJBs
    * [OWB-580] - ObserverMethodImpl needs support for EJB's whose Bean Types do not include the EJB class
    * [OWB-602] - OpenWebBeans OpenEJB integration OSGi bundle declares the wrong version for the javax.transaction package
    * [OWB-617] - NullPointerException in InstanceBean#createInstance
    * [OWB-628] - Event injection doesn't work in observer methods.
    * [OWB-633] - define stereotypes & thirdparty
    * [OWB-634] - @Interceptors added by extension ignored
    * [OWB-636] - Samples point to parent pom file that doesn't exist
    * [OWB-643] - it isn't possible to add/remove @Alternative during the bootstrapping process
    * [OWB-644] - wrong config entry for LoaderService
    * [OWB-645] - InjectionPoint is null when using @Produces. NullPointerException caused by CDI container providing a null InjectionPoint into a producer method.
    * [OWB-646] - Failover does not work (again)
    * [OWB-648] - regression on tck org.jboss.jsr299.tck.tests.lookup.injectionpoint.InjectableReferenceTest
    * [OWB-649] - exceptions in EJB's are wrapped in InvocationTargetException
    * [OWB-655] - CDI doesn´t inject stateless EJB by abstract class.
    * [OWB-658] - BeanManager.getBeans(Type, Annotation...) can not be used to query all known beans
    * [OWB-659] - An annotated interface class is being seen as a manage bean.
    * [OWB-660] - WebBeansContext #activateContext for SessionScoped.class doesn't set the ThreadLocal

Improvement

    * [OWB-596] - Provide info about injetion point for "Passivation capable beans must satisfy passivation capable dependencies ..."
    * [OWB-604] - more details for exceptions during bootstrapping
    * [OWB-635] - support callbacks (@PostContrcut, @PreDestroy) in Extensions
    * [OWB-637] - [perf] ELContextStore.destroyDependents() creates unnecessary HashMap$KeyIterator instances
    * [OWB-638] - [PERF] Avoid unnecessary AbstractList$Itr instances
    * [OWB-639] - [perf] InjectionResolver.getBeanCacheKey creates many StringBuilder instances
    * [OWB-641] - the jee5-ejb-resource module should support @EJB(mappedName)
    * [OWB-647] - [PERF] Avoid unnecessary StringBuilder instances - improve checkNullInstance, checkScopeType, ... methods
    * [OWB-653] - remove @ViewScoped support
    * [OWB-657] - review startup performance
    * [OWB-661] - hashCode, equals and toString() of our built in Qualifier Literals should be implemented ourselfs

Task

    * [OWB-656] - remove webbeans-openejb
    * [OWB-662] - remove obsolete class WebBeansAnnotation



-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.3
-------------------------------------------

Bug

    * [OWB-515] - interceptors don't support inheritance without an overridden method annotated with @AroundInvoke
    * [OWB-565] - missing check for producer methods
    * [OWB-625] - BeanManager.resolve throw java.util.NoSuchElementException with an empty set parameter
    * [OWB-629] - NoClassDefFoundError for optional dependencies
    * [OWB-630] - AmbiguousResolutionException thrown for Decorators that Decorate multiple beans where any of those beans are passivation capable.
    * [OWB-631] - openwebbeans-resource misses openwebbeans.properties

Improvement

    * [OWB-475] - support for optional beans
    * [OWB-627] - Automatically destroy @Dependent contextual instances created with Instance<T>


-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.2
-------------------------------------------

Bug

    * [OWB-562] - non-enabled alternative beans with passivating scope fail validation during deployment
    * [OWB-589] - " ... requires a passivation capable dependency ..." for producer method with return type String and non serializable injected dependency
    * [OWB-597] - StackOverFlow when injecting product in same bean where @Produces is placed
    * [OWB-615] - remove @Overrides for interfaces to be java5 compatible
    * [OWB-616] - javax.el.ExpressionFactory has final methods! CDI doesn't allow that. - Test on final **PRIVATE** methods too?
    * [OWB-618] - we sometimes invoke a dispose method without having created the bean upfront
    * [OWB-619] - @New beans must only exist if there is at least one injection point for them
    * [OWB-620] - any disabled bean of passivating scope will wrongly be detected as 'not passivatable'
    * [OWB-622] - beanmanager injection in afterBeanDiscovery method parameter
    * [OWB-624] - AnnotatedTypes registered in BeforeBeanDiscovery might get processed twice

Improvement

    * [OWB-623] - Relax check on @AroundInvoke Interceptors 'throws Exception'

New Feature

    * [OWB-621] - Alternative configuration method for buggy container or pre servlet api 2.5 container


-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.1
-------------------------------------------

Bug

    * [OWB-406] - BaseEjbBean.removedStatefulInstance used by multiple instances/EjbBeanProxyHandlers
    * [OWB-447] - unnecessary contextual/non-contextual distinction in OpenWebBeansEJBIntercpetor
    * [OWB-449] - EJB interceptor has incorrect/unnecessary use of business method checks
    * [OWB-483] - Problem with mulitple custom interceptors and passivation
    * [OWB-512] - ApplicationContext and SingletonContext in WebContextsService
    * [OWB-554] - DelegateHandler wraps Beans exceptions
    * [OWB-558] - PassivationCapable bean id's for Producer Fields do not take into account generics
    * [OWB-561] - Multiple contexts with the same Scope are not handled properly -- causing tck failures
    * [OWB-563] - producers of passivating beans fail when the declared return type is not serializable but the actual return type is
    * [OWB-566] - ProcessInjectionTarget event gets fired too early
    * [OWB-571] - fix site build under maven3 and upgrade logo
    * [OWB-573] - Invalid checking of Interceptor serialization capabilities for non-Passivation capable EJBs
    * [OWB-576] - FileNotFoundException on WebSphere
    * [OWB-577] - FileNotFoundException on WebSphere
    * [OWB-578] - Allow DI for OpenWebBeansConfiguration properties
    * [OWB-579] - check for non-proxyiable methods should exclude synthetic methods
    * [OWB-581] - Decorator interface check needs configurable exclusions
    * [OWB-584] - check for declared name consistency for specializes beans is wrong
    * [OWB-585] - ProcessSessionBean doesn't deal with generic type quite right (CDITCK-215)
    * [OWB-586] - Interceptors added by portable extensions don't work
    * [OWB-587] - Use business interface for producer and disposer methods of Session beans
    * [OWB-588] - PrincipalBean is misspelled
    * [OWB-590] - Seam Persistence does not work with OWB - AfterBeanDiscovery.addBean will be ignored
    * [OWB-591] - EJB @Specializes inheritance
    * [OWB-593] - Interceptor binding added on an interceptor class at ProcessAnnotatedType phase is not considered
    * [OWB-595] - Use case "Faces Request Generates Non-Faces Response" locks conversation forever (-> BusyConversationException)
    * [OWB-598] - InjectionResolver crashes with a NPE when injecting a method parameter
    * [OWB-599] - move getBeanXmls() back to Set<URL>
    * [OWB-600] - cache information about non intercepted methdos in ProxyHandlers
    * [OWB-601] - WebContextsService only works if ServletContext is given
    * [OWB-608] - openwebbeans-el10 plugin misses openwebbeans.properties
    * [OWB-614] - add LICENSE and NOTICE files to all our samples

Improvement

    * [OWB-555] - ClassUtil methods contain spelling, camelcase, etc., type errors
    * [OWB-557] - #setAccessible(false) isn't needed
    * [OWB-560] - upgrade the TCK to 1.0.4.SP1
    * [OWB-564] - CdiTestOpenWebBeansContainer - check if a std.-context is active before destroying it
    * [OWB-582] - Support for Java 1.5 (needed for WebSphere 6.1)
    * [OWB-583] - Support for Servlet API 2.4 (needed for WebSphere 6.1)
    * [OWB-594] - create a configurable mapping Scope->ProxyMethodHandlerImplementation
    * [OWB-607] - upgrade our samples to newest available dependencies
    * [OWB-610] - upgrade to apache parent pom 10
    * [OWB-611] - adding ASF trademark documentation to our official site build
    * [OWB-612] - upgrade various maven plugins
    * [OWB-613] - Exclude Samples WARs Publishing with Maven

Task

    * [OWB-592] - EJB Specialization utility method



-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.0
-------------------------------------------

Bug

    * [OWB-295] - resolve bugs in Javassist Proxy
    * [OWB-417] - BaseEjbBean.destroyComponentInstance() should call direct container remove API, not call an @Remove annotated method
    * [OWB-422] - Support needed for PrePassivate, PostActivate, and AroundTimeout via EJBInterceptor.
    * [OWB-444] - Using Static Loggers in Shared ClassLoader
    * [OWB-452] - set active flag to false then context is destroyed
    * [OWB-456] - When multiple interceptors are defined for a bean OWB does NOT correctly remove the overridden base Interceptors
    * [OWB-469] - JSR299TCK: Security Error / Passivation errors during readObject
    * [OWB-470] - OWBInjector does not work correctly for EJB Beans
    * [OWB-471] - Possible StackOverflowException from defineProducerMethods in WebBeansAnnotatedTypeUtil
    * [OWB-473] - bundles that use javasissist to proxy their contents need to import some javassist packages
    * [OWB-474] - InjectionTargetBean#injectSuperResources is missing
    * [OWB-477] - Two instances of using ObjectInputStream that may not have visibility into application classloader
    * [OWB-480] - Avoid a couple NPEs
    * [OWB-482] - Small issues
    * [OWB-486] - ResourceBean tries to proxy final classes before testing them for being final
    * [OWB-489] - AnnotatedTypes added with BeforeBeanDiscovery.addAnnotatedType method are ignored
    * [OWB-490] - ProcessObserverMethod Type parameters are inverted (CDITCK-174)
    * [OWB-491] - Decorators init needs to scan superclasses for more interfaces. cf CDITCK-178
    * [OWB-492] - events don't get sent to private @Observes methods
    * [OWB-493] - ProcessProducerMethod and ProcessProducerField type parameters are reversed in filtering (?) CDITCK-168
    * [OWB-494] - Subclasses with non-overriden observer methods not recognized as beans with observer methods
    * [OWB-496] - Don't replace the ProxyFactory classloaderProvider without the intention to do so
    * [OWB-499] - WEB-INF/beans.xml of a war will not activate Bean Archive behaviour
    * [OWB-502] - Only cache the ContextService once, in the SingletonService
    * [OWB-504] - OwbApplicationFactory getWrapped should return wrapped application factory
    * [OWB-505] - OwbApplicationFactory should not be installed by default
    * [OWB-509] - Unwrap InvocationTargetException in ResourceProxyHandler.invokie
    * [OWB-510] - return null instead of an unusable proxy if a resource is missing
    * [OWB-511] - Delegate actualInstance serialization behavior in ResourceProxyHandler
    * [OWB-514] - Leak in ELContextStore
    * [OWB-519] - broken wls support
    * [OWB-521] - ProducerMethodBean could theoretically produce a NPE
    * [OWB-522] - Missing updateTimeout in one of begin methods for conversation
    * [OWB-523] - @SessionScoped bean failover does not work
    * [OWB-524] - OWB classpath scanning of non-jars doesn't work if the classpath contains spaces
    * [OWB-527] - JspFactory.getDefaultFactory() is synchronized, We can cache the return value to improve performance
    * [OWB-529] - lazy initialized class members should be volatile
    * [OWB-530] - multi massive execution of our Interceptor test unveils a concurrency problem
    * [OWB-531] - cleanup WebBeansELResolver#getValue
    * [OWB-533] - concurrency bottleneck due to use of our logger
    * [OWB-534] - Injection of @PersistenceContext does not work with abstract/base classes
    * [OWB-541] - replace WeakHashMap with a standard one in InterceptorHandler
    * [OWB-542] - Disposer is called twice on Dependent beans when injected into a managed object that is called from a JSP
    * [OWB-543] - get rid of checked Exceptions in our SPI
    * [OWB-545] - Cleanup our SecurityManager integration
    * [OWB-546] - @Typed gets ignored if we use a AnnotatedType from an Extension @Observing ProcessAnnotatedType
    * [OWB-547] - WebContextsService throws NPE on asynchronous app startup
    * [OWB-548] - missing null check in DefaultContextsService#stopApplicationContext
    * [OWB-550] - duplicated observer methods in case of @Specializes

Improvement

    * [OWB-209] - remove all <repositories> from our poms
    * [OWB-254] - suppress initialising contextual handling for configurable URIs.
    * [OWB-335] - implement a sample for @ViewScoped in reservation
    * [OWB-393] - remove old XML configuration code
    * [OWB-448] - More changes for decorator and interceptor passivation support
    * [OWB-461] - source code quality
    * [OWB-472] - archive centric beans.xml enabling
    * [OWB-478] - make OWB build maven-3 aware
    * [OWB-485] - AmbiguousResolutionException doesn't print details about the injection point
    * [OWB-500] - improved app-server support
    * [OWB-503] - Reduce static synchronized hashmap usage
    * [OWB-506] - Upgrade our samples to Apache MyFaces-2.0.3 and OpenJPA-2.0.1
    * [OWB-507] - our samples should be prepared for EE as default
    * [OWB-508] - Dependent scope proxies are needed to wrap the build-in beans returned from the services if they are not serializable yet
    * [OWB-516] - Get TCK standalone 1.0.4 CR2
    * [OWB-517] - Conversation Log Improvement
    * [OWB-518] - log all bean-archive markers
    * [OWB-520] - spi for the webbeans-jee5-ejb-resource plugin
    * [OWB-525] - create a findbugs filter file in our build-tools resource
    * [OWB-526] - remove usage of java.net.URLs from ScannerService and drop scannotation
    * [OWB-535] - free ScannerService resources once we don't need it anymore
    * [OWB-536] - revisit our Logger usage in our Bean impls
    * [OWB-537] - clear() AnnotatedElementFactory after the deployment
    * [OWB-539] - fill AnnotatedTypeImpl lazily
    * [OWB-540] - StandaloneResourceInjectionService should cache info about classes which don't contain EE resource injection points
    * [OWB-544] - improve BeanManager#getContext performance

New Feature

    * [OWB-433] - add a configuration flag for switching to a lenient lifecycle interceptor checking
    * [OWB-501] - owb ee 5 resource integration
    * [OWB-528] - Use ApplicationWrapper as parent of OwbApplication in JSF 2 plugin
    * [OWB-532] - create a new BeanManager#isInUse()
    * [OWB-538] - lazy loading of not explicitly marked (via annotation or registered by extension) Dependent beans

Question

    * [OWB-383] - static fields in CreationalContext

TCK Challenge

    * [OWB-484] - Running TCK 1.0.1 Final and Respective Corrections

Task

    * [OWB-19] - Geronimo Integration
    * [OWB-428] - implementation of equals and hashCode for AbstractOwbBean
    * [OWB-453] - add a flag to disable context activation in EJB interceptor




-------------------------------------------
Release Notes - OpenWebBeans - Version 1.0.0
-------------------------------------------

Bug

    * [OWB-318] - multiple methods with same EJB @interceptors(foo.class) in same bean class get multiple interceptor instances
    * [OWB-384] - OWB needs to call 299-defined PrePassivate, PostActivate, and AroundTimeout interceptors for EJBs
    * [OWB-422] - Support needed for PrePassivate, PostActivate, and AroundTimeout via EJBInterceptor.
    * [OWB-429] - OpenWebBeansEjbPlugin Class Hierarchy
    * [OWB-438] - Cached Normal Scoped Proxy instances
    * [OWB-439] - EjbPlugin session bean proxy creation thread safe problem
    * [OWB-445] - we must not use javassist ProxyFactory#setHandler(MethodHandler)
    * [OWB-446] - EJB lifecycle callbacks not stacked correctly
    * [OWB-450] - NullPointerException in DependentScopedBeanInterceptorHandler when it has a NullCreationalContext (normally from a EE component).
    * [OWB-454] - ClassUtil.callInstanceMethod() doesn't propogate original exception
    * [OWB-455] - IllegalArgument method calling remove method of EJB during destroy
    * [OWB-456] - When multiple interceptors are defined for a bean OWB does NOT correctly remove the overriden base Interceptors
    * [OWB-457] - we must not create a SessionContext for static resource reqeusts
    * [OWB-460] - fix owb-openejb and owb-ejb artifactIds
    * [OWB-464] - InjectionPointImpl using wrong class loader during serialize/deserialize, dropping qualifiers, and omiting qualifier values.
    * [OWB-466] - Ensure removal of all ThreadLocal values

Improvement

    * [OWB-177] - Handling of InterceptionType#POST_ACTIVATE, PRE_PASSIVATE and AROUND_TIMEOUT is missing
    * [OWB-407] - detailed information about exceptions
    * [OWB-451] - Allow InterceptorUtil#callAroundInvokes to propogate a callers 'creational context key'
    * [OWB-459] - upgrade to newer library versions
    * [OWB-463] - EjbDefinitionUtility.defineEjbBeanProxy() should be able to create proxies for no-interface local beans
    * [OWB-465] - enhance EJB common code for crude @LocalBean support

TCK Challenge

    * [OWB-394] - Any idea why our BeforeBeanDiscovery.addInterceptorBinding() has different signature?

Task

    * [OWB-453] - add a flag to disable context activation in EJB interceptor
    * [OWB-462] - Refactor AnnotationUtil.hasAnnotationMember()


-------------------------------------------
Release Notes - OpenWebBeans - Version 1.0.0-alpha-2
-------------------------------------------
Bug

    * [OWB-303] - upgrade Javassist to a newer version
    * [OWB-338] - our internal SessionContext and ConversationContext must support Session serialization
    * [OWB-385] - implement passivation of managed beans in ServletContextListener
    * [OWB-401] - ELContextStore not cleaned up for some JSP EL lookups
    * [OWB-402] - OpenWebBeansJsfPlugin does not recognize @ManagedBean
    * [OWB-404] - Contexts must not get stored in a static Map in BeanManager
    * [OWB-405] - AnnotatedElementFactory must not use static cache maps
    * [OWB-408] - NPE in WebBeansELResolver
    * [OWB-415] - EjbBeanProxyHandler for dependent ejb must save ejb instance
    * [OWB-416] - BaseEJBBean.destroyComponentInstance() tries to call multiple remove methods
    * [OWB-418] - EjbBeanProxyHandler must be 1:1 with proxy instances for dependent SFSB
    * [OWB-419] - fix @Dependent handling in ELResolver
    * [OWB-420] - SingletonContext is mapped to @ConversationScoped
    * [OWB-421] - defined-in-class EJB lifecycle callbacks masked by our Interceptor
    * [OWB-426] - Tweak EJBPlugin to work with Standalone Tests
    * [OWB-431] - Generic Type Inheritance not resolved correctly
    * [OWB-434] - ThreadLocal<SingletonContext> doen't get cleaned up
    * [OWB-436] - AbstractContext bean instance creation is not thread safe
    * [OWB-437] - Improve AbstractContext synchronization
    * [OWB-440] - WebBeansDecoratorConfig.getDecoratorStack always returns new Decorators
    * [OWB-442] - our EJB proxies are broken when multiple local interfaces are used on a single class
    * [OWB-443] - Normal-scoped EJB not removed by container during Contextual.destroy()

Improvement

    * [OWB-57] - cleanup problems found by maven-findbugs-plugin
    * [OWB-195] - Give warning to the developer related with non- portable operations
    * [OWB-409] - create a name for OWB our faces-config.xml
    * [OWB-410] - lazy initialisation of ejbInterceptors
    * [OWB-411] - cache calls to isNormalScope()
    * [OWB-412] - Allow container specific extensions to WebConfigurationListener access to the lifecycle
    * [OWB-413] - cache calls to ClassUtils#getObjectMethodNames()
    * [OWB-414] - improve Interceptor performance
    * [OWB-425] - improve performance of owb-el-resolver
    * [OWB-427] - improve read-performance of AbstractOwbBean
    * [OWB-430] - improve performance of WebBeansPhaseListener
    * [OWB-432] - Create Singleton Service SPI
    * [OWB-441] - new configuration properties mechanism

Sub-task

    * [OWB-193] - If an interceptor or decorator has any scope other than @Dependent, non-portable behavior results.
    * [OWB-194] - If an interceptor or decorator has a name, non-portable behavior results.
    * [OWB-196] - If an interceptor or decorator is an alternative, non-portable behavior results.
    * [OWB-197] - If a stereotype declares any other qualifier an- notation, non-portable behavior results.
    * [OWB-198] - If a stereotype is annotated @Typed, non-portable behavior results.


TCK Challenge

    * [OWB-424] - Adding Document for How to Configure and Run TCK (standalone and web profile TCKs)


-------------------------------------------
Release Notes - OpenWebBeans - Version 1.0.0-alpha-1
-------------------------------------------
Bug

    * [OWB-216] - Update pom.xml svn links
    * [OWB-231] - exception using abstract decorators
    * [OWB-245] - Using parameterized type varaibles fails for Producer Method injection
    * [OWB-259] - Implement spec 11.5.5. ProcessModule event
    * [OWB-289] - Owb return 2 beans for Indirect specialized producer beans
    * [OWB-302] - InjectionPoint injections (both method and field based) in Decorators result in null
    * [OWB-312] - Add dopriv's to allow OWB to function with java 2 security enabled
    * [OWB-317] - creationalContext in InvocationContextImpl is always null
    * [OWB-318] - multiple methods with same EJB @interceptors(foo.class) in same bean class get multiple interceptor instances
    * [OWB-327] - annotating an Interceptor with @ApplictionScoped leads to OutOfMemory
    * [OWB-329] - Interceptor instances get created each time the interceptor gets called
    * [OWB-332] - Destroy Depdent Of Producer Method Beans when Invocation Completes
    * [OWB-333] - InjectionTarget and Producer Handling
    * [OWB-334] - cid is missing when using redirect for a jsf 2.0 application
    * [OWB-336] - injected BeanManager must be Serializable
    * [OWB-337] - events must not get broadcasted to beans which have no active Context
    * [OWB-339] - Injecting Non-Contextual Beans Causes NPE in WebBeansUtil
    * [OWB-340] - BeanManagerImpl.createInjectionTarget() Throws Exception When No Constructor Found
    * [OWB-341] - CreationalContext#incompleteInstance should get cleaned after create()
    * [OWB-342] - InterceptorHandler crashes with NullPointerException after deserialisation
    * [OWB-343] - upgrade JPA spec from 1.0-PFD2 to 1.0 final revision
    * [OWB-345] - Remove duplicate dependencies
    * [OWB-351] - OWB picks up @SessionScoped contextual instances from expired sessions
    * [OWB-352] - Thread Safety Problem in our InterceptorHandlers, aka proxies
    * [OWB-353] - NPE in removeDependents@CreationalContextImpl
    * [OWB-354] - WebContextService may throw NPE in tiered classloading environmemt
    * [OWB-357] - WebbeansFinder should index first on ClassLoader, not singleton type
    * [OWB-359] - ownerCreationalContext sometimes causes NPE in InterceptorDataImpl.createNewInstance()
    * [OWB-361] - underlying EJB method not actually in our interceptors stack
    * [OWB-362] - InvocationTargetException when invoking Stateless SessionBean
    * [OWB-363] - Intermittent bug with ApplicationScope disposers not being called
    * [OWB-366] - ContextNotActiveException fired from AppScope/NormalScopedBeanInterceptorHandler when a proxied object finalized
    * [OWB-368] - The 299 spec (that I have) uses receive=IF_EXISTS but OWB uses notifyObserver=IF_EXISTS.
    * [OWB-369] - Static ContextsService in ContextFactory causes wrong webContextService used for multiple applications
    * [OWB-370] - Intransient Conversation context get rdestroyed randomly by destroyWithRespectToTimout
    * [OWB-371] - no lifecycle interceptors for non-contextual EJB
    * [OWB-372] - creational context not cleaned up for non-contextual EJB interceptions
    * [OWB-373] - build crashes with missing artifact error
    * [OWB-374] - migrate jsf2sample from sun to MyFaces
    * [OWB-376] - [patch] Guess example broken with Jetty plugin 6.x due to EL 2.2
    * [OWB-377] - revise logging
    * [OWB-378] - ejb at bottom of decorator stack doesn't handle changed method
    * [OWB-380] - NormalScopedBeanInterceptorHandler throws NPE when handling 3rd party Contexts
    * [OWB-381] - NPE thrown from AbstractInjectable if dependent producer returns null
    * [OWB-382] - injecting a @Dependent bean into a passivatation scoped bean causes a NonSerializableException
    * [OWB-387] - DependentContext Interceptor Double Call for PostConstruct
    * [OWB-390] - fix broken links in our 'site'
    * [OWB-396] - fix poms to work with maven 3
    * [OWB-398] - DelegateHandler cached too agressively
    * [OWB-399] - Proxy objects could not be correctly deserialized by using javassist 3.11. we need to update to 3.12
    * [OWB-400] - starting OWB as part of an EAR in geronimo causes a exception due to missing 'bundle' protocol

Improvement

    * [OWB-116] - Update Business Method Definition
    * [OWB-118] - Supports Decorators for Other Delegate Injections
    * [OWB-136] - fix 'broken' license headers in our java files
    * [OWB-170] - Address findbug issues in webbeans-impl
    * [OWB-183] - Improve webbeans-doc module to get a documentation more user friendly
    * [OWB-214] - get rid of javax.transaction.Transaction dependency in webbeans-impl
    * [OWB-237] - NoSuchElementException when WebBeansConfigurationListener is absent
    * [OWB-275] - remove unused imports and cleanup code
    * [OWB-286] - java.lang.NoClassDefFoundError: javax/validation/Validator
    * [OWB-313] - create caching strategies for resolving Bean<T> for BeanManager and EL invocations
    * [OWB-314] - cache resolved instances in NormalScopedBeanMethodHandlers of @ApplicationScoped beans
    * [OWB-315] - cache resolved instances in NormalScopedBeanMethodHandlers of @SessionScoped beans
    * [OWB-319] - Strange logging when writing non-Serializable SessionScoped bean
    * [OWB-320] - Remove Java EE Dependencies from WebBeans Core
    * [OWB-322] - Create new EJB project and separate common EJB classes from OpenEJB plugin
    * [OWB-325] - Relocate SPI Classes to SPI Module. Change JSR299, JSR330 as optional pom dependency.
    * [OWB-326] - improve producer tests
    * [OWB-328] - improve logger performance
    * [OWB-330] - reduce BeanManagerImpl#getManager() calls inside the same functions
    * [OWB-331] - Cache Interceptor & Decorator Stack oon Interceptor Handler
    * [OWB-346] - Make EJB samples running
    * [OWB-347] - Using InjectableBeanManager in TCK
    * [OWB-349] - ignore exception during type hierarchy scan
    * [OWB-350] - Support Interceptor for non-contextual EJBs
    * [OWB-355] - OpenEjbBean should look for @Remove methods
    * [OWB-356] - EjbPlugin only looks for DeployementInfo once, so new deployed application won't be discovered
    * [OWB-358] - provide property to skip injection in @PostConstruct of OpenWebBeansEjbInterceptor
    * [OWB-360] - Add BeanManager to a ServletContext attribute
    * [OWB-364] - Reduce the amount of info level logging
    * [OWB-365] - make injection optional in OWBEJBInterceptor
    * [OWB-375] - Performance: OWB logging performs operations when logging disabled.
    * [OWB-379] - upgrade to final atinject-spec artifact
    * [OWB-386] - upgarde CDI TCK to 1.0.2.CR1
    * [OWB-389] - atinject-tck upgrade to final 1.0 release
    * [OWB-397] - Add helper method and some debug to WebBeansFinder

New Feature

    * [OWB-316] - Implement a generic TestContainer for CDI implementations
    * [OWB-323] - Provide methods to pass classloader into ServiceLoader and WebBeansFinder for use in tiered classloader situations
    * [OWB-324] - Add Tomcat Plugin
    * [OWB-348] - Adding Interceptor and Decorator Support for EJB Beans
    * [OWB-395] - OpenWebBeans Tomcat 7 Support

TCK Challenge

    * [OWB-388] - Pass TCK 1.0.2 CR1 Web Profile

Task

    * [OWB-6] - Scope passivation
    * [OWB-14] - Update WebBeans Lifecycle for Servlet Beans
    * [OWB-46] - Injection into non-contextual objects
    * [OWB-204] - Update Samples for JSF2 Usage
    * [OWB-220] - Update site.xml links and bread crumbs to point to non-incubator.
    * [OWB-310] - Drop dom4j and use jre builtin xml parsers for processing beans.xml
    * [OWB-391] - create a owb-build-tools project to maintain project specific checkstyle rules, etc.

Test

    * [OWB-56] - Integrate the official JSR-299 TCK test suite
    * [OWB-222] - Update website download link, and fix relative URL translation
    * [OWB-367] - Add a unit test for IF_EXISTS


----------------------------------------------
Required Platform
----------------------------------------------
Java Version : Java SE >= 5.0
Java EE Must : Java EE >= 5.0

---------------------------------------------
How to Configure OpenWebBeans
---------------------------------------------

This section explains a content of the distribution bundle, OWB plugins and its
dependent libraries. 

---------------------------------------------
1.1.6 Distribution Content
---------------------------------------------
There are several jars in the OpenWebBeans 1.0.0 distribution;

 - openwebbeans-impl-1.1.6.jar     --> Includes Core Dependency Injection Service.
 - openwebbeans-ejb-1.1.6.jar      --> EJB Plugin(Supports EJBs in OpenEJB embedded in Tomcat).
 - openwebbeans-jms-1.1.6.jar      --> JMS Plugin(Supports injection of JMS related artifacts,i.e, ConnectionFactory, Session, Connection etc.)
 - openwebbeans-jsf-1.1.6.jar      --> JSF-2.0 Plugin(JSF Conversation Scoped Support).
 - openwebbeans-jsf12-1.1.6.jar    --> JSF-1.2 Plugin(JSF Conversation Scoped Support).
 - openwebbeans-resource-1.1.6.jar --> Java EE Resource Injection for Web Projects (Includes @PersistenceContext,@PersistenceUnit
                                          and @Resource injection into the Managed Beans. @Resource injections use java:/comp/env of the
                                          Web application component. @PersistenceContext is based on extended EntityManager.
 - openwebbeans-spi-1.1.6.jar      --> OpenWebBeans Server Provider Interfaces. They are implemented by runtime environments that would
                                          like to use OpenWebBeans as a JSR-299 implementation.
 - samples                            --> Includes source code of the samples. Samples are mavenized project  therefore you can easily build and run
                                          them from your environment that has maven runtime.
 - openwebbeans-osgi-1.1.6.jar     --> ClassPath ScannerService SPI implementation for OSGI environments like Apache Geronimo-3
 - openwebbeans-web-1.1.6.jar      --> Basic Servlet integration
 - openwebbeans-tomcat6-1.1.6.jar  --> Support for deeper integration into Apache Tomcat-6
 - openwebbeans-tomcat7-1.1.6.jar  --> Support for deeper integration into Apache Tomcat-7




------------------------------------------
How OWB Plugins Work
------------------------------------------

OpenWebBeans has been developed with a plugin architecture. The Core dependency injection service
is provided with openwebbeans-impl. If you need further service functionality, 
you have to add respective plugin jars into the application classpath. OpenWebBeans 
uses the Java SE 6.0 java.util.ServiceLoader mechanism to pickup plugins at runtime.
If you run under Java SE 5.0, an similar hand written implementation will be used.
Please do not confuse OWB plugins with portable Extensions! OWB plugins are for
internal use only whereas portable CDI Extensions will run on any JSR-299 container.

Current Plugins:
---------------------
Look at "1.1.6 Distribution Content" above.

------------------------------------------
Dependent Libraries
------------------------------------------

Third Party jars:
-----------------
They are necessary at runtime in the Core Implementation.

javassist : Version 3.12.0.GA
scannotation : Version 1.0.2 (if not running in an OSGi environment like Apache Geronimo-3)

Java EE APIs jars(Container Provider Libraries) :
-------------------------------------------------
Generally full Java EE servers provides these jars. But web containers like Tomcat or Jetty
do not contain some of them, such as JPA, JSF, Validation API etc. So, if you do not want to bundle
these libraries within your application classpath, you have to include these libraries in your
server common classpath.

jcdi-api (JSR-299 Specification API)
atinject-api (JSR-330 Specification API)
servlet-2.5 or servlet 3.0 (Servlet Specification API)
ejb-3.1 (EJB Specification API)
el-2.2 (Expression Langauge Specification API)
jsf-2.0 (Java Server Faces API)
jsr-250 (Annotation API)
interceptor-1.1 (Interceptor API)
jta-1.1 (Java Transaction API)
jsp.2.1 or jsp-2.2 (Java Server Pages API)
jpa-2.0 (Java Persistence API)
jaxws-2.1 or jaxws-2.2 (Java Web Service API)
jms-1.1 or jms-1.2 (Java Messaging Service API)
validation (Validation Specification)

Dependencies of OpenWebBeans Maven Modules&Plugins
--------------------------------------------------

openwebbeans-impl : 
------------------
Third party        : javassist, scannotation, openwebbeans-spi
Container Provided : jcdi-api, at-inject, servlet, el, jsr-250, interceptor, jta, jsp, validation

openwebbeans-ejb:
-----------------
Third party        : openwebbeans-impl and its dependencies
Container Provided : OpenWebBeans EJB plugin is based on OpenEJB in Tomcat. Therefore, if you install OpenEJB
                     within Tomcat correctly, there is no need to add any additional libraries. Look at the
                     OpenEJB in Tomcat configuration section.

openwebbeans-jms:
-----------------
Third party        : openwebbeans-impl and its dependencies
Container Provided : jms

openwebbeans-jsf:
-----------------
Third party        : openwebbeans-impl and its dependencies
Container Provided : jsf

NOTE : We are trying to decrease dependent libraries of the our core, i.e, openwebbeans-impl. 
At 1.1.6, dependent third party libraries will be decreased. We have a plan to create profile
plugins, therefore each profile plugin provides its own dependent libraries. For example, in 
fully Java EE Profile Plugin, Transaction API is supported but this will not be the case
for Java Web Profile Plugin or Java SE Profile Plugin. Stay Tuned!

Currently, as you have seen above, openwebbeans-impl depends on some Java EE/Runtime
provided libraries (servlet, jsp, el etc). In the future, with OpenWebBeans profiling support,
openwebbeans-impl will not depend on any Java EE APIs. Those APIs will be provided
by OpenWebBeans profiles/plugins that openwebbeans-impl will be used. Therefore,
you will able to use OpenWebBeans in your own runtime environment easily by writing
your own plugins and contributing it to OpenWebBeans :)
        
------------------------------------------
Library Configuration
------------------------------------------
To run openwebbeans applications in the Java EE based application server, 
you could add the JSR-299 API and JSR-330 API into the server common classpath, and
implementation, plugins and dependent jars into your "WEB-INF/lib" directory 
of the Java EE Web Application.

In this release, we can not support the OpenWebBeans as an integrated
functionality of the Java EE Application Servers. So, you have to manage the
configuration of the OpenWebBeans within your application's "web.xml" file. A sample "web.xml"
file can be found in the "config" directory. To use EJB functionality, you also have to
add OWB specific interceptor into your EJB beans. Look at the EJB section of this readme 
for further details.

---------------------------------------------
OpenWebBeans Properties File
---------------------------------------------
OpenWebBeans uses a default configuration file to configure some of its
properties. Default configuration files are embedded into OWB implementation
jar files. Instead of opening the jars file and changing configuration properties, simply add
an "openwebbeans.properties" file into a "META-INF/openwebbeans" folder of your application
classpath. This will override the values from the default configuration.
You can specify a property 'configuraion.ordinal' in this file to define the overlay order.
A properties file with higher 'configuration.ordinal' value will applied later and thus
have a higher precedence. If you don't specify a 'configuration.ordinal' a value of 100 is assumed;
This allows to have multiple openwebbeans.properties files e.g. a common one in an EAR lib
(with configuration.ordinal=100) and more specific ones for each WebApp in your EAR (with a
configuration.ordinal of e.g. 101).

Each plugin developer can provide their own SPI implementation class and own configuration values. If you would like
to use those implementation classes or configuration values, you have to override the default configuration file as explained
in the above paragraph, i.e, putting "openwebbeans.properties" file into "META-INF/openwebbeans" folder of your application.
It is recommended to use a 'configuration.ordinal' between 50 and 99 for custom SPI implementations.

Below are OpenWebBeans' default configuration properties from our openwebbeans-impl.jar file and our plugins such as
our OpenEJB plugin.

Override default value of ResourceInjectionService
-------------------------------------------------
org.apache.webbeans.spi.ResourceInjectionService=org.apache.webbeans.ejb.resource.OpenEjbResourceInjectionService

OpenWebBeans uses the "OpenEjbResourceInjectionService" class to inject resources into the managed bean instances. 

Configuration Names and Their Default Values :

- "org.apache.webbeans.spi.ContainerLifecycle"
   Description : Implementation of org.apache.webbeans.spi.ContainerLifecycle. All magic starts from here.
   Values      : org.apache.webbeans.lifecycle.DefaultLifecycle, OR CUSTOM
   Default     : org.apache.webbeans.lifecycle.DefaultLifecycle

- "org.apache.webbeans.spi.JNDIService"
   Description  : Configures JNDI provider implementation.
   Values       : org.apache.webbeans.spi.se.DefaultJndiService OR CUSTOM
   Default      : org.apache.webbeans.spi.se.DefaultJndiService

- "org.apache.webbeans.spi.conversation.ConversationService"
   Description  : Implementation of conversation.
   Values       : org.apache.webbeans.spi.conversation.jsf.DefaultConversationService OR CUSTOM
   Default      : org.apache.webbeans.spi.conversation.jsf.DefaultConversationService

- "org.apache.webbeans.spi.ScannerService"
   Description  : Default implementation of org.apache.webbeans.spi.ScannerService. It is used for scanning application deployment
                  for finding bean classes and configuration files.
   Values       : org.apache.webbeans.spi.ee.deployer.DefaultScannerService OR CUSTOM
   Default      : org.apache.webbeans.spi.ee.deployer.DefaultScannerService

- "org.apache.webbeans.spi.SecurityService"
   Description   : Implementation of org.apache.webbeans.spi.SecurityService. It is used for getting current "Principal".
   Values        : org.apache.webbeans.spi.se.DefaultSecurityService or CUSTOM
   Default       : org.apache.webbeans.spi.se.DefaultSecurityService

- "org.apache.webbeans.spi.ValidatorService"
   Description   : Implementation of org.apache.webbeans.spi.ValidatorService. It is used for getting "ValidatorFactory" and "Validator".
   Values        : org.apache.webbeans.spi.se.DefaultValidatorService or CUSTOM
   Default       : org.apache.webbeans.spi.se.DefaultValidatorService

- "org.apache.webbeans.spi.TransactionService"
   Description   : Implementation of org.apache.webbeans.spi.TransactionService. It is used for getting "TransactionManager" and "Transaction".
   Values        : org.apache.webbeans.spi.se.DefaultTransactionService or CUSTOM
   Default       : org.apache.webbeans.spi.se.DefaultTransactionService

- "org.apache.webbeans.spi.ResourceInjectionService" 
   Description   : Implementation of org.apache.webbeans.spi.ResourceInjectionService. It is used for injection Java EE enviroment resource into the
                   Managed Bean instances.
   Values        : org.apache.webbeans.se.DefaultResourceInjectionService or CUSTOM
   Default       : org.apache.webbeans.se.DefaultResourceInjectionService

- "org.apache.webbeans.spi.JNDIService.jmsConnectionFactoryJndi"
   Description   : Configures JMS ConnectionFactory object jndi name
   Values        : Server specific JNDI name
   Default       : ConnectionFactory

- "org.apache.webbeans.conversation.Conversation.periodicDelay"
   Description   : Conversation removing thread periodic delay
   Values        : Configured in millisecond
   Default       : 150000 ms

- "org.apache.webbeans.spi.deployer.useEjbMetaDataDiscoveryService"
   Description   : Use EJB functionality or not. If use OpenEJB configures to true
   Values        : false, true
   Default       : false

- "org.apache.webbeans.spi.FailOverService"
   Description   : Implementation of the org.apache.webbeans.spi.FailOverService. It is used for enabling passivation/failover beans.
   Values        : org.apache.webbeans.web.failover.DefaultOwbFailOverService or CUSTOM
   Default       : org.apache.webbeans.web.failover.DefaultOwbFailOverService

- "org.apache.webbeans.web.failover.issupportfailover"
   Description   : Support failover of beans or not
   Values        : false, true
   Default       : false

- "org.apache.webbeans.web.failover.issupportpassivation"
   Description   : Support passivation of beans or not
   Values        : false, true
   Default       : false

- "org.apache.webbeans.forceNoCheckedExceptions"
   Description   : The interceptors spec defines that @PostConstruct & Co must not throw checked Exceptions. Setting this configuration to 'false' disables this check.
   Values        : false, true
   Default       : true

- "org.apache.webbeans.spi.SecurityService"
   Description   : Service to provide methods which must be guarded via doPrivileged blocks.
   Values        : org.apache.webbeans.corespi.security.SimpleSercurityService or org.apache.webbeans.corespi.security.ManagedSecurityService
   Default       : org.apache.webbeans.corespi.security.SimpleSercurityService


---------------------------------------------
EJB Support via Embeddable OpenEJB Container in Tomcat 6.X
---------------------------------------------

Configuration Steps:
--------------------------------------------
1* Download Tomcat 6.X version
2* Configure OpenEJB. Look at URL http://openejb.apache.org/tomcat.html for installation.
3* Copy JSR-330 API to Tomcat /lib folder.
4* Copy JSR-299 API to Tomcat /lib folder
5* Put all dependent libraries of the OpenWebBeans OpenEJB Plugin
   - openwebbeans-ejb
   - openwebbeans-impl and its dependencies

You could look at ejb-sample.war for "WEB-INF/lib" libraries as an example to develop custom applications.
The source of this project is also available.

To use EJB functionality, you will use OpenEJB collapse-ear support. In this configuration,
your EJB beans live within your "war" bundle.

How to Develop EJB Applications
---------------------------------------------
1* Add "META-INF/openwebbeans.properties" into your application classpath.
2* Add "org.apache.webbeans.spi.deployer.useEjbMetaDataDiscoveryService=true" to use EJB functionality.
   So OWB container looks for EJBs.
3* Add "org.apache.webbeans.resource.spi.ResourceService=org.apache.webbeans.ejb.resource.OpenEjbResourceInjectionService to
use OpenEJB Resource injections.
4* Add "openwebbeans-ejb", plugin into your web application classpath. 
5* If you want to use other plugins, add respective plugins into your application classpath. For example, if you wish to use
JSF framework, you add "openwebbeans-jsf" plugin.
6* Add OWB related interceptor into your EJB Beans. This is called "org.apache.webbeans.ejb.interceptor.OpenWebBeansEjbInterceptor"
This is needed for OWB injections.
7* Update your application's "web.xml" to add OWB specific configuration.

---------------------------------------------
How to Run Samples
---------------------------------------------

In this release, there are several sample applications located in the "/samples" directory 
of the distribution. You can run those samples via simple maven command.

1) "Guess Application" : Simple usage of the OWB + JSF. 
It can be run in the jetty web container via maven jetty plugin from source. 
Look at "Compile and Run Samples via Jetty&Tomcat Plugin" section.

2) "Hotel Reservation Application" : Show usage of JSF + JPA + OWB  
It can be run in the jetty web container via maven jetty plugin from source. 
Look at "Compile and Run Samples via Jetty&Tomcat Plugin" section.

3) "EJB Sample Application" : Shows the usage of EJBs with embeddable OpenEJB in Tomcat. Firstly
configure OpenEJB with Tomcat as explained above.
Look at "Compile and Run Samples via Jetty&Tomcat Plugin" section.

4) "EJB Telephone Application" : Shows the usage of OpenEJB resource injection service.
Look at "Compile and Run Samples via Jetty&Tomcat Plugin" section.

5) "JMS Injection Sample" : Show JMS injections. JMS injection currently uses
   ConnectionFactory as JMS connection factory jndi name. You can change this
   via configuration file. Look above explanation for how to configure JMS jndi. Also,
   JMS injection requires to use of a JMS provider. Generally Java EE servers contains
   default JMS provider. It can be run on JBoss and Geronimo. It uses Queue with jndi_name = "queue/A". 
   So you have to create a queue destination in your JMS provider with name "queue/A" to run example. 
   If you want to change queue jndi name, then look at source and change it from "WEB-INF/beans.xml" file.

6) "Conversation Sample" : Shows usage of JSF conversations.
It can be run in the jetty web container via maven jetty plugin from source.
Look at "Compile and Run Samples via Jetty&Tomcat Plugin" section.

7) "JSF2 Sample" : Shows usage of JSF2 Ajax.
It can be run in the jetty web container via maven jetty plugin from source.
Look at "Compile and Run Samples via Jetty&Tomcat Plugin" section. It requires
to use JSF2 runtime.


8) "Standalone Sample" : Shows usage of OpenWebBeans in Standalone Swing Application.
Look at "OpenWebBeans in Java SE" section.

Configuring and Running the Applications:
--------------------------------------------
See section Compile and Run Samples via Jetty&Tomcat Plugin.

--------------------------------------------
Maven Install and Package From the Source
--------------------------------------------

Maven Version : Apache Maven 2.2.1 or later

First you have to download the "source" version of the OpenWebBeans project that
contains the all source code of the OpenWebBeans.

To install the Maven artifacts of the project from the source, Maven must be installed
in your runtime. After Maven installation, just run the following command in the top level
directory that contains the main "pom.xml" : 

> mvn clean install

This command will install all the Maven artifacts into your local Maven repository.

If you wish to package all artifacts of the project, just run the following command
in in the top level directory that contains the main "pom.xml" : 

> mvn clean package

This command will package the project artifacts from the source and put these artifacts into the each modules
respective "target" directory.

-------------------------------------------
Compile and Run Samples via Tomcat&Jetty Plugin
-------------------------------------------
This section shows how to run samples in Jetty or OpenEJB Embedded Tomcat.

------------------------------------------
Samples Run within Jetty Plugin
------------------------------------------
You can compile and run "guess","jsf2","conversation-sample" and "reservation "samples via maven Jetty plugin.
Go to the source bundle "samples/" directory. In the "guess/" or "reservation/" directory, run
the following maven commands. It will start up maven Jetty container. It bundles all of the
required jars into the WEB-INF/lib folder. You are not required to add any jar to the classpath.

Samples : Guess and Reservation
------------------------------
Go to the source folder of projects and run

> mvn clean install -Pjetty
> mvn jetty:run -Pjetty

Guess URL               : http://localhost:8080/guess
Reservation URL         : http://localhost:8080/reservation

Samples : Conversation Sample and JSF2
-------------------------------------
Go to the source folder of projects and run

>mvn clean install
>mvn jetty:run

Conversation Sample URL : http://localhost:8080/conversation-sample
JSF2 Sample URL         : http://localhost:8080/jsf2sample

------------------------------------------
Samples Run within Tomcat Plugin
------------------------------------------
OpenEJB samples are run with Maven Tomcat Plugin.

Tomcat Plugin uses http://localhost:8080/manager application to deploy war file
into your embeddable EJB Tomcat container. There must be an tomcat-users.xml
file in the "conf" directory of the server that contains manager role and username.

>Start Tomcat server if not started
>mvn tomcat:deploy

Ejb Sample URL    : http://localhost:8080/ejb-sample
Ejb Telephone URL : http://localhost:8080/ejb-telephone

Example tomcat-users.xml file
------------------------------------------
<tomcat-users>
<role rolename="manager"/>
<user username="admin" password="" roles="manager"/>
</tomcat-users>

-----------------------------------------
Deploy JMS Sample
-----------------------------------------
Simple drops jms-sample.war file into your application deploy location.

JMS Sample Example URL        : Hit the url http://localhost:8080/jms-sample/sender.jsf for sending JMS messages
                                Hit the url http://localhost:8080/jms-sample/receiver.jsf for receiving JMS messages

-----------------------------------------
OpenWebBeans in Java SE
----------------------------------------
OpenWebBeans can be used in Java SE environments such as Java Swing
applications. A Standalone Sample is provided to show how to use OpenWebBeans
in Java SE.

Go to the source directory of the standalone sample:
>mvn clean package;
>cd target;
>jar -xvf standalone-sample.jar
>java -jar standalone-sample-1.1.6-SNAPSHOT.jar
>Enjoy :)

-----------------------------------------------
OpenWebBeans User and Development Mailing Lists
-----------------------------------------------
Please mail to the user mailing list with any questions or advice
about the OpenWebBeans.

User Mailing List : [users@openwebbeans.apache.org]

You can also join the discussions happening in the dev list

Dev Mailing List  : [dev@openwebbeans.apache.org]

-------------------------------------------
OpenWebBeans JIRA Page
-------------------------------------------
Please logs bugs into the "https://issues.apache.org/jira/browse/OWB".

------------------------------------------
OpenWebBeans Wiki and Blog Page
-----------------------------------------
Wiki: http://cwiki.apache.org/OWB/
Introduction to OpenWebBeans : http://cwiki.apache.org/OWB/introduction-to-openwebbeans.html
Blog : http://blogs.apache.org/owb

-----------------------------------------
OpenWebBeans Web Page
----------------------------------------
You can reach the OpenWebBeans web page at
http://openwebbeans.apache.org
---------------------------------------

Your Apache OpenWebBeans Team

Enjoy!
