Jim Marino wrote:
> When I first read the thread on this, I thought the DAS service would
> be a component extension type (e.g. analogous to a
> implementation.java or implementation.ejb) and not a component
> implementation type, which would allow for dynamic and eventually
> declarative configuration styles.
I have not very familiar with the terminology so I am not sure what a
"component extension type" is. But, I do think we eventually want
"implementation.rdbdas". Wouldn't this be a new implementation type?
It looks like Amita chose to start with a POJO. I notice the use of "
implementation.java".
> Either way, though, I am curious as to why
>
> public DAS configureService(String configFile);
>
> exists as part of the service definition? If the DAS service was a
> component extension type, it could be handled as part of the
> application bootstrap. If the DAS service was a component
> implementation type, the configuration file URI could be passed in as
> a property and then processed in an initializer method decorated by
> the SCA @Init annotation. In the latter case, if the implementation
> of DASService thread-safe (hopefully it is since configuration would
> seem to be a heavyweight operation), then I would make the component
> module scoped to avoid initialization overhead on every resolution.
>
> In both approaches (extension vs. implementation type), having
> configuration exposed to the application doesn't quite feel right,
> since that is what DI tries to externalize.
I agree. The configuration should be part of the initialization and
should use SCA patterns to do this. I think that Amita meant to use
eventually use a component property for the DAS config info but started
with a method.
>
> Also, I was thinking that in having this a component extension type,
> the service interfaces returned from a resolution could include the
> dynamic one described below or static ones people have mentioned. I
> guess it is best to start with the easier-to-implement part first and
> support the dynamic interface.
>
> FWIW, as a JPA/Hibernate/general O-R bigot, it would be nice to
> understand what DAS provides in relation to other persistence
> technologies. Outside of the Java world, Microsoft is promoting LINQ
> which is really interesting, and it would be informative to compare
> the goals of DAS with that approach (there are obvious differences
> such as having the query language a strongly-typed part of the
> programming language, e.g. C#, and LINQ's use of closures).
>
> In contrasting DAS to O-R technologies, I see the primary use cases
> for the former being a quick way to issue a query that may be
> executed against *heterogeneous* data stores and have that data flow
> remotely or to a client that is not necessarily Java-based. One key
> for me is heterogeneous data since JDBC 4 lets me do this (Hibernate
> and JPA are about as easy):
>
IMO the primary use case for DAS is an application that is SDO-centric
and is taking advantage of its disconnected capabilities. The RDB DAS
is built to work with SDO and uses the change summary to drive changes
made to a disconnected data graph back to some store. This is not to
say that a relational DAS could not be built on top of JPA, in fact,
this might be a very useful thing to do. The implementation we
currently have provides a very straightforward implicit mapping from
DataObjects to Tables. If more capable mapping is needed then it makes
sense to use the JPA-defined technology and artifacts. A modified
Entity manager might be needed to take advantage of SDO's change summary.
>
> public interface CustomerDao extends BaseQuery {
> @Select("select * from customers where city = ?1")
> DataSet<Customer> findCustomersFrom(String city);
> }
>
> CustomerDao cd = QueryObjectFactory.createQueryObject
> (CustomerDao.class, datasource);
> DataSet<Customer> r = cd.findCustomersFrom(city);
>
>
> The other key is remote data and change lists. I think there are
> (literally) about a thousand ways that already exist to handle the
> "local" data case. For change lists, interop with ADO.NET's change
> summary facilities would be interesting.
I agree. Also, it looks like Xcalia may have a similar thought:
http://www.xcalia.com/news/PR_2006-10-23.jsp
>
> I'm playing devil's advocate a bit with DAS, but I think it is
> important we have a clear statement as to when it is appropriate and
> not appropriate to use. One place to start would be to compare it to
> JDBC 4 and JPA.
We can get started with JPA:
* JPA is java-specific, container-based, built around a connected
data model and offers a complete O/R mapping for POJOs
* The RDB DAS is a java implementation of a language - neutral
concept (hopefully specified some day) that is containerless,
assumes a disconnected data model and provides a simple, implicit
mapping for SDO DataObjects (Dynamic or Static) to relational
tables.
Anything else?
>
> Jim
>
> On Oct 23, 2006, at 8:18 AM, Luciano Resende wrote:
>
>> Hi Amita
>>
>> I think we were both going on the same way, with the DAS Service
>> sample,
>> altough i had the interface more like this, to be more flexible :
>>
>> public interface DASService {
>>
>> public DAS configureService(String configFile);
>
>
>> public DataObject executeCommand(String commandName);
>> public DataObject execute(String newCommand);
>> public void applyChanges(DataObject graphRoot);
>> }
>>
>>
>> As for having it as a sample, maybe we could defined the DASService
>> as one
>> sample itself, and have a second version of companyWeb that would
>> consume
>> the service, something like :
>>
>> das\samples\companyWeb
>> das\samples\dasService
>> das\samples.companyWeb.service
>>
>> or, more like BigBank
>>
>> das\samples\companyweb.Service\dasService
>> das\samples\companyweb.Service\webClient
>>
>> Or even in sampleApps...
>>
>> Toughts ?
>>
>>
>> On 10/21/06, Amita Vadhavkar <[EMAIL PROTECTED]> wrote:
>>
>>>
>>> Hi ,
>>> I am also following up another thread
>>> http://www.mail-archive.com/[email protected]/ msg09944.html
>>> on the
>>> similar issue (JDBC stored procedure container
>>> using DAS)
>>> Besides the fact that I am actively working on the container work,
>>> I also
>>> have tried to
>>> develop a sample based on the below discussion, following dynamic
>>> approach.
>>>
>>> I am attaching the same here. Please take a look and give your
>>> suggestions.
>>> In this, StoredProcedureService implementation has setConfigInfo (DAS
>>> Config) and
>>> execute(Any SQL). This can be made more complete with executeSQL(),
>>> applyChanges()
>>> etc.
>>>
>>> Can this be added to the existing set of samples?
>>>
>>> Regards,
>>> Amita
>>>
>>> On 10/21/06, Kevin Williams <[EMAIL PROTECTED]> wrote:
>>> >
>>> > Luciano Resende wrote:
>>> >
>>> > > Kevin, from what I understood from your suggestion, it was
>>> looking to
>>> > me
>>> > > more like exposing DAS as a service :
>>> > >
>>> > >>> public interface RDBDASService
>>> > >>> DataObject execute(String commandName);
>>> > >>> DataObject executeSQL(String abitrarySQL);
>>> > >>> void applyChanges(DataObject graphRoot);
>>> > >>> }
>>> > >>
>>> > Yes, I am talking about exposing a DAS Service configured with a
>>> > specific set of capabilities/commands defined in the DAS config
>>> file.
>>> > So, if the implementation of the service interface above was
>>> configured
>>> > to work with Customers they would use the service like this:
>>> >
>>> > List customers = myRDBDASService.execute("getAllCustomers");
>>> > String name = customers.get(0).getString("name");
>>> >
>>> > This is not much different than the static interface you proposed,
>>> > right?
>>> >
>>> > > And then, when a service developer defines the AccountService,
>>> he will
>>> >
>>> > > have
>>> > > to know about yet another service, about how DAS works, how it is
>>> > > configured, etc, etc... is that right ?
>>> > >
>>> > The abilities of the service are defined by the DAS config file.
>>> So,
>>> > the person or tool that provides the config file must understand
>>> how the
>>> >
>>> > RDB DAS APIs work. There is no getting around this.
>>> >
>>> > > My proposal was going more towards allowing the service
>>> developer to
>>> > > focus
>>> > > on defining the service, and let the "declarative das" to
>>> handle the
>>> > > persistent layer....
>>> > >
>>> > The DAS config file is the declaration of an instance of the
>>> DAS. That
>>> > instance can be exposed as a dynamic or typed service/ interface.
>>> That
>>> > seems to be the main discussion we are having. Although, I may be
>>> > missing something.
>>> >
>>> > > Also, by defining some conventions over configuration
and/or using
>>> > > annotations (e.g @Procedure to force mapping to a stored
>>> procedure),
>>> > the
>>> > > service developer could really define a service that interacts
>>> with a
>>> > > RDB,
>>> > > without having to code the service persistence layer.
>>> > >
>>> > There is a lot of potential for the use of annotations.
>>> >
>>> > >
>>> > > - Luciano
>>> > >
>>> > >
>>> > > On 10/19/06, Kevin Williams < [EMAIL PROTECTED]> wrote:
>>> > >
>>> > >>
>>> > >> The real difference between the two approaches is that one is
>>> "Typed"
>>> > or
>>> > >> static and the other is dynamic. I think both are needed
but was
>>> > >> suggesting that we start with dynamic since it is the most
>>> flexible
>>> > and
>>> > >> seems to be a reasonable stepping stone towards a static
>>> capability.
>>> > >>
>>> > >> With either, the user does not need to know about traditional
>>> > >> persistence frameworks. With the dynamic approach, however,
>>> the user
>>> > >> does need to know about the dynamic SDO API.
>>> > >>
>>> > >> So, with the static interface the user might write:
>>> > >>
>>> > >> List customers = accountService.getAllCustomers();
>>> > >> String name = ((Customer)customers.get(0)).getName();
>>> > >>
>>> > >> The equivalent dynamic API might be:
>>> > >>
>>> > >> List customers = dasService.execute("getAllCustomers");
>>> > >> String name = ((DataObject)customers.get(0)).getString
>>> ("name");
>>> > >>
>>> > >> The first is probably a little easier for the application
>>> developer
>>> > but
>>> > >> the second is much easier for the service developer. IMO, the
>>> dynamic
>>> > >> case is the best place to start and, again, we definitely will
>>> want
>>> > >> support for both.
>>> > >>
>>> > >> Thanks.
>>> > >> --
>>> > >> Kevin
>>> > >>
>>> > >>
>>> > >>
>>> > >>
>>> > >>
>>> > >>
>>> > >> Jeremy Boynes wrote:
>>> > >>
>>> > >> > I think this would be useful but it seems more like a
>>> traditional
>>> > >> > persistence API than what Luciano was suggesting. With this
>>> one a
>>> > >> > user needs to know about DataObject's, commands, SQL strings
>>> etc.
>>> > >> > just like they would if they were using raw JDBC or JPA.
>>> > >> >
>>> > >> > On the other hand, Luciano's proposal seemed more about
>>> expressing
>>> > >> > high-level CRUD operations as operations on a service
>>> interface:
>>> > >> >
>>> > >> >>> public interface AccountService {
>>> > >> >>>
>>> > >> >>> public List getAllCustomers();
>>> > >> >>> public Object getCustomerAccount(String accountNumber);
>>> > >> >>> }
>>> > >> >>
>>> > >> >
>>> > >> > which is all application level concepts rather
than persistence
>>> > level
>>> > >> > concepts. I'd actually go a little further and put that
>>> right into
>>> > >> > the service contract:
>>> > >> >
>>> > >> > public interface AccountService {
>>> > >> > List<Customer> getAllCustomers();
>>> > >> > Account getCustomerAccount(String accountNumber);
>>> > >> > }
>>> > >> >
>>> > >> > In a ideal world, if the user was able to accept standardized
>>> > >> > mappings (a la Rails et al) then no further configuration
>>> would be
>>> > >> > needed except to add this to the logical assembly:
>>> > >> >
>>> > >> > <component name="AccountStore">
>>> > >> > <implementation.das resource="MySQLDatabase"/>
>>> > >> > </component>
>>> > >> >
>>> > >> > With SCA's ability to translate service contracts, this
>>> should be
>>> > >> > callable from and deployable to any SCA runtime regardless of
>>> > whether
>>> > >> > it was being accessed locally, by WS-*, by IIOP or running on
a
>>> > Java,
>>> > >> > C++ or PHP platform.
>>> > >> >
>>> > >> > The important thing here is that the client is isolated from
>>> how
>>> > the
>>> > >> > DAS component is provided. We could have multiple declarative
>>> > >> > implementations, say one based on RDB-DAS and one that did
>>> stuff
>>> > with
>>> > >> > XML databases like Xindice; alternatively, /without altering
>>> the
>>> > >> > client at all/ they could switch to a custom coded version
>>> written
>>> > in
>>> > >> > Java, C++ or a store procedure language like PL/SQL.
>>> > >> >
>>> > >> > --
>>> > >> > Jeremy
>>> > >> >
>>> > >> >
>>> > >> > On Oct 19, 2006, at 2:05 PM, Kevin Williams wrote:
>>> > >> >
>>> > >> >> I would suggest that we start right away with a RDBDAS-based
>>> > >> >> solution. I also think that the best place to start would
>>> be with
>>> > >> >> an interface that is "weakly" typed. That is, a service
>>> interface
>>> >
>>> > >> >> in terms of dynamic SDO's. If we go this route we can
>>> avoid the
>>> > >> >> generation (by hand or otherwise) of code specific to a new
>>> > >> >> service. Instead, the service will be "instantiated" based
>>> on the
>>> >
>>> > >> >> provided DAS config file. The service interface might look
>>> like
>>> > >> this:
>>> > >> >>
>>> > >> >> public interface RDBDASService
>>> > >> >> DataObject execute(String commandName);
>>> > >> >> DataObject executeSQL(String abitrarySQL);
>>> > >> >> void applyChanges(DataObject graphRoot);
>>> > >> >> }
>>> > >> >>
>>> > >> >> So, depending on the config file used to instantiate the
>>> service,
>>> > >> >> this interface could be used to return Customers/Accounts or
>>> > >> >> Toasters. In fact, a lot could be achieved with no
>>> > configuration at
>>> > >> >> all by restricting use to: DataObject executeSQL(String
>>> > >> abitrarySQL);
>>> > >> >>
>>> > >> >> I expand a bit here: http://mail-archives.apache.org/
>>> mod_mbox/ws-
>>> > >> >> tuscany-dev/200610.mbox/[EMAIL PROTECTED] %3e
>>> > >> >>
>>> > >> >> Once this was working it should be straightforward to build
>>> more
>>> > >> >> strongly typed services and possible put together some
>>> generation
>>> > >> >> tooling. We could also start looking at support for a more
>>> > RESTFul
>>> > >> >> interface.
>>> > >> >> --
>>> > >> >> Kevin
>>> > >> >>
>>> > >> >>
>>> > >> >>
>>> > >> >>
>>> > >> >> Luciano Resende wrote:
>>> > >> >>
>>> > >> >>> Recently, people have been starting to talk about better DAS
>>> > >> >>> integration
>>> > >> >>> with DAS, and below are some threads on the subject :
>>> > >> >>>
>>> > >> >>>
>>> > http://www.mail-archive.com/[email protected]/msg08833.html
>>> > >> >>>
>>> > http://www.mail-archive.com/[email protected]/msg08923.html
>>> > >> >>>
>>> > >> http://www.mail-archive.com/tuscany-dev%40ws.apache.org/
>>> msg09715.html
>>> >
>>> > >> >>>
>>> > >> >>> I'm new on the SCA side, so please help me make sure
what I'm
>>> > >> >>> saying is not
>>> > >> >>> yet available on SCA today.
>>> > >> >>>
>>> > >> >>> Today, defining a service to work with a relational
>>> database, you
>>> > >> >>> will need
>>> > >> >>> to code the persistence side of the service where CRUD
>>> operations
>>> > >> >>> to the
>>> > >> >>> database will be done.
>>> > >> >>> I was thinking on a simpler, easier way, where coding the
>>> CRUD
>>> > >> >>> operations on
>>> > >> >>> the persistence layer would be avoided as much as possible.
>>> > >> >>> The idea would be to have a more "declarative DAS" when
>>> defining
>>> > SCA
>>> > >> >>> Services, so you would either use some Annotations or SCDL
to
>>> > >> have the
>>> > >> >>> "declarative DAS" configuration inside it.
>>> > >> >>>
>>> > >> >>> I was thinking on something like....
>>> > >> >>>
>>> > >> >>> SCDL Definition would look something like this :
>>> > >> >>>
>>> > >> >>> <component name="AccountDataService">
>>> > >> >>> <interface.java
>>> > >> >>> class="bigbank.account.services.account.AccountService"/>
>>> > >> >>> <implementation.das="dasConfig.properties"
>>> > >> >>> connection="java:comp/env/jdbc/bigbank"/>
>>> > >> >>> </component>
>>> > >> >>>
>>> > >> >>> The AccountService Interface would look like this (missing
>>> any
>>> > SCA
>>> > >> >>> annotations):
>>> > >> >>>
>>> > >> >>> public interface AccountService {
>>> > >> >>>
>>> > >> >>> public List getAllCustomers();
>>> > >> >>> public Object getCustomerAccount(String accountNumber);
>>> > >> >>> }
>>> > >> >>>
>>> > >> >>> The DAS config would look like this, and would have the
>>> > definition
>>> > >> >>> for the
>>> > >> >>> "all companies" command.
>>> > >> >>>
>>> > >> >>> <Config ...>
>>> > >> >>> ...
>>> > >> >>> <ConnectionInfo dataSource="java:comp/env/jdbc/bigbank"/>
>>> > >> >>>
>>> > >> >>> <Command name="getAllCustomers" SQL="select * from
>>> CUSTOMERS"
>>> > >> >>> kind="Select"/>
>>> > >> >>> <Command name="getCustomerAccount" SQL="SELECT
>>> accountNumber,
>>> > >> >>> accountType, balance FROM accounts where accountNumber = ?"
>>> > >> >>> kind="Select" />
>>> > >> >>> ...
>>> > >> >>> </Config>
>>> > >> >>>
>>> > >> >>>
>>> > >> >>> Mapping between interface methods and DAS Commands
>>> > >> >>> - If a DAS config file is provided, based on the
>>> > SCDL definition,
>>> > >> we
>>> > >> >>> would look for "DAS command" based on the name of the getter
>>> > >> >>> (e.ggetAllCustomers would map to getAllCustomers command)
>>> > >> >>> - Otherwise, we would try to do a map directly to a
>>> > >> stored procedure
>>> > >> >>> - We could also have a way to force the mapping by using
>>> > >> annotation
>>> > >> >>> ([EMAIL PROTECTED] on the method level)
>>> > >> >>>
>>> > >> >>> Mapping between method parameter and command parameter
>>> > >> >>> - We would need to define a method for mapping the method
>>> > >> >>> parameters to
>>> > >> >>> the query paramters either based on position ( e.g first
>>> method
>>> > >> >>> parameter
>>> > >> >>> maps to the first command paramter), or we would do some
>>> > mapping by
>>> > >> >>> name
>>> > >> >>> (currently not available in Tuscany DAS)
>>> > >> >>>
>>> > >> >>> Note:
>>> > >> >>> - A SCDL connection information would override the DAS
>>> Config
>>> > file
>>> > >> >>> connection information.
>>> > >> >>>
>>> > >> >>>
>>> > >> >>> Benefits
>>> > >> >>> - It's All about simplicity and easy of use
>>> > >> >>> - This would allow a user to define a service without
>>> having to
>>> >
>>> > >> >>> explicitly having to code any Data Access related code.
>>> > >> >>>
>>> > >> >>>
>>> > >> >>> Implementation approaches
>>> > >> >>> - Utilizing DAS : This approach would start from the
>>> current
>>> > >> >>> Tuscany DAS
>>> > >> >>> implementation, where functionality would be already
>>> > available, but
>>> > >> >>> the
>>> > >> >>> service implementation would be tied to SDO and RDB as this
>>> > is what
>>> > >> >>> DAS
>>> > >> >>> supports today.
>>> > >> >>>
>>> > >> >>> - Start simple and grow : We could start simple, by
>>> having a
>>> > >> simple
>>> > >> >>> implementation based on JDBC and would return some simple
>>> > >> >>> collection as a
>>> > >> >>> return type (e.g List or a even a Recordset), this could
>>> give us
>>> > a
>>> > >> >>> quick
>>> > >> >>> start to flush implementation details and get a proven
>>> design,
>>> > and
>>> > >> >>> this
>>> > >> >>> could get evolved to use a DAS that would support multiple
>>> > backends
>>> > >> >>> (e.gRDB, XML, etc) and would create SDO as well as non- SDO
>>> types
>>> > >> as a
>>> > >> >>> command
>>> > >> >>> result.
>>> > >> >>>
>>> > >> >>>
>>> > >> >>> Toughts ?
>>> > >> >>>
>>> > >> >>> - Luciano
>>> > >> >>>
>>> > >> >>>
>>> > >> >>>
>>> > >> >>> On 10/4/06, Kevin Williams <[EMAIL PROTECTED]> wrote:
>>> > >> >>>
>>> > >> >>>>
>>> > >> >>>> Great. I would like to help with this. I have been
>>> thinking
>>> > for
>>> > >> >>>> awhile
>>> > >> >>>> about how to best integrate the RDB DAS within SCA. For
>>> > >> example, the
>>> > >> >>>> current BBank scenario uses the RDB DAS as a utility but it
>>> > >> would be
>>> > >> >>>> nice if it could "wire in" a RDB DAS service or be
>>> injected with
>>> > a
>>> > >> >>>> configured DAS. Another thing we want to eventually
>>> explore is
>>> > >> >>>> exposing
>>> > >> >>>> a DAS as REST-oriented services. As we have seen from the
>>> > parent
>>> > >> >>>> thread
>>> > >> >>>> there are almost too many possible approaches.
>>> > >> >>>>
>>> > >> >>>> My first thought is to model the DAS as a service and
>>> create a
>>> > new
>>> > >> >>>> implementation kind (implementation.rdbdas). The main
>>> reason
>>> > has
>>> > >> >>>> to do
>>> > >> >>>> with the potential declarative aspect of DAS that
>>> > Jeremy mentioned
>>> > >> >>>> which
>>> > >> >>>> is all about creating data access services
>>> declaratively. A new
>>> > >> >>>> component type and a service that we build by hand would be
>>> > a good
>>> > >> >>>> step
>>> > >> >>>> in this direction.
>>> > >> >>>>
>>> > >> >>>> We might want to expose a DAS service with an
interface like
>>> > this:
>>> > >> >>>>
>>> > >> >>>> public interface RDBDASService
>>> > >> >>>> void applyChanges(DataObject graphRoot);
>>> > >> >>>> DataObject execute(String commandName);
>>> > >> >>>> DataObject executeSQL(String abitrarySQL);
>>> > >> >>>> }
>>> > >> >>>>
>>> > >> >>>> The service would be initialized with an optional RDB DAS
>>> > >> config file
>>> > >> >>>> that defines connection properties, a set of commands,
>>> etc. So,
>>> > >> >>>> different services implementing the same interface could be
>>> > >> >>>> initialized
>>> > >> >>>> from separate config files.
>>> > >> >>>>
>>> > >> >>>> Eventually, we might want to build services like this:
>>> > >> >>>>
>>> > >> >>>> public interface Customers_RDBDASService
>>> > >> >>>> void applyChanges(DataObject graphRoot);
>>> > >> >>>> DataObject getAllCustomersWithLastName (String
>>> > lastName);
>>> > >> >>>> DataObject getAll CustomersAndOrdersForID (int
>>> > customerId);
>>> > >> >>>> }
>>> > >> >>>>
>>> > >> >>>> But, for this to be very useful would probably require
>>> some code
>>> > >> >>>> generation tooling.
>>> > >> >>>>
>>> > >> >>>> Thoughts?
>>> > >> >>>>
>>> > >> >>>> --Kevin
>>> > >> >>>>
>>> > >> >>>>
>>> > >> >>>> Luciano Resende wrote:
>>> > >> >>>>
>>> > >> >>>> > I'm starting to look in ways we could have a declarative
>>> > DAS and
>>> > >> >>>> will be
>>> > >> >>>> > posting my progress into the list / wiki soon...
>>> > >> >>>> >
>>> > >> >>>> > - Luciano
>>> > >> >>>> >
>>> > >> >>>> > On 10/3/06, Jeremy Boynes <[EMAIL PROTECTED] > wrote:
>>> > >> >>>> >
>>> > >> >>>> >>
>>> > >> >>>> >> On Oct 3, 2006, at 5:26 PM, Jim Marino wrote:
>>> > >> >>>> >> >> This sounds like having cake, eating it, and also
>>> > being able
>>> > >> to
>>> > >> >>>> >> >> give it to a friend :-) We provide the
flexibility for
>>> > users:
>>> > >> >>>> >> >> 1) to access infrastructure services through
>>> properties
>>> > >> >>>> >> > Yes for things like JPA, JDBC, etc.
>>> > >> >>>> >> >> 2) to reference infrastructure services through
>>> > inclusion in
>>> > >> >>>> their
>>> > >> >>>> >> >> assembly
>>> > >> >>>> >> > If we do 1 I don't think we should do 2 (that
>>> doesn't stop
>>> > >> >>>> someone
>>> > >> >>>> >> > from extending Tuscany to do it though). See my
>>> comments
>>> > >> below.
>>> > >> >>>> >>
>>> > >> >>>> >> "Thanks for volunteering" :-)
>>> > >> >>>> >> If someone wants to contribute these, I think we
>>> > should welcome
>>> > >> it
>>> > >> >>>> >> like we would any other contribution.
>>> > >> >>>> >>
>>> > >> >>>> >> >> 3) to access data through an application service with
>>> > >> >>>> declarative
>>> > >> >>>> >> >> implementation by DAS
>>> > >> >>>> >> > Yes, that's the value I see in DAS
>>> > >> >>>> >>
>>> > >> >>>> >> I think this is already on the DAS folks radar.
>>> > >> >>>> >> --
>>> > >> >>>> >> Jeremy
>>> > >> >>>> >>
>>> > >> >>>> >>
>>> > >> >>>>
>>> > >>
>>> --------------------------------------------------------------------
>>> > >> -
>>> > >> >>>> >> To unsubscribe, e-mail: tuscany-dev-
>>> [EMAIL PROTECTED]
>>> > >> >>>> >> For additional commands, e-mail:
>>> > [EMAIL PROTECTED]
>>> > >> >>>> >>
>>> > >> >>>> >>
>>> > >> >>>> >
>>> > >> >>>>
>>> > >> >>>>
>>> > >> >>>>
>>> > >> >>>>
>>> > >>
>>> --------------------------------------------------------------------
>>> > >> -
>>> > >> >>>> To unsubscribe, e-mail: tuscany-dev-
>>> [EMAIL PROTECTED]
>>> > >> >>>> For additional commands, e-mail: tuscany-dev-
>>> [EMAIL PROTECTED]
>>> > >> >>>>
>>> > >> >>>>
>>> > >> >>>
>>> > >> >>
>>> > >> >>
>>> > >> >>
>>> > >> >>
>>> >
>>> ---------------------------------------------------------------------
>>> > >> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> > >> >> For additional commands, e-mail: tuscany-dev-
>>> [EMAIL PROTECTED]
>>> > >> >>
>>> > >> >
>>> > >> >
>>> > >> >
>>> >
>>> ---------------------------------------------------------------------
>>> > >> > To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> > >> > For additional commands, e-mail: tuscany-dev-
[EMAIL PROTECTED]
>>> > >> >
>>> > >> >
>>> > >> >
>>> > >> >
>>> > >>
>>> > >>
>>> > >>
>>> > >>
>>> ---------------------------------------------------------------------
>>> > >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> > >> For additional commands, e-mail: [EMAIL PROTECTED]
>>> > >>
>>> > >>
>>> > >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> ---------------------------------------------------------------------
>>> > To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> > For additional commands, e-mail: [EMAIL PROTECTED]
>>> >
>>> >
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]