-------------------------------
Apache OpenWebBeans 1.5.0
-------------------------------
Welcome!

Thanks for downloading and using OpenWebBeans. 
This document is a "Getting Started Guide" for OpenWebBeans.

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

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

CDI-1.2 is a maintenance release of CDI-1.1 and backward compatible to
JSR-299 CDI-1.0.

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


--------------------------------
OpenWebBeans 1.5.0 Release Features
--------------------------------

- The 1.5.0 release supports the following features
-----------------------------------
* Managed Beans Support
* Producer Method Support
* Producer Field Support
* Java EE Resource Injection Support
* 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
* plugable SecurityManager integration doubles speed if no SecurityManager is being used
* support for direct CDI usage in tomcat-6 and tomcat-7 environments



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 5 and 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.



-------------------------------------------
Release Notes - OpenWebBeans - Version 1.5.0
-------------------------------------------


Bug

    [OWB-642] - Method WebBeansUtil.configureProducerMethodSpecializations is unreliable
    [OWB-679] - StereoTypeManager is completely unused -> remove or fix.
    [OWB-737] - @specializes @alternative child class disables super class even when not enabled when using stereotypes
    [OWB-745] - Fixes usage of java.lang.Class and java.lang.reflect.Method
    [OWB-746] - Having a Decorator with a constructor- or method-injection-point for the delegate leads to an exception if no corresponding field is available
    [OWB-747] - Cleanup OwbBean interface
    [OWB-799] - arquillian adapter uses archive:// url which can be slow because of host resolution
    [OWB-809] - addBeans does not invalidate resolvedComponents cache in InjectionResolver
    [OWB-810] - (public or protected) Observer methods don't get intercepted in the first firing of the event
    [OWB-811] - (public or protected) Observer methods don't get intercepted in the first firing of the event
    [OWB-816] - OWB does not correctly serialize/deserialize InstanceImpl
    [OWB-853] - CLONE - "Could NOT lazily initialize session context because of null RequestContext" always occur on session expire
    [OWB-860] - Type variable not bound in generic bean type
    [OWB-873] - NoSuchMethodException if no constructor with an empty parameter list is present AND the bean has @Decorator beans
    [OWB-910] - @PreDestroy causes ContextNotActiveException
    [OWB-912] - Weird Behavior with @Specializes and @Inject @Any
    [OWB-913] - o.a.webbeans.web.tomcat.TomcatInstanceManager should implement the new method in o.a.tomcat.InstanceManager introduced with Tomcat 7.0.47
    [OWB-922] - Instance#select() rules are wrong
    [OWB-929] - implicit filter in InstanceImpl#iterator
    [OWB-930] - NotificationManager#disableOverriddenObservers removes wrong observers
    [OWB-934] - Contextual#destroy not invoked for custom implementations
    [OWB-938] - NoClassDefFoundError not caught when checking if a bean is a managed one or not in WebBeanUtils (isValidManagedBean)
    [OWB-943] - pick up @NormalScope scopes, interceptors and decorators in implicit bean archives
    [OWB-945] - Decorators are not applied on methods which use parameterized type from super interface
    [OWB-950] - rework ConcurrentHashMap usages to avoid java 8 issues
    [OWB-954] - implement AfterTypeDiscovery
    [OWB-955] - rework AlternativesManager to fit CDI 1.1 needs.
    [OWB-957] - interceptor proxies blow up if you have more than 127 methods in a class
    [OWB-958] - our @Specializes code is based on classes and not on AnnotatedTypes
    [OWB-960] - Proxying varargs methods not working
    [OWB-965] - Create index to tomcat-sample
    [OWB-966] - upgrade Arquillian to 1.1.2.Final
    [OWB-967] - implement ProcessSyntheticAnnotatedType
    [OWB-968] - GenericUtils create infinite loop when parsing Enums
    [OWB-969] - BeanManager#createAnnotatedType should not reflect changes done by Extensions
    [OWB-970] - AbstractDecoratorInjectionTarget doesn't use right classloader to proxy classes (uses container classloader)
    [OWB-971] - Interceptors and Decorators must not define producer nor disposal methods
    [OWB-973] - Download page hash and sig links don't work
    [OWB-974] - All beans handed over to passivating contexts need to be serializable
    [OWB-975] - our Arquillian connector starts the ApplicationContext twice
    [OWB-976] - move cdi-1.1 BeanManager featurs from AbstractBeanManager to BeanManagerImpl
    [OWB-979] - method are considered overriden if java rules are respected but annotations are the same too
    [OWB-983] - sample/tomcat7-sample doesn't run with 'mvn tomcat7:run'
    [OWB-985] - support tomcat 7.0.54
    [OWB-988] - Move PrincipalBean from owb-ee-common to owb-impl
    [OWB-992] - Decorator generic delegate attribute must be same with decorated type
    [OWB-993] - OwbTypeVariableImpl needs to implements new methods of JDK-1.8 TypeVariable
    [OWB-994] - Container must throw DefinitionException on Bean definition errors
    [OWB-995] - BeanManager must throw Exception if some methods are called before LifecycleEvents
    [OWB-996] - implement @WithAnnotations
    [OWB-997] - implement @WithAnnotations
    [OWB-1001] - Container must fire ProcessInjectionPoint
    [OWB-1002] - Container must detected definition errors for Decorators
    [OWB-1003] - Decorators and Interceptors can not be applied to BeanManager
    [OWB-1005] - Container must throw DefinitionException if a Decorator or Interceptor has Producer or Observer methods
    [OWB-1006] - A Decorator must implement at least one interface
    [OWB-1007] - DefinitionError must be detected if @Decorated is injected into a bean instance other than a decorator
    [OWB-1008] - Decorators must not declare abstract methods which are not declared in implemented interfaces
    [OWB-1009] - adapt validation of interceptors to specification 1.2
    [OWB-1010] - Interceptor bindings of bean class replaces Interceptor bindings in stereotypes
    [OWB-1011] - Intercepted Beans must be proxyable
    [OWB-1012] - adapt validation of producers as specified in spec 1.2
    [OWB-1013] - Race condition in Instance injection
    [OWB-1014] - Validate injection of bean metadata in Producers
    [OWB-1015] - Container must detect DeplyomentError for Unproxyable bean types
    [OWB-1016] - java.net.MalformedURLException: WEB-INF/beans.xml
    [OWB-1019] - implement passivation check rules as defined in CDI-140 and CDI-153
    [OWB-1022] - InjectionPoint validated to early?
    [OWB-1023] - We should throw an IllegalArgumentException if BeanManager#validate parameter is null
    [OWB-1024] - DecoratorBeanBuilder : Number of TypeArguments must match - Decorated Type: 2 Delegate Type: 1
    [OWB-1030] - Lookup of InjectionPoint does not work
    [OWB-1037] - CLONE - NormalScoped ASM proxies broken in some cases for partial beans
    [OWB-1039] - improve exception handling during deployment
    [OWB-1041] - Session id changes in tomcat integration are not propagated to session context manager
    [OWB-1042] - dependent producer resolution needs to consider raw types
    [OWB-1045] - WebContextsService#destroySession

Improvement

    [OWB-652] - Introduce HierarchicBeanManager
    [OWB-755] - Move the instance creation into Producer.produce
    [OWB-763] - move our remaining tests from TestContext to AbstractUnitTest
    [OWB-798] - expensive check in EventUtil#checkEventBindings
    [OWB-820] - cleanup of el resolvers
    [OWB-932] - skip validation of the cdi-api
    [OWB-937] - unify startup detection
    [OWB-972] - Define an Application Boundary SPI
    [OWB-987] - improve getReference type handling
    [OWB-1004] - Enable repeating qualifiers with binding attributes
    [OWB-1020] - evaluate class interceptors and use them if there is no special method interceptor
    [OWB-1031] - improve error message if injection point validation fails

New Feature

    [OWB-752] - upgrade jcdi to CDI-1.1
    [OWB-814] - Implement CDI-268
    [OWB-815] - Implement EventMetadata
    [OWB-928] - implement CDI-1.1 beans.xml scanning
    [OWB-931] - NormalScopeProxyFactory classloader usage
    [OWB-942] - CLONE owb-1.2- Signal or handle differently final methods
    [OWB-977] - ProcessBeanAttributes
    [OWB-978] - @Vetoed
    [OWB-980] - Support @WithAnnotations in ProcessAnnotatedType event
    [OWB-1021] - simple stackoverflow protection for TypeVariable
    [OWB-1029] - Use OWB on GoogleAppEngine

Task

    [OWB-770] - Implement new Lifecycle events
    [OWB-782] - Create AnnotatedTypeService SPI interface
    [OWB-826] - Implement CDI-58
    [OWB-843] - Implement utility-methods in BeanManager
    [OWB-847] - cleanup of SubclassProxyFactory
    [OWB-925] - move OWB trunk to CDI-1.1
    [OWB-926] - retire the OWB-CdiTest project
    [OWB-927] - retire the OWB-CdiTest project
    [OWB-936] - Check proxy generation works well with java 7
    [OWB-944] - upgrade to asm5
    [OWB-951] - Implement AlterableContext
    [OWB-1025] - add handling for @Initialized and @Destroyed




Older Releases:

-------------------------------------------
Release Notes - OpenWebBeans - Version 1.2.1
-------------------------------------------

Bug

    [OWB-626] - Conversation Scope isn't accessible after RENDER_RESPONSE phase
    [OWB-642] - Method WebBeansUtil.configureProducerMethodSpecializations is unreliable
    [OWB-675] - Alternative resolving does not take Qualifiers into consideration
    [OWB-654] - manual lookups of beans with generics fail
    [OWB-679] - StereoTypeManager is completely unused -> remove or fix.
    [OWB-745] - Fixes usage of java.lang.Class and java.lang.reflect.Method
    [OWB-774] - missing deployment hints
    [OWB-812] - study how to resolve the classloader to create a proxy
    [OWB-870] - @Observer event is being received twice
    [OWB-872] - Listening to AfterBeanDiscovery suppresses @Decorator registration as a side effect
    [OWB-874] - AfterBeanDiscovery event should not be fired if there is no extension module registered
    [OWB-876] - basic handling of virtual resources in arquillian adapter
    [OWB-877] - no need to cast parent type in AnnotatedTypeImpl
    [OWB-878] - OpenWebBeans does not correctly handle generics
    [OWB-881] - interception of bean using constructor injection is not supported
    [OWB-885] - ProducerMethodBeansBuilder ejb handling is too linked to openejb
    [OWB-886] - @Specializes appears to be broken
    [OWB-887] - Ambigious resolution with this two producers: Map<X,Y> and Map<X,Z>
    [OWB-888] - Provider to an EJB does not work
    [OWB-889] - intercepted/decorated beans are not serializable even if the whole stack is
    [OWB-890] - InjectionResolver#checkInjectionPoints throw NPE for some 3rd party beans
    [OWB-891] - dynamically removing @Alternative does not work
    [OWB-893] - OpenWebBeans 1.2.1 fails when injecting generic value holder
    [OWB-895] - BeforeBeanDiscovery.addAnnotatedType() calls does not work as expected when owb jars are deployed outside WEB-INF/lib folder
    [OWB-896] - Delegate InjectionPoints need different bean resolving rules
    [OWB-897] - Interceptors do not work on processed injection targets
    [OWB-898] - ClassFormatError in ASM engine
    [OWB-901] - missing type erasure handling for ParameterizedType
    [OWB-902] - NPE when Bean#getBeanClass is null
    [OWB-904] - VerifyError on Interceptor usage
    [OWB-905] - Remove @Ingored from DefaultOwbFailOverTest#restoreConversationContexts
    [OWB-908] - Proxy creation fails if a method throws an Exception which is an inner class
    [OWB-909] - ConversationBean needs to implement PassivationCapable
    [OWB-911] - SelfInterceptorBean not serialized correctly in DefaultInterceptorHandler

Documentation
    
	[OWB-783] - No documentation available in the project webpage
	
Improvement

    [OWB-652] - Introduce HierarchicBeanManager
    [OWB-762] - improve error message for "duplicated" configs
    [OWB-763] - move our remaining tests from TestContext to AbstractUnitTest
    [OWB-786] - available implementations of SecurityService need an improved error-handling
    [OWB-820] - cleanup of el resolvers
    [OWB-821] - reduce the number of string creations
    [OWB-880] - OpenWebBeans Arquillian Container rely on bad Archive instance assumptions

New Feature

    [OWB-814] - Implement CDI-268
    [OWB-879] - allow to configure owb properties in owb arquillian adapter
    [OWB-882] - AbstractUnitTest should support to inject bean instances in test class
    [OWB-883] - basic @AroundConstruct implementation
    [OWB-884] - basic @Priority support

Task

    [OWB-782] - Create AnnotatedTypeService SPI interface
    [OWB-854] - cleanup of jdk 1.5 specific parts
    [OWB-866] - use xbean asm4 shade
    [OWB-867] - a class without a "CDI" constructor is not always an issue so log it with info level only when mandatory to not pollute logs

-------------------------------------------
Release Notes - OpenWebBeans - Version 1.2.0
-------------------------------------------

Bug

    [OWB-151] - @Dependent beans not interceptable
    [OWB-187] - Interceptors with lifecycle and @AroundInvoke permitted to have bindingtypes containing method-level annotations
    [OWB-306] - overrridden @AroundInvoke and lifecycle interceptors are still run
    [OWB-392] - AbstractInjectable#dependentInstanceOfProducerMethods must not be static nor public
    [OWB-423] - OpenWebBeansEjbInterceptor is LATE in establishing the request context for an EJB
    [OWB-468] - Make BeansDeployer.deployFromClassPath(ScannerService) resilient to ClassNotFoundException and NoClassDefFoundError's
    [OWB-497] - Don't break deployment if java can't read all the annotations
    [OWB-513] - proxies should be inactive after a container shutdown
    [OWB-549] - Security review needed for ClassUtil
    [OWB-556] - bean with interceptor + @PreDestroy causes a NullPointerException
    [OWB-568] - Decorater for generic Interfaces does not work
    [OWB-569] - OpenWebBeans uses the Java Reflection API to discover program element types and annotations in addition to the AnnotatedType
    [OWB-570] - Interceptors must support retry
    [OWB-572] - OwbParametrizedTypeImpl s equals method is broken
    [OWB-575] - ResourceProxyHandler.invoke should unwrap and throw the underlying cause of the InvocationTargetException
    [OWB-665] - invocation order of @PostConstruct interceptors
    [OWB-714] - EmptyStackException when accessing an instance that is created by a producer method that has an InjectionPoint as parameter.
    [OWB-722] - @Typed not respected for beans using generics
    [OWB-728] - AbstractProducer stores CreationalContext
    [OWB-729] - review CreationalContext in Interceptor and Decorator creation
    [OWB-730] - remove InjectionTargetWrapper
    [OWB-733] - CLONE - ClassLoader leak in WebBeansUtil.isScopeTypeNormalCache
    [OWB-739] - CLONE - Ambiguous producer methods and fields are not detected due to bug in AbstractProducerBean equals and hashCode
    [OWB-740] - NPE while removing dependent beans
    [OWB-748] - Implement CDI-132
    [OWB-749] - Move Interceptor stuff to InterceptorManager
    [OWB-750] - OWB annotationlitteral use instanceof to implement equals and not annotationType()
    [OWB-754] - fix PassivationCapable detection
    [OWB-759] - Decorator position not well managed if the decorator is abstract
    [OWB-764] - constructor with multiple InjectionPoints cause Exception
    [OWB-767] - DefaultBDABeansXmlScanner synchronizes without visibility guarantees
    [OWB-768] - add support for proxying protected methods in NormalScopedProxyFactory
    [OWB-769] - Serialisation support for our new InterceptorDecoratorProxies
    [OWB-775] - error on shutdown doesn't cleanup WebBeansFinder map
    [OWB-776] - private and protected producer methods do not properly de-reference the contextual instance
    [OWB-777] - InjectableMethod must unwrap normalscoping proxies
    [OWB-778] - InterceptorBean must unwrap InjectionTargetExceptions
    [OWB-784] - WebContextsService bypasses spi contract of ContextsService
    [OWB-788] - deployment error when a @Specializes bean is disabled via an Extension
    [OWB-791] - only one generic is handled for injections of ManagedBeans
    [OWB-793] - "Ambigious" typo
    [OWB-794] - AbstractOwbBean#toString doesn't reflect ParameterizedTypes
    [OWB-801] - null instance shouldn't be destroyed (copy)
    [OWB-802] - #annotationType() of javax.enterprise:cdi-api not compatible with AbstractAnnotationLiteral
    [OWB-803] - Forever loop when abstract decorator does not implement invoked method
    [OWB-805] - CLONE - @Alternative is ignored when using the Provider interface.
    [OWB-806] - CLONE - Overloaded EJB Observer methods fail to deploy
    [OWB-807] - performance issue with owb-arquillian-standalone
    [OWB-813] - CLONE - #annotationType() of javax.enterprise:cdi-api not compatible with AbstractAnnotationLiteral
    [OWB-817] - the jsf module(s) are bound to a specific el version
    [OWB-818] - StandaloneResourceInjectionService can lead to injection of 'null'
    [OWB-822] - ejb should be tested first and not after having defined a managed bean
    [OWB-823] - EJBs support ee injections
    [OWB-824] - annotated field events should get the associated annotatedfield
    [OWB-825] - don't fire the same PAT event for a bean intercepted by itself (ejb interceptor style)
    [OWB-828] - broken proxies in case of bridge methods
    [OWB-829] - generate our proxies with 2 $$
    [OWB-831] - filtering producers by annotated type is too strict (java type should be enough) since it prevents extensions to add producers
    [OWB-832] - ejb producers should use ejb view methods
    [OWB-833] - disposal injection points shouldn't be listed in getInjectionPoints() method
    [OWB-834] - self interceptors have lifecycle methods
    [OWB-835] - even resource should be serializable
    [OWB-836] - auto interception ignored when no other reason to proxy the class
    [OWB-837] - lifecycle interceptors can't catch exceptions
    [OWB-838] - putting bean dependent instances first in dependent objects
    [OWB-839] - interceptor lifecycle methods (@postConstruct,...) should be ignored for method interceptors
    [OWB-840] - don't create decorators if the asked instance if the delegate
    [OWB-842] - lazy mode for @New on ejbs
    [OWB-845] - @Disposes not validated
    [OWB-848] - deserialization of normal-scoped proxies for PassivationCapable beans fails
    [OWB-849] - org.apache.webbeans.portable.ProviderBasedProxyProducer uses the wrong classloader
    [OWB-850] - all provider based producer can't be proxied -> handling dependent scope
    [OWB-855] - NPE when no default constructor is found
    [OWB-856] - Currently in OpenWebBeans one can add exactly one AnnotatedType
    [OWB-857] - NullPointerException on passivation
    [OWB-858] - AnnotatedTypeImpl not thread safe
    [OWB-861] - Decorator building fails when decorator has inheritance
    [OWB-862] - allow independent bootstrapping

Improvement

    [OWB-479] - detect loops in producer beans vs. producer method parameters at deployment time
    [OWB-488] - move WebBeansConfigurationException messages to message bundles
    [OWB-551] - Reduce static synchronized hashmap usage even further
    [OWB-603] - Incorporate enhanced BeanArchive handling of the preliminary CDI-1.1 specification
    [OWB-632] - re-visit WebBeansUtil#isPassivationCapable
    [OWB-715] - Remove EL22 implementation from Core to Own Project
    [OWB-717] - Remove Failover implementation from Web to Own Project
    [OWB-727] - introduce a static INSTANCE for DefaultLiteral, AnyLiteral, etc
    [OWB-735] - remove CreationalContextWrapper
    [OWB-744] - change the name of all Bean<T> implementations to reflect this fact
    [OWB-753] - remove lazy Bean initialisation
    [OWB-765] - Implement BeanAttributes
    [OWB-766] - Use CreationalContextImpl to pass info about InjectionPoint, Event, etc
    [OWB-772] - typo in exception message wrt passivation capable dependencies
    [OWB-779] - ScannerService using xbean
    [OWB-797] - AnnotationManager checks the same annotations again
    [OWB-819] - check injectable reference for normal-scoped beans
    [OWB-852] - Improve getContextsService performance

New Feature

    [OWB-321] - Conversation beans could not be populated to non-faces request by a JSF redirect navigation rule
    [OWB-495] - create a jetty integration plugin
    [OWB-606] - create bundles for standard use cases like JSF-webapp, standalone, etc
    [OWB-671] - Automatically register FailOverFilter if failover is activated
    [OWB-710] - openwebbeans-arquillian container
    [OWB-756] - implement BeanAttributes and ProcessBeanAttritubes
    [OWB-830] - Implement Instance#destory

Task

    [OWB-692] - remove ContextsFactory
    [OWB-726] - upgrade trunk (OWB-1.2.x) to target java 1.6
    [OWB-781] - Remove all Javassist and Scannotation related parts from OWB
    [OWB-859] - Remove checkstyle double-checked locking rule

Wish

    [OWB-344] - implement Decorators and Interceptors as subclassing



-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.8
-------------------------------------------

Bug

    [OWB-700] - ProcessInjectionTarget.setInjectionTarget() has no effect when trying to post process beans
    [OWB-723] - Interceptors doesn't work for beans got from stereotype annotated producer methods
    [OWB-736] - NPE while removing dependent beans
    [OWB-742] - @Alternative is ignored when using the Provider interface.
    [OWB-743] - Overloaded EJB Observer methods fail to deploy
    [OWB-751] - OWB annotation litterals implementation uses only instanceof in equals implementation
    [OWB-760] - CLONE - Decorator position not well managed if the decorator is abstract
    [OWB-761] - position in DelegateHandler shouldn't be static
    [OWB-785] - WebContextsService isn't compatible with actor-frameworks
    [OWB-790] - owb-1.1.x - deployment error when a @Specializes bean is disabled via an Extension

New Feature

    [OWB-789] - owb-1.1.x - openwebbeans-arquillian container


-------------------------------------------
Release Notes - OpenWebBeans - Version 1.1.7
-------------------------------------------

Bug

    [OWB-711] - Specialization does not deactivate Observer methods in parent class
    [OWB-713] - Static observer methods of superclasses are not called when a method with the same name and parameters exists in the subclass
    [OWB-718] - Decorator can't call two methods of the delegate object in the same method
    [OWB-719] - @Named qualifier is not adhering to CDI spec default naming conventions
    [OWB-720] - injections using generic not well managed
    [OWB-722] - @Typed not respected for beans using generics
    [OWB-724] - Ambiguous producer methods and fields are not detected due to bug in AbstractProducerBean equals and hashCode
    [OWB-725] - Beans containing a producerMethod are using the wrong CreationalContext
    [OWB-732] - ClassLoader leak in WebBeansUtil.isScopeTypeNormalCache
    [OWB-734] - CLONE - AbstractProducer stores CreationalContext

Task

    [OWB-712] - Enable console output for checkstyle
    [OWB-721] - create a branch for OWB-1.1.x maintenance and switch trunk to 1.2.0-SNAPSHOT

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


---------------------------------------------
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) "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.

4) "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.

5) "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.


6) "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 Tomcat Plugin.

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

Maven Version : Apache Maven 3.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
---------------------------------------

Enjoy!

Your Apache OpenWebBeans Team

