On 3/5/06, Allen Gilliland <[EMAIL PROTECTED]> wrote: > On Sun, 2006-03-05 at 15:59, Matt Raible wrote: > > On 3/5/06, Allen Gilliland <[EMAIL PROTECTED]> wrote: > > > On Sun, 2006-03-05 at 15:05, Anil Gangolli wrote: > > > > Allen Gilliland wrote: > > > > > > > > > > My personal opinion is that we can do this without Spring using a > > > > > little > > > > > bit more of our own code. Of course it's nice to have the work > > > > > already > > > > > done for us by Spring instead. > > > > > > > > > > One question I have is are there any controls on what beans someone > > > > > can > > > > > access via Spring? i.e. if I use appfuse as an example I noticed that > > > > > there is a bean defined for the Hibernate sessionFactory. is there > > > > > anything that prevents someone in the presentation layer from trying > > > > > ctx.getBean("sessionFactory")? that is one thing that I wasn't sure > > > > > about. > > > > > > > > > We could control context population as we want. Not all Spring beans > > > > are necessarily exposed in the velocity context. > > > > > > I wasn't talking about the Velocity context actually, I sure hope nobody > > > would have access to the Spring context in their templates. What I mean > > > is that it appears that any bean defined in the Spring application > > > context is available to anyone who wants to look it up via > > > ctx.getBean("bean"). > > > > > > It may not really be an important problem, but I believe there is a > > > potential for someone with access to the code to lookup a bean that they > > > really shouldn't be allowed to access directly. > > > > > > I believe the relevant example is a case where someone looks up a bean > > > directly rather than working through an interface or other class. In > > > our current implementation we expect that everyone uses > > > Roller.getXXXManager() to get access to a manager class by working > > > through an interface. Using Spring someone could bypass using the > > > Roller interface by simply calling ctx.getBean("userManager"). > > > > > > Again, I'm not sure if this is really a problem, but it seems reasonably > > > important to me. > > > > I don't see how using Spring is any different than the current system. > > If someone really wants to call a persistence class, then can, can't > > they? We all see things when they're checked in - don't we? It's not > > like using some new technology changes the way how we do code reviews > > and approve checkins. > > You are absolutely correct that this isn't an issue if we all monitor > the code and make sure that nobody commits code that does things the > wrong way, but I think that is somewhat optimistic thinking. Things > always manage to slip through the cracks eventually. > > I also disagree that this is the same thing that we currently have. > Currently you have no way of accessing classes which are meant to be > hidden behind interfaces. It seems to me that Spring provides an > opportunity to bypass that and lookup beans that are possibly meant to > only be available to classes behind interfaces. > > What about the example that I mentioned from appfuse? Couldn't someone > in the "web" module call ctx.getBean("sessionFactory") and then have > direct access to the Hibernate session factory? If so, then that sounds > dangerous to me.
Absolutely. You can it dangerous - I call it flexible. Then again, AppFuse is not the same thing as Roller. It's a programming platform in a sense - and it expects 1) developers to be smart and 2) to know what they're doing. Then again, it's their application, not mine. ;-) Roller is a bit different - but I still prefer open systems rather than ones that are locked down. That being said, I'm sure there's a way to prevent this (using AOP or something) - I just don't know it off the top of my head. I think Spring is great for assembling applications, but for something like Roller that's practically "feature complete" - I don't know that it makes a whole lot of sense. Then again, if Roller's backend is difficult to test or maintain - using Spring would likely solve that. I would say the decision to use Spring vs. don't use Spring should like with the folks that work on Roller the most - which is you and Dave. It sounds like neither of you are very enthusiastic about using it - so my recommendation is simple. Don't. ;-) Matt > > -- Allen > > > > > > Spring is really just a simplification of a lookup mechanism. If it > > complicates things, I'd say we don't use it. However, more and more > > developers are familiar with how it works - and it might lead to more > > participation. > > > > I'm +0 either way since I rarely dig into Roller's backend. However, > > if it was configured with Spring - I might be more inclined to do so. > > ;-) > > > > Matt > > > > > > > > -- Allen > > > > > > > > > > > > > > > The nice thing about using a normal Java based hierarchy for accessing > > > > > objects is that nobody can access objects that they aren't supposed to > > > > > know about. Another example from appfuse would be the way that the > > > > > app > > > > > separates out a "service" and "dao" layer, what prevents someone from > > > > > directly accessing a dao bean even though they aren't supposed to? > > > > > > > > > > > > > > I'm not really familiar with AppFuse's model; I'd guess Matt R is :-) > > > > and could answer with respect to that. Spring beans are just plain Java > > > > classes that happen to be instantiated and configured by Spring. We can > > > > choose our own structure. If we choose to use Spring MVC or some other > > > > model in addition to basic beans, that would place more structural > > > > constraints and choices we would be adopting as a result, but this is > > > > independent. I'm not advocating that but we might want to consider that > > > > later too; I haven't really used it in the realm of presentation. I > > > > have used the basic BeanFactory and ApplicationContext mechanisms quite > > > > a bit now mostly for backend database apps that have little or no user > > > > interface. They're great. > > > > >> Taking this path would suggest that we use Spring's xml-based > > > > >> configuration mechanisms instead of roller.properties. It's possible > > > > >> (as Matt has done for some of the Acegi-related properties) to > > > > >> support > > > > >> configuration via roller.properties rather than requiring users to > > > > >> edit > > > > >> the xml, but I think that the approach taken by Matt for the security > > > > >> props (having code in RollerContext initialization read the roller > > > > >> props > > > > >> and call appropriate bean setters) would be onerous to extend to a > > > > >> large number of properties. What would probably work nicely (and be > > > > >> easy) is to have most of the Spring configuration refer where > > > > >> necessary > > > > >> (by property paths) to one bean representing the equivalent of > > > > >> roller.properties and configured in one xml file (or even a > > > > >> properties > > > > >> file if we initialize that one bean specially). > > > > >> > > > > > > > > > > This is the other big thing that I am concerned about with Spring in > > > > > Roller. I really don't want go back to making the config more > > > > > complicated and spread out. > > > > > > > > > It would be just as centralized as roller.properties / > > > > roller-custom.properties but as xml. In fact with a bit of simple > > > > development we could even stick with the present property file form for > > > > the few properties that we think should be exposed to site admins, so > > > > this wouldn't have to change. Developers/customizers would see the full > > > > range of Spring however. > > > > > I'd like to see more details about the implementation before making > > > > > any > > > > > final decisions though. It's probably not a big deal if the only use > > > > > of > > > > > the Spring appliction context is to inject special overrides for > > > > > classes > > > > > like RollerImpl, ManagerImpls, etc. Since these classes really don't > > > > > need to be modified by normal users we can just leave it up to > > > > > advanced > > > > > users to know how to open up the webapp and modify the Spring > > > > > Application context to make these customizations. > > > > > > > > > > The roller.properties would still serve its primary purpose, which is > > > > > to > > > > > make it easy for Roller admins to easily apply settings for the things > > > > > we expect people to want to change. > > > > > > > > > > > > > > Yes, that's the intent there. > > > > >> I think it could be entered gradually, but eventually would mean a > > > > >> lot > > > > >> of minor-to-moderate restructuring to really utilize the pattern, > > > > >> feeling kind-of Roller 3.0-ish. > > > > >> > > > > >> Would there be sufficient support for seeing a proposal along these > > > > >> lines? I probably won't embark on such a proposal unless there's > > > > >> some > > > > >> predisposition to move in this direction. > > > > >> > > > > > > > > > > I would definitely like to see it. > > > > > > > > > > -- Allen > > > > > > > > > > > > > > > > > > > >> --a. > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > >