[jboss-as7-dev] [EE7/JPA 2.1] Question about accessing the CDI BeanManager for a component on AS7 or later...
Scott Marlow
smarlow at redhat.com
Wed Aug 22 10:17:03 EDT 2012
On 08/22/2012 10:01 AM, Steve Ebersole wrote:
> Do you at least know if a BeanManager needs to be passed? If so, I do
There is a separate deployer that detects that beans.xml is present and
that a BeanManager will be available. I could make the JPA deployer
become aware of this knowledge.
> not actually use the BeanManager instance until much later (second phase
> in our new vernacular); so an option if you do actually know whether you
> need to pass the BeanManager or not would be to pass a BeanManager
> proxy that does the lookup on demand.
I don't think the proxy could expect to use a jndi lookup of
"java:comp/BeanManager", so not sure that the proxy would help.
>
> On Wed 22 Aug 2012 08:49:23 AM CDT, Scott Marlow wrote:
>> I would like to give feedback to the JPA 2.1 EG, on the entity
>> listener enhancement to support CDI. If the deployment archive that
>> contains the persistence unit, is a bean archive, the BeanManager
>> needs to be passed in as a property when creating the persistence unit
>> service. The persistence provider will use the BeanManager to create
>> instances of the entity listener classes, do injection and trigger
>> lifecycle methods.
>>
>> Currently, the only way to get the CDI BeanManager in AS7, is doing a
>> "java:comp/BeanManager" lookup (not helpful during deployment) or via
>> the BeanManagerService. I tried to have the PersistenceUnitService
>> depend on the BeanManagerService, but couldn't start the
>> PersistenceUnitService service (got a
>> "org.jboss.msc.service.CircularDependencyException: Service jboss-as
>> has a circular dependency" http://pastie.org/4565684).
>>
>> I'll also need to get access to the BeanManager earlier than the
>> install phase. I need to pass the BeanManager as a property to the
>> PersistenceProvider.createContainerEntityManagerFactory(PersistenceUnitInfo,
>>
>> Map) invocation which might occur early (if class transformers will
>> rewrite application classes before they are loaded).
>>
>> I could avoid having the PU service depend on the BeanManagerService
>> if I instead arrange for the PU service to get the BeanManager from
>> the deployment unit (if available). However, if the
>> BeanManagerService is stopped, the pu service wouldn't be stopped if
>> we have a direct reference to the BeanManager. So, this (deployment
>> unit) hack sounds less than ideal.
>>
>> Git branch
>> https://github.com/scottmarlow/jboss-as/tree/seven_jpa2_1_BeanManager
>> integrates with the latest Hibernate master branch (Hibernate needs to
>> be built locally) and has the currently broken BeanManager access code
>> (gets the CircularDependencyException during deployment).
>>
>> Scott
>
> --
> steve at hibernate.org
> http://hibernate.org
More information about the jboss-as7-dev
mailing list