5 Replies Latest reply: Mar 3, 2009 3:59 PM by David Allen RSS

JBossTransactionServices and WebBeans

Ales Justin Master

Moving this to forum.

"david.allen" wrote:

how to best inject the RealTransactionManager bean into one of our
beans.

I modified webbeans-ejb-jboss-beans.xml to also have the following bean
declaration:
 <beanfactory name="JBossTransactionServices"
class="org.jboss.webbeans.integration.ejb.JBossTransactionServices">
 <property name="controller"><inject
bean="jboss.kernel:service=KernelController" /></property>
 <property name="transactionManager"><inject
bean="RealTransactionManager" /></property>
 </beanfactory>


That class/bean just needs the javax.transaction.TransactionManager that
the AS is using.

However, since this is a deployer perhaps, the TM is not ready or
loaded? I get the following error:

DEPLOYMENTS MISSING DEPENDENCIES:
Deployment "JBossTransactionServices" is missing the following
dependencies:
Dependency "RealTransactionManager" (should be in state
"Configured", but is actually in state "** NOT FOUND Depends on
'RealTransactionManager' **")


I also tried adding a jboss-dependency.xml, but I really do not know
what name to use for the <item> element, or for that matter any of the
attributes. Is this the correct approach? Do you know the exact values
to put into jboss-dependency.xml elements for this case?


  • 1. Re: JBossTransactionServices and WebBeans
    Ales Justin Master

     

    "david.allen" wrote:

    how to best inject the RealTransactionManager bean into one of our
    beans.

    I modified webbeans-ejb-jboss-beans.xml to also have the following bean
    declaration:
     <beanfactory name="JBossTransactionServices"
    class="org.jboss.webbeans.integration.ejb.JBossTransactionServices">
     <property name="controller"><inject
    bean="jboss.kernel:service=KernelController" /></property>
     <property name="transactionManager"><inject
    bean="RealTransactionManager" /></property>
     </beanfactory>
    


    That class/bean just needs the javax.transaction.TransactionManager that
    the AS is using.

    Add option="callback" attribute to TM's inject.
    This will inject your TM once it's available.

    "david.allen" wrote:

    However, since this is a deployer perhaps, the TM is not ready or
    loaded? I get the following error:

    DEPLOYMENTS MISSING DEPENDENCIES:
    Deployment "JBossTransactionServices" is missing the following
    dependencies:
    Dependency "RealTransactionManager" (should be in state
    "Configured", but is actually in state "** NOT FOUND Depends on
    'RealTransactionManager' **")

    Yes, the TM is not there yet.
    But we do call the checkComplete, which causes this error msg.

    We do boot, deployers and deploy in separate steps,
    invoking MainDeployer::checkComplete after each of them.
    Hence the deployers don't yet see the deploy, which is where the TM is deployed.

    "david.allen" wrote:

    I also tried adding a jboss-dependency.xml, but I really do not know
    what name to use for the <item> element, or for that matter any of the
    attributes. Is this the correct approach?

    This wouldn't help either, as what you would actually do is
    create a dependency for a whole deployment on a particular bean,
    where previously you had a single bean depending on that bean.
    The error would be almost the same.

    "david.allen" wrote:

    Do you know the exact values
    to put into jboss-dependency.xml elements for this case?

    Sure, I wrote the jboss-dependency.xml mechanism. :-)

    Check its test cases or read more about it here:
    - http://www.jboss.org/community/docs/DOC-13178

  • 2. Re: JBossTransactionServices and WebBeans
    Ales Justin Master

     

    "alesj" wrote:
    "david.allen" wrote:

    how to best inject the RealTransactionManager bean into one of our
    beans.

    I modified webbeans-ejb-jboss-beans.xml to also have the following bean
    declaration:
     <beanfactory name="JBossTransactionServices"
    class="org.jboss.webbeans.integration.ejb.JBossTransactionServices">
     <property name="controller"><inject
    bean="jboss.kernel:service=KernelController" /></property>
     <property name="transactionManager"><inject
    bean="RealTransactionManager" /></property>
     </beanfactory>
    


    That class/bean just needs the javax.transaction.TransactionManager that
    the AS is using.

    Add option="callback" attribute to TM's inject.
    This will inject your TM once it's available.

    Unfortunately this won't work with bean factory.
    But do you really need bean factory, or is plain bean enough?


  • 3. Re: JBossTransactionServices and WebBeans
    David Allen Newbie

    I doubt that beanFactory is really needed in this case, but I was following the same pattern as all the other bean factories in that deployer. Ideally, there should just be one bean. The MC integration code is using Java code instead of injection with bean files, so I really do not understand any of it well enough to deviate from the samples already there.

    In any event, the error is gone. I still need to check to see if it really injected anything.

  • 4. Re: JBossTransactionServices and WebBeans
    David Allen Newbie

    The injection does work with option="callback". Maybe it is OK in this case because it is not being used until some later deployment from deploy is actually used after the entire server is started.

  • 5. Re: JBossTransactionServices and WebBeans
    David Allen Newbie

    The bean factory was replaced with just the bean. The Java code for the deployer needed to be changed to not define a factory and factory method for this bean via the MC beans SPI.