1 2 3 Previous Next 37 Replies Latest reply on Jun 23, 2006 5:08 AM by adrian.brock Go to original post
      • 15. Re: EJB3 JCA/JMS Integration

         

        "bill.burke@jboss.com" wrote:
        "scott.stark@jboss.org" wrote:
        So let's ditch the ASF stuff in favor of jca inflow abstraction, including as the default MDB 2.1 container in 4.x. Is this something that should be a critical task for 4.0.4?


        ignorant question, doesn't HA-JMS depend on ASF? Or can we write a JCA adapter around ASF?


        HAJMS just relies on the automatic reconnect handled by the ExceptionListener.
        This is internal to the JMS Rar without ASF, since error handling/recovery is a domain specific problem.

        • 16. Re: EJB3 JCA/JMS Integration

           

          "bill.burke@jboss.com" wrote:

          Or can we write a JCA adapter around ASF?


          That is what the JMS inbound rar is trying to do. Except without the four levels
          of useless of indirection and an implementation that you actually change. :-)

          • 17. Re: EJB3 JCA/JMS Integration

            The other issue is adding metrics/management
            and other jca inbound QOI (quality of implementation)
            such as doing a JAAS login before invoking the mdb.

            This should be done via interceptors inside the proxy/MessageEndpoint.

            This is currently impossible with the EJB3 version since it is just an invocation handler
            behind a java.lang.reflect.Proxy.

            • 18. Re: EJB3 JCA/JMS Integration
              kabirkhan

               

              "adrian@jboss.org" wrote:

              I currently use a prototype ProxyAdvisor although Kabir is supposed to have
              done some work on (or replaced?) the AOP instance advisors recently.


              Yes, this is available in the new weaving in AOP 2.0. Once you guys have battled out which version of the aop proxy to be used, adding this to a proxy based solution should be straightforward.

              • 19. Re: EJB3 JCA/JMS Integration

                 

                "kabir.khan@jboss.com" wrote:
                "adrian@jboss.org" wrote:

                I currently use a prototype ProxyAdvisor although Kabir is supposed to have
                done some work on (or replaced?) the AOP instance advisors recently.


                Yes, this is available in the new weaving in AOP 2.0. Once you guys have battled out which version of the aop proxy to be used, adding this to a proxy based solution should be straightforward.


                Does it support handling all the internal "book-keeping" with injection of overrides
                like org.jboss.proxy or my prototype ProxyAdvisor.

                NOTE: My ProxyAdvisor prototype does not handle "MetaData"
                like the "context" in org.jboss.proxy

                 /** Create a composite proxy for the given interfaces, invoker.
                 @param id the cache id for the target object if any
                 @param targetName the name of the server side service
                 @param invoker the detached invoker stub to embed in the proxy
                 @param jndiName the JNDI name the proxy will be bound under if not null
                 @param proxyBindingName the invoker-proxy-binding name if not null
                 @param interceptorClasses the Class objects for the interceptors
                 @param loader the ClassLoader to associate the the Proxy
                 @param ifaces the Class objects for the interfaces the Proxy implements
                 @param ctx any context to add the invocation context proxy
                 */
                 public Object createProxy(Object id, ObjectName targetName,
                 Invoker invoker, String jndiName, String proxyBindingName,
                 ArrayList interceptorClasses, ClassLoader loader, Class[] ifaces, HashMap ctx)
                 {
                


                e.g. What I would really like a is
                ProxyFactory
                interface that could use either org.jboss.proxy or org.jboss.aop
                depending on the version the user is installed in.

                With the interceptor/metadata really coming more generic configuration
                like aop's domain scoped crosscutting declarations or EJB2.x's container-configurations.

                • 20. Re: EJB3 JCA/JMS Integration

                  Can we start a different thread for the Proxy impl.
                  Although I think there already is one in the AOP forum. :-)

                  • 21. Re: EJB3 JCA/JMS Integration
                    bill.burke

                     

                    "adrian@jboss.org" wrote:

                    Does it support handling all the internal "book-keeping" with injection of overrides
                    like org.jboss.proxy or my prototype ProxyAdvisor.

                    NOTE: My ProxyAdvisor prototype does not handle "MetaData"
                    like the "context" in org.jboss.proxy



                    Not sure what you mean, but the new AOP 2.0 design basically has every instance is allowed to have its own Aspect Domain, so anything that you can add to a class can be done at the instance level except introductions. (metadata, annotations, bindings). For introductions on a per-instance basis, we'll do this with a proxy. I had prototyped this with the aop/mc integration.

                    The only thing I worry about this model is that it can become quite heavy to serialize with a remote proxy. EJB3 proxies are a bit lighter and accept an interceptor stack instead.

                     /** Create a composite proxy for the given interfaces, invoker.
                     @param id the cache id for the target object if any
                     @param targetName the name of the server side service
                     @param invoker the detached invoker stub to embed in the proxy
                     @param jndiName the JNDI name the proxy will be bound under if not null
                     @param proxyBindingName the invoker-proxy-binding name if not null
                     @param interceptorClasses the Class objects for the interceptors
                     @param loader the ClassLoader to associate the the Proxy
                     @param ifaces the Class objects for the interfaces the Proxy implements
                     @param ctx any context to add the invocation context proxy
                     */
                     public Object createProxy(Object id, ObjectName targetName,
                     Invoker invoker, String jndiName, String proxyBindingName,
                     ArrayList interceptorClasses, ClassLoader loader, Class[] ifaces, HashMap ctx)
                     {
                    


                    e.g. What I would really like a is
                    ProxyFactory
                    interface that could use either org.jboss.proxy or org.jboss.aop
                    depending on the version the user is installed in.

                    With the interceptor/metadata really coming more generic configuration
                    like aop's domain scoped crosscutting declarations or EJB2.x's container-configurations.

                    • 22. Re: EJB3 JCA/JMS Integration

                       

                      "bill.burke@jboss.com" wrote:
                      "adrian@jboss.org" wrote:

                      Does it support handling all the internal "book-keeping" with injection of overrides
                      like org.jboss.proxy or my prototype ProxyAdvisor.

                      NOTE: My ProxyAdvisor prototype does not handle "MetaData"
                      like the "context" in org.jboss.proxy



                      Not sure what you mean, but the new AOP 2.0 design basically has every instance is allowed to have its own Aspect Domain, so anything that you can add to a class can be done at the instance level except introductions. (metadata, annotations, bindings). For introductions on a per-instance basis, we'll do this with a proxy. I had prototyped this with the aop/mc integration.


                      Yes.

                      But it didn't do what I mentioned above. The user was still left
                      doing all the invocation construction and linking context when this should just
                      be declared at "proxy" construction or externally described using AOP
                      declarations in the domain.

                      This is what I call the "book-keeping".

                      The only thing at the time that allowed "introductions" was the javassist
                      generated proxy stuff which didn't allow interceptors on the introduction
                      or for an interceptor to be applied on both the main class and the introduction.
                      I noticed Kabir has been doing some work on this as well :-)

                      • 23. Re: EJB3 JCA/JMS Integration

                        I've closed this bug report:
                        http://jira.jboss.com/jira/browse/JBAS-3327

                        Don't report bugs for the JCA/JMS people to fix until
                        the integration issues raised here have been resolved.

                        We only fix bugs in code we support.

                        If think you have a bug in JCA/JMS integration, the correct place
                        to write a testcase is
                        org.jboss.test.messagedriven.test.*
                        in the main testsuite.

                        • 24. Re: EJB3 JCA/JMS Integration
                          bdecoste

                          I've been assigned the task of refactoring the EJB3 MDBs to exclusively use RARs. Earlier this week I checked in the 1st stage of these changes, but work is still in progress - MDBs are using the JMS RAR and no longer doing any of their own pooling. E-EJB3 via JMS RAR enabled MDBs is also working

                          See http://jira.jboss.com/jira/browse/EJBTHREE-589

                          The current problem is that when we specify maxSessions=1 in the JMS activation spec, there are multiple WorkWrapper threads that handle each message. The current mechanism for creating MDB instances is through a ThreadLocal, so even though we specify maxSessions=1, we see multiple threads handling the messages, so we are creating multiple MDB instances when there should only be 1. I've been working with Weston on this.

                          • 25. Re: EJB3 JCA/JMS Integration

                            "EJB3" dependening on the "connector" module is bogus.

                            Even "server" which is the integration project for AppServer
                            doesn't do that.

                            This integration is becoming even more of a mess.

                            Integrartion is:
                            user -> api/spi
                            NOT
                            user -> implementation details

                            • 26. Re: EJB3 JCA/JMS Integration

                              And EJB3 shouldn't be defining the integration anyway.

                              Make an integration point and then let people implement it
                              independently.

                              Tying the two together just leads to lots of problems like

                              1) too tightly coupled projects that must be developed/maintained in-sync
                              2) the consumed project (in this case JCA) doesn't know how it is being
                              used because the tests of functionality are in the EJB3 project not the
                              JCA project
                              3) use of things that happen to be public but were never intended
                              to be used externally, they are implementation details that are subject
                              to change without detail.

                              • 27. Re: EJB3 JCA/JMS Integration

                                If you don't see why this is a problem,
                                imagine how your code will work when we switch from
                                the "connector" project to the new "jca" project.

                                • 28. Re: EJB3 JCA/JMS Integration
                                  bill.burke

                                   

                                  "adrian@jboss.org" wrote:
                                  "EJB3" dependening on the "connector" module is bogus.

                                  Even "server" which is the integration project for AppServer
                                  doesn't do that.

                                  This integration is becoming even more of a mess.

                                  Integrartion is:
                                  user -> api/spi
                                  NOT
                                  user -> implementation details


                                  "server" wasn't dependent on connector because it was making raw untype JMX invocations. These raw JMX invocations *suck* and are very hard to maintain.

                                  You need to be able to get the MessageEndpointFactory and for that there needs to be an API.

                                  • 29. Re: EJB3 JCA/JMS Integration
                                    bill.burke

                                     

                                    "adrian@jboss.org" wrote:
                                    I've closed this bug report:
                                    http://jira.jboss.com/jira/browse/JBAS-3327

                                    Don't report bugs for the JCA/JMS people to fix until
                                    the integration issues raised here have been resolved.

                                    We only fix bugs in code we support.

                                    If think you have a bug in JCA/JMS integration, the correct place
                                    to write a testcase is
                                    org.jboss.test.messagedriven.test.*
                                    in the main testsuite.


                                    I don't want Bill held up until some "brainiac" discovers his holy grail SPI interface. Iterate. I'm sick of everything having to be perfect for you guys before we can do anything.