[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: ISSUE 178: multiplicity is too complex
logged as: http://www.osoa.org/jira/browse/ASSEMBLY-178 On Aug 26, 2009, at 3:58 PM, Jim Marino wrote: > Hi Sanjay, > > More comments inline... > > Jim > > On Aug 20, 2009, at 6:45 PM, Patil, Sanjay wrote: > >> Jim, >> >> I also had a feeling that you would respond to my nudge :-) >> >> Perhaps our views of the utility of the autowire feature (and >> perhaps even of SCA) are quite different. I think of SCA primarily >> as a technology for composing solutions from coarse grained >> components (built on heterogeneous platforms like Java EE, BPEL, >> etc, in most cases). In this scenario (which is more geared towards >> integration), wiring is a critical aspect of the design and any >> errors in wiring will lead to disastrous results. This is not to >> say that errors in wiring would be tolerated in any other cases but >> the point is - in the use cases I am envisioning the risk of >> erroneous wiring that is accompanied with the convenience of >> autowiring is very high and it would be quite acceptable and even >> natural to do the wiring by hand. Even if autowiring is used, there >> will be a need to recheck the correctness of all the wires which >> defeats the purpose of autowiring to certain degree, IMHO. I do not >> think that the syntactic shortcut and the saving of some keystrokes >> in the SCDL is that big a deal. >> > > I suspect we do have different views on the utility of SCA, which > may just indicate that it can serve a variety of interests. I also > view SCA as an "integration technology" in that it promotes software > reuse and distributed systems. I think where we are different is > that I believe SCA is more effective and simple when it is used as a > programming model rather than as another abstraction on an existing > technology such as EJB (or Spring). > > I'm a little surprised by your dislike of autowire given that SCA is > full of other similar features. For example, intents and binding.sca > require the runtime to make very similar choices about the wiring of > an application. In of those cases, the physical manifestation of a > wire is not configured by the developer and/or assembler. Instead, > the runtime derives a physical wire by running a set of algorithms. > Similar to autowire, if a runtime matches an incorrect policy or > remote transport technology, it can have serious consequences for an > application. > >> > > In terms of your specific comments on wiring, I think it is a > critical aspect of all applications, not just some. I've been > involved in a number of fairly complex applications built using SCA > (some in financial services) and have never had an issue with > autowire. In fact, we have built the entire Fabric3 runtime > consisting of more than a thousand SCA services using autowire and > have never encountered an erroneous wire that was the result of > autowire. I suspect Fabric3's wiring requirements are much more > complex than those of a typical application (it relies on advanced > features such as reinjection to effect bootstrap, etc.). > > Also, I'm not sure how autowire requires someone to perform more > checks than explicit name-based wiring. In either case, an > application should have integration tests which will implicitly > validate wiring when they are run regardless of how the wires were > established. If an application has good test coverage, there should > be no need to manually "check" the wires. This is the same thing > that would need to be done to verify policy and binding.sca. > > What autowire does do is save a tremendous amount of time when it > comes to refactoring. This is more than just reducing typing. For > example, when developing Fabric3, we typically go through a series > of refactors where services are moved between composites and/or > renamed. Using autowire saves on having to manually adjust wires. > I'm sure someone will come up with a tool that does this > automatically for explicit wires, but having this capability "built- > in" is nice for people that prefer limited development tooling > environments. > >> Granted that autowire may be a common concept in the world of DI >> and I must confess that I haven't kept myself abreast of all the >> developments there, however I still think that the application of >> SCA is at a relatively higher level than the common DI frameworks. >> If for some reason SCA must support an autowire like feature in >> some C&I specs, then I think we should define and scope the >> autowire feature to the specific C&I specs and not elevate it at >> the assembly level. >> > > In all of the SCA projects I have worked on and presentations I have > made, a common theme that has emerged is people think SCA is > powerful because it provides assembly of coarse-grained and fine- > grained services. That translates into simpler applications because > developers only need to learn one assembly technology and > configuration is consistent across the entire application. Sure, > there is integration of legacy systems built using technologies such > as EJB, but even in those scenarios, it is easier to build the > service integration layer using a combination of coarse- and fine- > grained artifacts. > > Basically, I think the distinction between coarse- and fine-grained > assembly is artificial. There is a difference between creating > coarse- and fine-grained services, but it is better to have one > common way of configuring them. While this results in simpler > applications today, I believe it is going to become imperative in > the future. For example, virtualization and cloud technologies will > require metadata to provision applications. Assembly (SCDL and > policies) provides a lot of what is required. Having multiple ways > of performing wiring and specifying assembly at different levels in > an application will only complicate this effort. > >> I think I understand you usage of the autowire feature for >> subscription-style services but I am not sure if autowire is a good >> long-term solution for this scenario. Perhaps you should bring up >> your use case for discussion under the Eventing related issue >> (which is deferred to post 1.1 release of SCA specs, BTW) >> > > I'm glad to see eventing was delayed until post-1.1. I looked at it > for my use case but I don't think it fits as the use-case requires > dispatching to a typed service to perform an action. My > understanding of eventing is that it is a much more loosely coupled > paradigm that does not involve the notion of an invocation. > >> -- Sanjay >> >> From: Jim Marino [mailto:jim.marino@gmail.com] >> Sent: Thursday, Aug 20, 2009 6:27 AM >> To: Patil, Sanjay >> Cc: David Booz; sca-assembly@lists.oasis-open.org >> Subject: Re: [sca-assembly] NEW ISSUE: multiplicity is too complex >> >> >> On Aug 20, 2009, at 12:46 AM, Patil, Sanjay wrote: >> >>> >>> +1 >>> >>> A good deal of complexity seems to have slowly crept into the >>> spec. Perhaps time to prune a few features that are rarely used >>> but still show up all over the place (autowire anybody?). >>> -- Sanjay >>> >> Sanjay, >> >> We have been over this one several times and had a feeling you >> would bring this up. Can you explain how autowire is complex? >> >> Two items that lead to complexity are a behavior developers don't >> expect or excessive configuration. I would like to point out that >> every modern Java dependency injection framework I am aware of >> supports autowire. Some - such as Guice and PicoContainer - are >> based on it. Others that support autowire include: >> >> - EJB 3 >> - Web Beans >> - Spring >> >> Based on this, I think it is fair to say autowire is fairly well- >> established in the developer lexicon and therefore doesn't >> contribute to increased complexity based on it being an additional >> concept people must master. >> >> On the contrary, autowire actually reduces complexity as it >> eliminates the need to write reams of configuration. In fact, many >> people are now switching over to using annotation-based autowire in >> Spring applications. For example, this was just posted on the >> ServerSide yesterday: http://www.theserverside.com/news/thread.tss?thread_id=56989#319078 >> . On this note, I would argue SCA's concept of autowire is even >> simpler than Springs, since it does not require a specialized >> annotation. >> >> Autowire has proven to be a huge time-saver and essential >> capability on the SCA projects I have been involved with. It's a >> time-saver because we don't need to manually code target URIs and >> because it is easier to refactor. If we change a component name, >> wiring does not break. It's also an essential feature because we >> are using it for subscription-style services. This use case comes >> up very often in service-based systems. One approach is to use a >> "white-board" pattern similar to OSGi. Instead, we use autowire >> with a registry that dispatches to multiple services: >> >> >> registry ---------- 0..n --------> service >> >> In SCA we model this as a multiplicity autowire. Services are added >> to the registry which contains a collection-based reference. As >> autowire is enabled, the services do not need to have knowledge of >> the registry. In addition, autowire provides dynamic capabilities. >> Since our runtime supports reinjection, when a new service comes >> online, it reinjects the multiplicity reference, thereby updating >> the registry. >> >> If autowire were removed, it would require us to provide additional >> wire elements. When the number of services increases, this gets >> cumbersome and error-prone. Moreover, if there are several >> registries involved, it adds to the complexity. >> >> Autowire is a feature people commonly use. If we were to remove it, >> I'm afraid we would be going in the opposite direction of most DI >> frameworks which rely heavily on it for simplicity. >> >> Jim >> >> >> >>> From: David Booz [mailto:booz@us.ibm.com] >>> Sent: Tuesday, Aug 18, 2009 12:19 PM >>> To: sca-assembly@lists.oasis-open.org >>> Subject: [sca-assembly] NEW ISSUE: multiplicity is too complex >>> >>> TARGET: SCA Assembly spec CD03 rev2 [1] >>> >>> DESCRIPTION: >>> The concept of reference multiplicity is too complex. It's hard to >>> measure complexity as the degree of complexity is often directly >>> proportional to the level of past experience, which is going to be >>> different fro each person. In my experience, it is useful to >>> measure complexity by counting the number of concepts that must be >>> mastered inorder to to understand the thing or concept being >>> studied. Therefore, the fewer concepts we have, the easier this >>> will be to understand, and therefore the more useful it will be >>> for developers and assemblers. >>> >>> The concepts that need to be understood in the space of >>> multiplicity are: reference, reference targets, multiplicity >>> itself, promotion, componentType, wiredByImpl, autoWire, bindings, >>> binding URI targets, wire targets, wire deployment (i.e. @replace >>> on <wire/>). Did I miss any? >>> >>> The following is the state of the current assembly spec (with the >>> resolution of ASSEMBLY-136): >>> >>> 1) Composite references MUST specify @multiplicity, there is no >>> default. This is a consummability concern. >>> 2) The @nonOverrideable attribute has the worst name of all time. >>> This is a consummability concern. >>> 3) wiredByImpl is effectively multiplicity 0..0, but it has a >>> different name and is therefore a different concept. Why? >>> 4) It's possible to configure a reference with multiplicity 1..1 >>> and yet not specify any targets, but requires the reference to be >>> promoted. So the '1..' part of 1..1 doesn't mean 1, it means >>> sometimes 1. Unless you're using autowire in which case 1 does >>> mean 1 again. >>> 5) In the context of multiplicity, there are three ways to specify >>> reference targets (a) component/reference/@target, (b) composite/ >>> reference/@target and (c) binding/@uri. Three ways is always more >>> complicated than one way. >>> 6) multiplicity itself is composed of two concepts; the minimum >>> and maximum number of reference targets that can be specified. >>> 7) With @autowire, a 0..1 reference might get a target from >>> autowire processing or from the component above in promotion. >>> 8) ...others should feel free to append their favorite >>> contradiction here as well and we can collect them into this issue. >>> >>> I am as aware as anyone of how we got here and have been part of >>> creating this mess along with the rest of you (you know who you >>> are). Now's the time to clean this up. >>> >>> PROPOSAL: >>> None at this time. >>> >>> >>> [1] http://www.oasis-open.org/committees/download.php/33563/sca-assembly-1.1-spec-cd03-Rev2.pdf >>> >>> Dave Booz >>> STSM, BPM and SCA Architecture >>> Co-Chair OASIS SCA-Policy TC and SCA-J TC >>> "Distributed objects first, then world hunger" >>> Poughkeepsie, NY (845)-435-6093 or 8-295-6093 >>> e-mail:booz@us.ibm.com >>> >> >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]