On Wed, Apr 06, 2011 at 11:27:53AM -0700, Mark Diggory wrote:
> On Wed, Apr 6, 2011 at 6:10 AM, Mark H. Wood <mw...@iupui.edu> wrote:
> > On Tue, Apr 05, 2011 at 09:46:26AM -0700, Mark Diggory wrote:
> >> Recommendations are that a web ui (and specifically the XMLUI is of
> >> interest in this case) be constructed not on the "Xml files"
> >> themselves, but utilizing the DSpace Configuration Service.
> >
> > So is the Configuration Service able to represent *structured* values
> > in an effective and comprehensible fashion, as opposed to the horrid
> > mess that we sometimes get when trying to cram them into Properties
> > format using the old ConfigurationManager?
> 
> No, it doesn't at the moment.  But switching over to XML is even more
> of a nightmare, ATM.  It will just introduce more "custom parsing"
> approaches like we have in various classes now.  the goal of the 2.0
> work and the use of the service manager was an attempt to consolidate
> "custom" parsing.

Well that's what made me think of JAXB, since it writes the parsers
for us and we just ask the resulting objects what was in the parse
tree.  I don't want to think about what "input-forms.properties" would
look like, or the code it would take to decipher that.

> > If not, and there's a need to serialize the resulting in-memory
> > structures without a lot of fuss, we might want to look at (say) JAXB
> > in cases where we need to express some kinds of complex relationships.
> 
> Your heading in the right direction with the wrong technology. Spring
> is JAXB in reverse, rather than binding custom XML to Java objects, we
> use a standardized XML (or Java annotations) to wire together a series
> of existing Java Beans.  Because of this, there is no "binding" that
> needs to be maintained, Spring already manages that, this is what I
> was doing the best I could to reflect in my tutorial example here:

I would certainly rather use Spring, which we already have to deal
with, than introduce Yet Another Technology.  But I don't recall
seeing a way to get Spring to serialize altered "injectables" back to
something it can read next time, and that seems to be a requirement?
Something like JAXB is read/write.

If we are going to have a web UI to alter forms and ingestion flow, we
need to be able to store the alterations.  (IOW we *do* need a
binding.)  We can do that several ways:

1. write the altered definitions out in the same XML format we use
   now.  It was designed to represent the relationships in question,
   and XML does so naturally.

2. write the altered definitions out in Properties format so that
   ConfigurationManager or ConfigurationService can deal with them.
   This forces us to represent structure in a fragile and unnatural
   manner.

3. translate the XML schema to a database schema and hide all the
   relational hair in DBMS tables.  The DBMS is supremely adapted to
   supporting us in this, once we get the entities clear and the
   relationships represented in code.

4. adjust our set of classes as needed so that we can use a
   serialization toolkit like JAXB to take care of the storage details
   for us.

5. write out a new Spring context (more XML).  See below for why this
   is really really hard.

There may be others.  If those are the choices, I'd probably go with
#3, even though it may be the most work up front.

The DBMS approach still requires a loader for the default setup.  I'd
still go with XML for this.

> https://wiki.duraspace.org/display/DSPACE/The+TAO+of+DSpace+Services
> 
> In this can there is no longer a need to worry about mapping/parsing
> XML to bind a the Launcher commands to, its just spring and done at
> runtime config by the service manager.  We want the same application
> at all the levels of the configuration... major portions of what are
> in dspace/config would/should be redressed as spring configuration.

Yes.  But what does that have to do with the Configuration Service?
The example isn't using that anywhere I can see.  Rather it introduces
a new Service which is configured through Spring.

> Likewise, we should consider ( and this is a direct concept from the
> original DSpace 2.0 SimpleStorageService work) that we will want to
> associate configuration with the Domain Model Entities, and that its
> the structural framework we seek to align with.  If you look
> throughout the configuration what you see are three types of
> abstraction
> 
> a.) properties of a plugin
> b.) wiring of plugins into a service
> c.) associating a service/plugin with a DSpace entity (Community,
> Collection, Item)

d.) standalone properties, used all over DSpace
e.) lists of standalone properties
f.) standalone hierarchial structures masquerading as sets of maps with
    funny-looking keys

> for (a) and (b) the Spring based Service Manager with associated
> Configuration Service is sufficient. The takes the need to configure
> DI in the dspace.cfg altogether because you do it in a more flexible
> "spring" approach.  Thats a considerable amount of hierarchy
> eliminated or place under the management of Spring.

One may wonder why we need the Service Manager for this.  It would
seem that Spring suffices.

> for (c) we should work on the Domain Model such that we can attach
> properties as attributes of DSpaceObjects and thus if you review
> configurable submission, configurable reviewer workflow, curation
> tools, discovery configuration, etc you will find components in each
> that should be properties attached to the DSpace Domain Model
> Entities.

Sensible.

d, e, f need to be assigned to beans, and then Spring can just jack
them into the appropriate objects.  dspace.cfg, this.cfg, that.cfg,
quux.cfg *all* go away and we don't need a ConfigurationAnything.

> We will ultimately end up with the question being, what from our
> current legacy configuration is attached to the Domain Model via db
> configuration and what gets sent to Spring configuration as wiring of
> the application.

At that point, external configuration boils down to "dude, where's my
database?"  One question whose answer *does* fit the Properties format
(for standalone applications) and can also be supplied by a servlet
container via JNDI.  Or let Spring handle the standalone case.

> As a strong example, I would take the InputForms and consider that
> there are two components, (1) validation/schema that should be
> associated with the Item being created and (2) a set of form fields
> that are more associated with a "view" in the user interface.
> 
> However, we really start to rethink what is"Domain Model" and "What is
> Service" when we dig into the Submission and Reviewer Workflows,
> here, depending on direction, we end up with two completely different
> treatments, just taking CS we have:
> 
> (1) the assignment of a submission workflow to a collection.
> (2) the assignment of steps to a workflow id
> (3) the configuration of the capabilities of a step (inputforms and 
> dspace.cfg)
> 
> 
> Treatment A : Make it a legitimate Domain Model
> 
> We can treat the whole as Domain Model (which is appropriate given
> submission is at the heart of DSpace).  If we do so, we end up with:
> 
> (2) is a new Domain Model where, for the legacy case, we actually
> crete new database tables and DAO bindings for the Submission Workflow
> Steps.
> (1) is a Domain Model Association of workflow2collection
> (3) are simple configuration properites attached to the Collection
> and/or workflow and step entities.
> 
> Treatment B : Make it all Service Manager / Spring based.
> 
> (2) is treated as a set of steps wired in spring configuration
> (1) are simple properties on the Collection entities associating the
> workflow with the collection
> (3) are simple properties on the Collection and/or workflow and step
> entities. (requires more hierarchical config)
> 
> This is a simpler design then Treatment A to get into place, but still
> puts configuration of workflow in the developer hands. Ultimately
> Treatment A takes a little more thought and work, but the payoff to
> the community is much more significant and it ultimately is the right
> choice.

Well, if we want to provide UI to customize this stuff, then B really
can't be done.  Because, to persist the changes, we have to figure out
where Spring got its instructions for wiring up the objects, and
replace those instructions through a big pile of code that knows how
to write Spring context descriptions.  The "figure out where Spring
got it" is the part I don't see how we can do.  Depending on how
things are mixed together, we may not be able to do the "replace with
new wiring" either since we might stomp all over things that have
nothing to do with what we are altering.  Unless you want to pull it
all into (one or more!) DOM trees, do surgery thereon, and serialize
it all back to the appropriate place(s) (which we don't know).

So we really first need to work out what we want to configure using a
text editor, and what using DSpace UIs.

> Theres a great deal of opportunity here if we get the design right
> from the get-go. What I am really trying to emphasize to the group is
> that you need to think out the overall DSpace design goals and
> strategy rather than focusing in on hacking little areas of the
> codebase, we should avoid custom parsing, likewise we should recognize
> that we have historically taken on a strategy for solving
> customizations to DSpace that is pigeonholing our application design,
> and that this approach selects for not creating or altering the true
> Domain Model for DSpace in favor of individual, unique and messy on
> the spot solutions that meet a local need.  The later are like a
> cancer on an originally clean DSpace design. I really think the core
> committer groups responsibility to achieve a consensus on approaches
> that should/will be allowed to be contributed to DSpace and thus
> mediate the danger of these narrow vision micro-solutions continuing
> to propagate.

I agree that it is time for an overall review of configuration with an
eye to supplying *representations* and mechanisms that are appropriate
to the code, the entity (Collection, Community, Site) managers, and
the system administrator.  (If I'm not putting words in your mouth.)
It seems clear to me that DSpace provides configuration facilities
which no longer match the ways it needs to be configured and the ways
that the people responsible for its functioning want to interact with
it.

-- 
Mark H. Wood, Lead System Programmer   mw...@iupui.edu
Asking whether markets are efficient is like asking whether people are smart.

Attachment: pgphWHOhPFR6K.pgp
Description: PGP signature

------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
Dspace-devel mailing list
Dspace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dspace-devel

Reply via email to