[Geoserver-devel] GSIP 45 - Moving GeoServer model in a standalone module

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

  At the moment, when an external app needs to exchange data with a GeoServer
  instance (e.g.: via REST or by accessing a DB-based catalog), it has to
  re-define its own set of beans representing Stores, Resources, Styles and so
  on.

  It could be extremely handy if external applications could use the very same
  *Info beans used by GeoServer (both interfaces and related implementations).

  In the present architecture this cannot be accomplished without importing in
  the external app all the catalog logic, that is useless outside a complete
  GeoServer instance.

  All in all, this refactoring will make clear the boundaries of metadata
  objects, making the creation of modules for marshalling/umarshalling them
  much simpler.

   Ciao,
   Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

I have stated my feedback to this proposal before but I will reiterate here for the sake of public discussion.

In general I am against this idea. I understand that from an architectural stand point it makes things cleaner, but practically I think it has more cons than pros.

For instance, this proposal requires that all "data access" methods:

FeatureTypeInfo.getFeatureType()
DataStoreInfo.getDataStore()
...

Be removed outright from the catalog classes. This has multiple downsides:

1) It requires a massive update to the geoserver code base
2) It makes interacting with the catalog more difficult

For (2) it means that one has to instead of :

featureTypeInfo.getFeatureType()

now have to:

Catalog catalog = ...
catalog.getResourcePool().getFeatureType(featureType)

The new way of access requires one to maintain a reference to the catalog or the resource pool (which in some cases might be unavailable) and it also makes resource pool part of the primary api when it should really be an implementation detail imo.

One of the motivations for the proposal is that it makes backing the catalog onto hibernate easier. I am not sure I see this. Every data access method on a bean just forwards to catalog.getResourcePool(). So all is required is that whatever is unmarshaling the catalog objects have a way to set a reference to the catalog on beans. Which I don't see as an overly burdensome requirement.

The other is to allow external applications to have a geoserver model of the catalog. Which yes would make it easier. But the only hypothetical use case presented is for a java REST configuration client, for which one has already been implemented in community.

Apologies for coming across as so negative, it is just my opinion that the potential benefits do not out weight the potential downsides. I could be convinced otherwise but I think the proposal requires some more concrete examples of where the current architecture does not work. But that said I am not PSC so I can't vote -1, but as someone who is "close" to the catalog api I thought I should voice my opinion.

-Justin

On 2/25/10 7:41 AM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

   At the moment, when an external app needs to exchange data with a GeoServer
   instance (e.g.: via REST or by accessing a DB-based catalog), it has to
   re-define its own set of beans representing Stores, Resources, Styles and so
   on.

   It could be extremely handy if external applications could use the very same
   *Info beans used by GeoServer (both interfaces and related implementations).

   In the present architecture this cannot be accomplished without importing in
   the external app all the catalog logic, that is useless outside a complete
   GeoServer instance.

   All in all, this refactoring will make clear the boundaries of metadata
   objects, making the creation of modules for marshalling/umarshalling them
   much simpler.

    Ciao,
    Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

Thinking more about this, we could have a way to have the best of both worlds. We can factor out the base model which totally uncouples any data loading operations from the object model.

And then in geoserver main continue to maintain interfaces that extend the base model and add the specific methods for loading data. That would keep everything backwards compatible and prevent the need for a mass change.

-Justin

On 2/25/10 9:05 AM, Justin Deoliveira wrote:

I have stated my feedback to this proposal before but I will reiterate
here for the sake of public discussion.

In general I am against this idea. I understand that from an
architectural stand point it makes things cleaner, but practically I
think it has more cons than pros.

For instance, this proposal requires that all "data access" methods:

FeatureTypeInfo.getFeatureType()
DataStoreInfo.getDataStore()
...

Be removed outright from the catalog classes. This has multiple downsides:

1) It requires a massive update to the geoserver code base
2) It makes interacting with the catalog more difficult

For (2) it means that one has to instead of :

featureTypeInfo.getFeatureType()

now have to:

Catalog catalog = ...
catalog.getResourcePool().getFeatureType(featureType)

The new way of access requires one to maintain a reference to the
catalog or the resource pool (which in some cases might be unavailable)
and it also makes resource pool part of the primary api when it should
really be an implementation detail imo.

One of the motivations for the proposal is that it makes backing the
catalog onto hibernate easier. I am not sure I see this. Every data
access method on a bean just forwards to catalog.getResourcePool(). So
all is required is that whatever is unmarshaling the catalog objects
have a way to set a reference to the catalog on beans. Which I don't see
as an overly burdensome requirement.

The other is to allow external applications to have a geoserver model of
the catalog. Which yes would make it easier. But the only hypothetical
use case presented is for a java REST configuration client, for which
one has already been implemented in community.

Apologies for coming across as so negative, it is just my opinion that
the potential benefits do not out weight the potential downsides. I
could be convinced otherwise but I think the proposal requires some more
concrete examples of where the current architecture does not work. But
that said I am not PSC so I can't vote -1, but as someone who is "close"
to the catalog api I thought I should voice my opinion.

-Justin

On 2/25/10 7:41 AM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

    At the moment, when an external app needs to exchange data with a GeoServer
    instance (e.g.: via REST or by accessing a DB-based catalog), it has to
    re-define its own set of beans representing Stores, Resources, Styles and so
    on.

    It could be extremely handy if external applications could use the very same
    *Info beans used by GeoServer (both interfaces and related implementations).

    In the present architecture this cannot be accomplished without importing in
    the external app all the catalog logic, that is useless outside a complete
    GeoServer instance.

    All in all, this refactoring will make clear the boundaries of metadata
    objects, making the creation of modules for marshalling/umarshalling them
    much simpler.

     Ciao,
     Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

Hi,
just to chip in with my 2 cents.

To start with, I totally agree that:
1- *Info objects should be decoupled from the "data" objects.
2- ResourcePool should be an implementation detail

So no catalog.getResourcePool().getFeatureType(typeInfo), but catalog.getFeatureType(featureType). Remove the Catalog.getResourcePool() method.

But, in order for such a patch to be acceptable, it should be a _straight_ refactoring, meaning absolutely no change in behavior other than replacing the typeInfo.getFeatureType() by catalog.getFeatureType(typeInfo) kind of calls.

My 2c.

Gabriel

On 2/25/10 9:05 AM, Justin Deoliveira wrote:

I have stated my feedback to this proposal before but I will reiterate
here for the sake of public discussion.

In general I am against this idea. I understand that from an
architectural stand point it makes things cleaner, but practically I
think it has more cons than pros.

For instance, this proposal requires that all "data access" methods:

FeatureTypeInfo.getFeatureType()
DataStoreInfo.getDataStore()
...

Be removed outright from the catalog classes. This has multiple downsides:

1) It requires a massive update to the geoserver code base
2) It makes interacting with the catalog more difficult

For (2) it means that one has to instead of :

featureTypeInfo.getFeatureType()

now have to:

Catalog catalog = ...
catalog.getResourcePool().getFeatureType(featureType)

The new way of access requires one to maintain a reference to the
catalog or the resource pool (which in some cases might be unavailable)
and it also makes resource pool part of the primary api when it should
really be an implementation detail imo.

One of the motivations for the proposal is that it makes backing the
catalog onto hibernate easier. I am not sure I see this. Every data
access method on a bean just forwards to catalog.getResourcePool(). So
all is required is that whatever is unmarshaling the catalog objects
have a way to set a reference to the catalog on beans. Which I don't see
as an overly burdensome requirement.

The other is to allow external applications to have a geoserver model of
the catalog. Which yes would make it easier. But the only hypothetical
use case presented is for a java REST configuration client, for which
one has already been implemented in community.

Apologies for coming across as so negative, it is just my opinion that
the potential benefits do not out weight the potential downsides. I
could be convinced otherwise but I think the proposal requires some more
concrete examples of where the current architecture does not work. But
that said I am not PSC so I can't vote -1, but as someone who is "close"
to the catalog api I thought I should voice my opinion.

-Justin

On 2/25/10 7:41 AM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

    At the moment, when an external app needs to exchange data with a GeoServer
    instance (e.g.: via REST or by accessing a DB-based catalog), it has to
    re-define its own set of beans representing Stores, Resources, Styles and so
    on.

    It could be extremely handy if external applications could use the very same
    *Info beans used by GeoServer (both interfaces and related implementations).

    In the present architecture this cannot be accomplished without importing in
    the external app all the catalog logic, that is useless outside a complete
    GeoServer instance.

    All in all, this refactoring will make clear the boundaries of metadata
    objects, making the creation of modules for marshalling/umarshalling them
    much simpler.

     Ciao,
     Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Gabriel Roldan
OpenGeo - http://opengeo.org
Expert service straight from the developers.

I'm having a little trouble with this proposal. It does state its motivation, but it's not terribly concrete. Can you fill this out with some more specific examples of what's being held back here, for those of us that aren't close to the catalogue, or have Justin's comments exhausted those?

Mark Leslie
Geospatial Software Architect
LISAsoft

-------------------------------------------------------------
Ph: +61 2 8570 5000 Fax: +61 2 8570 5099 Mob: +61
Suite 112, Jones Bay Wharf 19-21 Pirrama Rd Pyrmont NSW 2009
-------------------------------------------------------------

LISAsoft is part of the A2end Group of Companies
http://www.ardec.com.au
http://www.lisasoft.com
http://www.terrapages.com

Justin Deoliveira wrote:

I have stated my feedback to this proposal before but I will reiterate here for the sake of public discussion.

In general I am against this idea. I understand that from an architectural stand point it makes things cleaner, but practically I think it has more cons than pros.

For instance, this proposal requires that all "data access" methods:

FeatureTypeInfo.getFeatureType()
DataStoreInfo.getDataStore()
...

Be removed outright from the catalog classes. This has multiple downsides:

1) It requires a massive update to the geoserver code base
2) It makes interacting with the catalog more difficult

For (2) it means that one has to instead of :

featureTypeInfo.getFeatureType()

now have to:

Catalog catalog = ...
catalog.getResourcePool().getFeatureType(featureType)

The new way of access requires one to maintain a reference to the catalog or the resource pool (which in some cases might be unavailable) and it also makes resource pool part of the primary api when it should really be an implementation detail imo.

One of the motivations for the proposal is that it makes backing the catalog onto hibernate easier. I am not sure I see this. Every data access method on a bean just forwards to catalog.getResourcePool(). So all is required is that whatever is unmarshaling the catalog objects have a way to set a reference to the catalog on beans. Which I don't see as an overly burdensome requirement.

The other is to allow external applications to have a geoserver model of the catalog. Which yes would make it easier. But the only hypothetical use case presented is for a java REST configuration client, for which one has already been implemented in community.

Apologies for coming across as so negative, it is just my opinion that the potential benefits do not out weight the potential downsides. I could be convinced otherwise but I think the proposal requires some more concrete examples of where the current architecture does not work. But that said I am not PSC so I can't vote -1, but as someone who is "close" to the catalog api I thought I should voice my opinion.

-Justin

On 2/25/10 7:41 AM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

   At the moment, when an external app needs to exchange data with a GeoServer
   instance (e.g.: via REST or by accessing a DB-based catalog), it has to
   re-define its own set of beans representing Stores, Resources, Styles and so
   on.

   It could be extremely handy if external applications could use the very same
   *Info beans used by GeoServer (both interfaces and related implementations).

   In the present architecture this cannot be accomplished without importing in
   the external app all the catalog logic, that is useless outside a complete
   GeoServer instance.

   All in all, this refactoring will make clear the boundaries of metadata
   objects, making the creation of modules for marshalling/umarshalling them
   much simpler.

    Ciao,
    Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Catching up ... I share justin's frustration on this one (seen the catalog api too many times!).

One possible avenue forward would be to pull out a super class;

FeatureTypeInfo extends FeatureTypeMetadata ....

That way you are not stuck removing setCatalog / getCatalog and other methods justin needs to make the catalog go? However I am not sure that helps you with your need.

Can you please clarify the purpose; are you really just wanting a "data transfer object" to send back and forth? ie you would like to send java beans back and forth between the applications?

Jody

On 25/02/2010, at 11:41 PM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

At the moment, when an external app needs to exchange data with a GeoServer
instance (e.g.: via REST or by accessing a DB-based catalog), it has to
re-define its own set of beans representing Stores, Resources, Styles and so
on.

It could be extremely handy if external applications could use the very same
*Info beans used by GeoServer (both interfaces and related implementations).

In the present architecture this cannot be accomplished without importing in
the external app all the catalog logic, that is useless outside a complete
GeoServer instance.

All in all, this refactoring will make clear the boundaries of metadata
objects, making the creation of modules for marshalling/umarshalling them
much simpler.

  Ciao,
  Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Emanuele Tajariol ha scritto:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

I more or less share the same concerns as others:
- ResourcePool should not become the primary way to get a feature source
   or grid coverage reader
- getting resources via catalog is a better one, creating super-interfaces and superclasses seems to work even better though
I understand is more work
- a better explanation on why this is necessary (as opposed to
desirable) would be nice

Btw, there is a java based rest configuration client in the
trunk community, but in fact it does not use the GS beans,
a new set of beans was created that has JAXP annotations
and Jersey (just yesterday someone on IRC was asking
about Jersey and GS REST and I answered I could not help,
just noticed now that the provided config client is built on it):
http://svn.codehaus.org/geoserver/trunk/src/community/restconfig-java/src/main/java/org/geoserver/rest/client/datatypes

Cheers
Andrea

--
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.

Andrea Aime ha scritto:

Btw, there is a java based rest configuration client in the
trunk community, but in fact it does not use the GS beans,
a new set of beans was created that has JAXP annotations
and Jersey (just yesterday someone on IRC was asking
about Jersey and GS REST and I answered I could not help,
just noticed now that the provided config client is built on it):
http://svn.codehaus.org/geoserver/trunk/src/community/restconfig-java/src/main/java/org/geoserver/rest/client/datatypes

Sorry I forgot the take home message: they could not use
our classes because, I guess, it's not possible to
add annotations there.

But I don't see anything
preventing the usage of our current interfaces and
just throwing a runtime exception from the
methods that return resources.
Though of course not having to do so would be better.
The idea of super-interfaces that don't allow access to
the resources and the catalog would be a nice
fit for this use case.

Cheers
Andrea

PS: a java client could be better off by reusing our
implementation as well as the XStream persisters
and so on, less risk of getting out of synch with
what GS does, but that's another story

--
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.

Hi all,

Thinking more about this, we could have a way to have the best of both
worlds. We can factor out the base model which totally uncouples any
data loading operations from the object model.

I really like this solution, because it solves the basic problem the GSIP was
created for, while avoiding the massive updates in geoserver code.
I can look into this to find out for its feasibility (hope we won't have any
multiple inheritance probs here).

   Ciao,
   Emanuele

Alle 21:56:36 di giovedì 25 febbraio 2010, Justin Deoliveira ha scritto:

Thinking more about this, we could have a way to have the best of both
worlds. We can factor out the base model which totally uncouples any
data loading operations from the object model.

And then in geoserver main continue to maintain interfaces that extend
the base model and add the specific methods for loading data. That would
keep everything backwards compatible and prevent the need for a mass
change.

-Justin

On 2/25/10 9:05 AM, Justin Deoliveira wrote:
> I have stated my feedback to this proposal before but I will reiterate
> here for the sake of public discussion.
>
> In general I am against this idea. I understand that from an
> architectural stand point it makes things cleaner, but practically I
> think it has more cons than pros.
>
> For instance, this proposal requires that all "data access" methods:
>
> FeatureTypeInfo.getFeatureType()
> DataStoreInfo.getDataStore()
> ...
>
> Be removed outright from the catalog classes. This has multiple
> downsides:
>
> 1) It requires a massive update to the geoserver code base
> 2) It makes interacting with the catalog more difficult
>
> For (2) it means that one has to instead of :
>
> featureTypeInfo.getFeatureType()
>
> now have to:
>
> Catalog catalog = ...
> catalog.getResourcePool().getFeatureType(featureType)
>
> The new way of access requires one to maintain a reference to the
> catalog or the resource pool (which in some cases might be unavailable)
> and it also makes resource pool part of the primary api when it should
> really be an implementation detail imo.
>
> One of the motivations for the proposal is that it makes backing the
> catalog onto hibernate easier. I am not sure I see this. Every data
> access method on a bean just forwards to catalog.getResourcePool(). So
> all is required is that whatever is unmarshaling the catalog objects
> have a way to set a reference to the catalog on beans. Which I don't see
> as an overly burdensome requirement.
>
> The other is to allow external applications to have a geoserver model of
> the catalog. Which yes would make it easier. But the only hypothetical
> use case presented is for a java REST configuration client, for which
> one has already been implemented in community.
>
> Apologies for coming across as so negative, it is just my opinion that
> the potential benefits do not out weight the potential downsides. I
> could be convinced otherwise but I think the proposal requires some more
> concrete examples of where the current architecture does not work. But
> that said I am not PSC so I can't vote -1, but as someone who is "close"
> to the catalog api I thought I should voice my opinion.
>
> -Justin
>
> On 2/25/10 7:41 AM, Emanuele Tajariol wrote:
>> Hi all,
>>
>> I created a GSIP about a refactorization of the catalog beans.
>> You can find it at
>> http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+
>>standalone+module
>>
>> Here's a little excerpt from the proposal:
>> ==============================
>> At the moment, when an external app needs to exchange data with a
>> GeoServer instance (e.g.: via REST or by accessing a DB-based catalog),
>> it has to re-define its own set of beans representing Stores, Resources,
>> Styles and so on.
>>
>> It could be extremely handy if external applications could use the
>> very same *Info beans used by GeoServer (both interfaces and related
>> implementations).
>>
>> In the present architecture this cannot be accomplished without
>> importing in the external app all the catalog logic, that is useless
>> outside a complete GeoServer instance.
>>
>> All in all, this refactoring will make clear the boundaries of
>> metadata objects, making the creation of modules for
>> marshalling/umarshalling them much simpler.
>> ==============================
>>
>> Ciao,
>> Emanuele
>>
>>
>> -------------------------------------------------------
>> Ing. Emanuele Tajariol
>>
>> GeoSolutions S.A.S.
>> Via Carignoni 51
>> 55041 Camaiore (LU)
>> Italy
>>
>> phone: +39 0584983027
>> fax: +39 0584983027
>>
>> http://www.geo-solutions.it
>> http://geo-solutions.blogspot.com
>> -------------------------------------------------------
>>
>> ------------------------------------------------------------------------
>>------ Download Intel® Parallel Studio Eval
>> Try the new software tools for yourself. Speed compiling, find bugs
>> proactively, and fine-tune applications for parallel performance.
>> See why Intel Parallel Studio got high marks during beta.
>> http://p.sf.net/sfu/intel-sw-dev
>> _______________________________________________
>> Geoserver-devel mailing list
>> Geoserver-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

Ciao Gabriel,

with the contro-proposal from Justin, I'd say we're on the right track, but,
for the sake of discussion, I'll comment a bit here :slight_smile:

To start with, I totally agree that:
1- *Info objects should be decoupled from the "data" objects.
2- ResourcePool should be an implementation detail

That's perfect.

So no catalog.getResourcePool().getFeatureType(typeInfo), but
catalog.getFeatureType(featureType). Remove the
Catalog.getResourcePool() method.

Please note that in the GSIP there is no proposed code like:
   catalog.getResourcePool()
It was only a code example in Justin first reply.

The proposed code looks like this:
   ResourceLoader resourceLoader = ...
   FeatureTypeInfo fti = catalog.getFeatureType(...);
   FeatureType ft = resourceLoader.load(fti);

In the same way a Catalog provides access to *Info instances, a (let's call
it) ResourceLoader should provide access to "data" objects. I fully agree
that the ResourcePool should be an implementation detail,
but the data-loading interface should be exposed, and it would be something
really similar to the set of methods you'd add to the catalog:

   FeatureType getFeatureType(FeatureTypeInfo info);
   Coverage getCoverage(CoverageInfo info);
   Style getStyle(StyleInfo info);
   ...

We may implement such interface in the CatalogImpl class as you suggest, but
it may live its own life as a standalone class. In our case, the ResourcePool
is in fact implementing it, but this fact *is* an implementation detail.

But, in order for such a patch to be acceptable, it should be a
_straight_ refactoring, meaning absolutely no change in behavior other
than replacing the typeInfo.getFeatureType() by
catalog.getFeatureType(typeInfo) kind of calls.

Yep, sort of. I'd say, "replacing the typeInfo.getFeatureType() by
loader.getFeatureType(typeInfo)". But I got the idea :slight_smile:

That said, let me state clearly I am not proposing this refact now, since the
solution Justin (and then Jody) proposed seems just fine and requires a lot
less effort.

My 2c.

Thank you :slight_smile:

   Ciao,
   Emanuele

On 2/25/10 9:05 AM, Justin Deoliveira wrote:
> I have stated my feedback to this proposal before but I will reiterate
> here for the sake of public discussion.
>
> In general I am against this idea. I understand that from an
> architectural stand point it makes things cleaner, but practically I
> think it has more cons than pros.
>
> For instance, this proposal requires that all "data access" methods:
>
> FeatureTypeInfo.getFeatureType()
> DataStoreInfo.getDataStore()
> ...
>
> Be removed outright from the catalog classes. This has multiple
> downsides:
>
> 1) It requires a massive update to the geoserver code base
> 2) It makes interacting with the catalog more difficult
>
> For (2) it means that one has to instead of :
>
> featureTypeInfo.getFeatureType()
>
> now have to:
>
> Catalog catalog = ...
> catalog.getResourcePool().getFeatureType(featureType)
>
> The new way of access requires one to maintain a reference to the
> catalog or the resource pool (which in some cases might be unavailable)
> and it also makes resource pool part of the primary api when it should
> really be an implementation detail imo.
>
> One of the motivations for the proposal is that it makes backing the
> catalog onto hibernate easier. I am not sure I see this. Every data
> access method on a bean just forwards to catalog.getResourcePool(). So
> all is required is that whatever is unmarshaling the catalog objects
> have a way to set a reference to the catalog on beans. Which I don't see
> as an overly burdensome requirement.
>
> The other is to allow external applications to have a geoserver model of
> the catalog. Which yes would make it easier. But the only hypothetical
> use case presented is for a java REST configuration client, for which
> one has already been implemented in community.
>
> Apologies for coming across as so negative, it is just my opinion that
> the potential benefits do not out weight the potential downsides. I
> could be convinced otherwise but I think the proposal requires some more
> concrete examples of where the current architecture does not work. But
> that said I am not PSC so I can't vote -1, but as someone who is "close"
> to the catalog api I thought I should voice my opinion.
>
> -Justin
>
> On 2/25/10 7:41 AM, Emanuele Tajariol wrote:
>> Hi all,
>>
>> I created a GSIP about a refactorization of the catalog beans.
>> You can find it at
>> http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+
>>standalone+module
>>
>> Here's a little excerpt from the proposal:
>> ==============================
>> At the moment, when an external app needs to exchange data with a
>> GeoServer instance (e.g.: via REST or by accessing a DB-based catalog),
>> it has to re-define its own set of beans representing Stores, Resources,
>> Styles and so on.
>>
>> It could be extremely handy if external applications could use the
>> very same *Info beans used by GeoServer (both interfaces and related
>> implementations).
>>
>> In the present architecture this cannot be accomplished without
>> importing in the external app all the catalog logic, that is useless
>> outside a complete GeoServer instance.
>>
>> All in all, this refactoring will make clear the boundaries of
>> metadata objects, making the creation of modules for
>> marshalling/umarshalling them much simpler.
>> ==============================
>>
>> Ciao,
>> Emanuele
>>
>>

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

On 3/2/10 12:51 PM, Emanuele Tajariol wrote:

Hi all,

Thinking more about this, we could have a way to have the best of both
worlds. We can factor out the base model which totally uncouples any
data loading operations from the object model.

I really like this solution, because it solves the basic problem the GSIP was
created for, while avoiding the massive updates in geoserver code.
I can look into this to find out for its feasibility (hope we won't have any
multiple inheritance probs here).

I don't think there should be any. Another thing is that it would be nice to use the "I" naming convention to avoid having to come up with inconvenient class names. For instance in the factored out model we name interfaces and classes:

IResourceInfo
IResourceInfoImpl

Andc in GeoServer retain the classes:

ResourceInfo extends IResourceInfo
ResourceInfoImpo extends IResourceInfoImpl implements ResourceInfo

etc...

That way we can retain the package structure org.geoserver.catalog in both cases.

-Justin

    Ciao,
    Emanuele

Alle 21:56:36 di giovedì 25 febbraio 2010, Justin Deoliveira ha scritto:

Thinking more about this, we could have a way to have the best of both
worlds. We can factor out the base model which totally uncouples any
data loading operations from the object model.

And then in geoserver main continue to maintain interfaces that extend
the base model and add the specific methods for loading data. That would
keep everything backwards compatible and prevent the need for a mass
change.

-Justin

On 2/25/10 9:05 AM, Justin Deoliveira wrote:

I have stated my feedback to this proposal before but I will reiterate
here for the sake of public discussion.

In general I am against this idea. I understand that from an
architectural stand point it makes things cleaner, but practically I
think it has more cons than pros.

For instance, this proposal requires that all "data access" methods:

FeatureTypeInfo.getFeatureType()
DataStoreInfo.getDataStore()
...

Be removed outright from the catalog classes. This has multiple
downsides:

1) It requires a massive update to the geoserver code base
2) It makes interacting with the catalog more difficult

For (2) it means that one has to instead of :

featureTypeInfo.getFeatureType()

now have to:

Catalog catalog = ...
catalog.getResourcePool().getFeatureType(featureType)

The new way of access requires one to maintain a reference to the
catalog or the resource pool (which in some cases might be unavailable)
and it also makes resource pool part of the primary api when it should
really be an implementation detail imo.

One of the motivations for the proposal is that it makes backing the
catalog onto hibernate easier. I am not sure I see this. Every data
access method on a bean just forwards to catalog.getResourcePool(). So
all is required is that whatever is unmarshaling the catalog objects
have a way to set a reference to the catalog on beans. Which I don't see
as an overly burdensome requirement.

The other is to allow external applications to have a geoserver model of
the catalog. Which yes would make it easier. But the only hypothetical
use case presented is for a java REST configuration client, for which
one has already been implemented in community.

Apologies for coming across as so negative, it is just my opinion that
the potential benefits do not out weight the potential downsides. I
could be convinced otherwise but I think the proposal requires some more
concrete examples of where the current architecture does not work. But
that said I am not PSC so I can't vote -1, but as someone who is "close"
to the catalog api I thought I should voice my opinion.

-Justin

On 2/25/10 7:41 AM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+
standalone+module

Here's a little excerpt from the proposal:

     At the moment, when an external app needs to exchange data with a
GeoServer instance (e.g.: via REST or by accessing a DB-based catalog),
it has to re-define its own set of beans representing Stores, Resources,
Styles and so on.

     It could be extremely handy if external applications could use the
very same *Info beans used by GeoServer (both interfaces and related
implementations).

     In the present architecture this cannot be accomplished without
importing in the external app all the catalog logic, that is useless
outside a complete GeoServer instance.

     All in all, this refactoring will make clear the boundaries of
metadata objects, making the creation of modules for
marshalling/umarshalling them much simpler.

      Ciao,
      Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------
------ Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

On 2/26/10 4:49 PM, Gabriel Roldan wrote:

Hi,
just to chip in with my 2 cents.

To start with, I totally agree that:
1- *Info objects should be decoupled from the "data" objects.
2- ResourcePool should be an implementation detail

So no catalog.getResourcePool().getFeatureType(typeInfo), but
catalog.getFeatureType(featureType). Remove the
Catalog.getResourcePool() method.

But, in order for such a patch to be acceptable, it should be a
_straight_ refactoring, meaning absolutely no change in behavior other
than replacing the typeInfo.getFeatureType() by
catalog.getFeatureType(typeInfo) kind of calls.

My 2c.

Gabriel

On 2/25/10 9:05 AM, Justin Deoliveira wrote:

I have stated my feedback to this proposal before but I will reiterate
here for the sake of public discussion.

In general I am against this idea. I understand that from an
architectural stand point it makes things cleaner, but practically I
think it has more cons than pros.

For instance, this proposal requires that all "data access" methods:

FeatureTypeInfo.getFeatureType()
DataStoreInfo.getDataStore()
...

Be removed outright from the catalog classes. This has multiple downsides:

1) It requires a massive update to the geoserver code base
2) It makes interacting with the catalog more difficult

For (2) it means that one has to instead of :

featureTypeInfo.getFeatureType()

now have to:

Catalog catalog = ...
catalog.getResourcePool().getFeatureType(featureType)

The new way of access requires one to maintain a reference to the
catalog or the resource pool (which in some cases might be unavailable)
and it also makes resource pool part of the primary api when it should
really be an implementation detail imo.

One of the motivations for the proposal is that it makes backing the
catalog onto hibernate easier. I am not sure I see this. Every data
access method on a bean just forwards to catalog.getResourcePool(). So
all is required is that whatever is unmarshaling the catalog objects
have a way to set a reference to the catalog on beans. Which I don't see
as an overly burdensome requirement.

The other is to allow external applications to have a geoserver model of
the catalog. Which yes would make it easier. But the only hypothetical
use case presented is for a java REST configuration client, for which
one has already been implemented in community.

Apologies for coming across as so negative, it is just my opinion that
the potential benefits do not out weight the potential downsides. I
could be convinced otherwise but I think the proposal requires some more
concrete examples of where the current architecture does not work. But
that said I am not PSC so I can't vote -1, but as someone who is "close"
to the catalog api I thought I should voice my opinion.

-Justin

On 2/25/10 7:41 AM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

     At the moment, when an external app needs to exchange data with a GeoServer
     instance (e.g.: via REST or by accessing a DB-based catalog), it has to
     re-define its own set of beans representing Stores, Resources, Styles and so
     on.

     It could be extremely handy if external applications could use the very same
     *Info beans used by GeoServer (both interfaces and related implementations).

     In the present architecture this cannot be accomplished without importing in
     the external app all the catalog logic, that is useless outside a complete
     GeoServer instance.

     All in all, this refactoring will make clear the boundaries of metadata
     objects, making the creation of modules for marshalling/umarshalling them
     much simpler.

      Ciao,
      Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

I do like the idea of perhaps moving the "I/O" methods to Catalog. But I would handle this as as a subsequent step. First do the pure refactoring, then improve the interface. I fear mixing the two will inevitably lead to behavior changes which will lead to regressions.

2c.

-Justin

On 2/26/10 4:49 PM, Gabriel Roldan wrote:

Hi,
just to chip in with my 2 cents.

To start with, I totally agree that:
1- *Info objects should be decoupled from the "data" objects.
2- ResourcePool should be an implementation detail

So no catalog.getResourcePool().getFeatureType(typeInfo), but
catalog.getFeatureType(featureType). Remove the
Catalog.getResourcePool() method.

But, in order for such a patch to be acceptable, it should be a
_straight_ refactoring, meaning absolutely no change in behavior other
than replacing the typeInfo.getFeatureType() by
catalog.getFeatureType(typeInfo) kind of calls.

My 2c.

Gabriel

On 2/25/10 9:05 AM, Justin Deoliveira wrote:

I have stated my feedback to this proposal before but I will reiterate
here for the sake of public discussion.

In general I am against this idea. I understand that from an
architectural stand point it makes things cleaner, but practically I
think it has more cons than pros.

For instance, this proposal requires that all "data access" methods:

FeatureTypeInfo.getFeatureType()
DataStoreInfo.getDataStore()
...

Be removed outright from the catalog classes. This has multiple downsides:

1) It requires a massive update to the geoserver code base
2) It makes interacting with the catalog more difficult

For (2) it means that one has to instead of :

featureTypeInfo.getFeatureType()

now have to:

Catalog catalog = ...
catalog.getResourcePool().getFeatureType(featureType)

The new way of access requires one to maintain a reference to the
catalog or the resource pool (which in some cases might be unavailable)
and it also makes resource pool part of the primary api when it should
really be an implementation detail imo.

One of the motivations for the proposal is that it makes backing the
catalog onto hibernate easier. I am not sure I see this. Every data
access method on a bean just forwards to catalog.getResourcePool(). So
all is required is that whatever is unmarshaling the catalog objects
have a way to set a reference to the catalog on beans. Which I don't see
as an overly burdensome requirement.

The other is to allow external applications to have a geoserver model of
the catalog. Which yes would make it easier. But the only hypothetical
use case presented is for a java REST configuration client, for which
one has already been implemented in community.

Apologies for coming across as so negative, it is just my opinion that
the potential benefits do not out weight the potential downsides. I
could be convinced otherwise but I think the proposal requires some more
concrete examples of where the current architecture does not work. But
that said I am not PSC so I can't vote -1, but as someone who is "close"
to the catalog api I thought I should voice my opinion.

-Justin

On 2/25/10 7:41 AM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

     At the moment, when an external app needs to exchange data with a GeoServer
     instance (e.g.: via REST or by accessing a DB-based catalog), it has to
     re-define its own set of beans representing Stores, Resources, Styles and so
     on.

     It could be extremely handy if external applications could use the very same
     *Info beans used by GeoServer (both interfaces and related implementations).

     In the present architecture this cannot be accomplished without importing in
     the external app all the catalog logic, that is useless outside a complete
     GeoServer instance.

     All in all, this refactoring will make clear the boundaries of metadata
     objects, making the creation of modules for marshalling/umarshalling them
     much simpler.

      Ciao,
      Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

Thought about this a bit more... think it may be "safer" in terms of api shift to use aggregation rather then extension. The problem we had with the previous STRUTS stuff came down to duplicating methods every which way and I am worried about the same path ....

class FeatureTypeInfo {
    FeatureTypeMetadata bean; // wrapped
    Catalog catalog;
    ... accessors and delegation
}

On 02/03/2010, at 7:46 PM, Jody Garnett wrote:

Catching up ... I share justin's frustration on this one (seen the catalog api too many times!).

One possible avenue forward would be to pull out a super class;

FeatureTypeInfo extends FeatureTypeMetadata ....

That way you are not stuck removing setCatalog / getCatalog and other methods justin needs to make the catalog go? However I am not sure that helps you with your need.

Can you please clarify the purpose; are you really just wanting a "data transfer object" to send back and forth? ie you would like to send java beans back and forth between the applications?

Jody

On 25/02/2010, at 11:41 PM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

At the moment, when an external app needs to exchange data with a GeoServer
instance (e.g.: via REST or by accessing a DB-based catalog), it has to
re-define its own set of beans representing Stores, Resources, Styles and so
on.

It could be extremely handy if external applications could use the very same
*Info beans used by GeoServer (both interfaces and related implementations).

In the present architecture this cannot be accomplished without importing in
the external app all the catalog logic, that is useless outside a complete
GeoServer instance.

All in all, this refactoring will make clear the boundaries of metadata
objects, making the creation of modules for marshalling/umarshalling them
much simpler.

Ciao,
Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Not sure I agree here, or maybe I just don't understand you. The beauty of the extension method is that there is no api shift for GeoServer. It is a straight refactor and *no* behavior should change at all.

I agree that we do walk a thin line providing straight pojos and classes that do data access in the same interfaces and classes. But something like this is a separate concern as far as i am concerned and should occur after the refactor is completed.

-Justin

On 3/2/10 6:28 PM, Jody Garnett wrote:

Thought about this a bit more... think it may be "safer" in terms of api shift to use aggregation rather then extension. The problem we had with the previous STRUTS stuff came down to duplicating methods every which way and I am worried about the same path ....

class FeatureTypeInfo {
     FeatureTypeMetadata bean; // wrapped
     Catalog catalog;
     ... accessors and delegation
}

On 02/03/2010, at 7:46 PM, Jody Garnett wrote:

Catching up ... I share justin's frustration on this one (seen the catalog api too many times!).

One possible avenue forward would be to pull out a super class;

FeatureTypeInfo extends FeatureTypeMetadata ....

That way you are not stuck removing setCatalog / getCatalog and other methods justin needs to make the catalog go? However I am not sure that helps you with your need.

Can you please clarify the purpose; are you really just wanting a "data transfer object" to send back and forth? ie you would like to send java beans back and forth between the applications?

Jody

On 25/02/2010, at 11:41 PM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

At the moment, when an external app needs to exchange data with a GeoServer
instance (e.g.: via REST or by accessing a DB-based catalog), it has to
re-define its own set of beans representing Stores, Resources, Styles and so
on.

It could be extremely handy if external applications could use the very same
*Info beans used by GeoServer (both interfaces and related implementations).

In the present architecture this cannot be accomplished without importing in
the external app all the catalog logic, that is useless outside a complete
GeoServer instance.

All in all, this refactoring will make clear the boundaries of metadata
objects, making the creation of modules for marshalling/umarshalling them
much simpler.

  Ciao,
  Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

I probably just did not explain very well - in both cases there should be no api shift for geoserver and no behavior should change at all.

Option 1 - pull up a superclass DTO. This is probably what we will do since there is an Eclipse Refactoring support for it and it can be done smoothly as a result.

Option 2 - push the DTO into a delegate

Option 3 - straight up separation

There is another unstated question here - how to make the Bean/DTO available? Option 1 can be done with an instanceof check; but you may wish to return a copy.

BEFORE

class FeatureTypeInfo {
XYZ xyz;
Catalog catalog;

XYZ getXYZ(){ return xyz; }
Catalog getCatalog(){ return catalog; }
}

OPTION 1 AFTER PULL UP SUPER CLASS REFACTORING:

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
Catalog getCatalog(){ return catalog; }

// optional publish metadata
FeatureTypeMetadata toMetadata(){
return new FeatureTypeMetadata( this ); // return a copy for safety
}
}

class FeatureTypeMetadata {

XYZ xyz;
FeatureTypeMetadata( FeatureTypeMetadata origional ); // copy constructor
XYZ getXYZ(){ return xyz; }
}

OPTION 2 AFTER DELEGATION (same arrangement just using aggregation rather then superclass; works better with multiple inheritance of interface);

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
FeatureTypeMetadata delegate;
Catalog getCatalog(){ return catalog; }
XYZ getXYZ(){ return delegate.getXYZ(); }

// optional
FeatureTypeMetadata toMetadata(){
return new FeatureTypeMetadata( delegate ); // return a copy for safety
}
}

class FeatureTypeMetadata {

XYZ xyz;
FeatureTypeMetadata( FeatureTypeMetadata origional ); // copy constructor
XYZ getXYZ(){ return xyz; }
}

OPTION 3 AFTER STRAIGHT SEPARATION

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
FeatureTypeMetadata delegate;
Catalog getCatalog(){ return catalog; }
XYZ getXYZ(){ return delegate.getXYZ(); }

// optional
FeatureTypeMetadata toMetadata(){
FeatureTypeMetadata metadata = new FeatureTypeMetadata();
metadata.set( xyz );
return metadata; // externalise metadata content
}
}

class FeatureTypeMetadata {

XYZ xyz;
void setXYZ( XYZ value ){ xyz = value; }
XYZ getXYZ(){ return xyz; }
}

On 03/03/2010, at 10:45 AM, Justin Deoliveira wrote:

Not sure I agree here, or maybe I just don’t understand you. The beauty of the extension method is that there is no api shift for GeoServer. It is a straight refactor and no behavior should change at all.

I agree that we do walk a thin line providing straight pojos and classes that do data access in the same interfaces and classes. But something like this is a separate concern as far as i am concerned and should occur after the refactor is completed.

-Justin

On 3/2/10 6:28 PM, Jody Garnett wrote:

Thought about this a bit more… think it may be “safer” in terms of api shift to use aggregation rather then extension. The problem we had with the previous STRUTS stuff came down to duplicating methods every which way and I am worried about the same path …

class FeatureTypeInfo {

FeatureTypeMetadata bean; // wrapped

Catalog catalog;

… accessors and delegation

}

On 02/03/2010, at 7:46 PM, Jody Garnett wrote:

Catching up … I share justin’s frustration on this one (seen the catalog api too many times!).

One possible avenue forward would be to pull out a super class;

FeatureTypeInfo extends FeatureTypeMetadata …

That way you are not stuck removing setCatalog / getCatalog and other methods justin needs to make the catalog go? However I am not sure that helps you with your need.

Can you please clarify the purpose; are you really just wanting a “data transfer object” to send back and forth? ie you would like to send java beans back and forth between the applications?

Jody

On 25/02/2010, at 11:41 PM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.

You can find it at

http://geoserver.org/display/GEOS/GSIP+45±+Moving+GeoServer+model+in+a+standalone+module

Here’s a little excerpt from the proposal:

==============================

At the moment, when an external app needs to exchange data with a GeoServer

instance (e.g.: via REST or by accessing a DB-based catalog), it has to

re-define its own set of beans representing Stores, Resources, Styles and so

on.

It could be extremely handy if external applications could use the very same

*Info beans used by GeoServer (both interfaces and related implementations).

In the present architecture this cannot be accomplished without importing in

the external app all the catalog logic, that is useless outside a complete

GeoServer instance.

All in all, this refactoring will make clear the boundaries of metadata

objects, making the creation of modules for marshalling/umarshalling them

much simpler.

==============================

Ciao,

Emanuele


Ing. Emanuele Tajariol

GeoSolutions S.A.S.

Via Carignoni 51

55041 Camaiore (LU)

Italy

phone: +39 0584983027

fax: +39 0584983027

http://www.geo-solutions.it

http://geo-solutions.blogspot.com



Download Intel® Parallel Studio Eval

Try the new software tools for yourself. Speed compiling, find bugs

proactively, and fine-tune applications for parallel performance.

See why Intel Parallel Studio got high marks during beta.

http://p.sf.net/sfu/intel-sw-dev


Geoserver-devel mailing list

Geoserver-devel@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

ack!! the word "dto" scares me. As far as I know there is no need for dto's here as the intent is to serialize java beans directly. Not transform them to dto's for sending over the wire or whatever...

Which I think is what you mean. But nevertheless i see what you are getting at. But I would rather change the minimum than go for an api paradigm shift. So option 1 rephrased as "pull up sueprclass beans" :stuck_out_tongue:

-Justin

On 3/2/10 8:00 PM, Jody Garnett wrote:

I probably just did not explain very well - in both cases there should
be no api shift for geoserver and no behavior should change at all.

Option 1 - pull up a superclass DTO. This is probably what we will do
since there is an Eclipse Refactoring support for it and it can be done
smoothly as a result.

Option 2 - push the DTO into a delegate

Option 3 - straight up separation

There is another unstated question here - how to make the Bean/DTO
available? Option 1 can be done with an instanceof check; but you may
wish to return a copy.

BEFORE

class FeatureTypeInfo {
XYZ xyz;
Catalog catalog;

XYZ getXYZ(){ return xyz; }
Catalog getCatalog(){ return catalog; }
}

OPTION 1 AFTER PULL UP SUPER CLASS REFACTORING:

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
Catalog getCatalog(){ return catalog; }
// optional publish metadata
FeatureTypeMetadata toMetadata(){
return new FeatureTypeMetadata( this ); // return a copy for safety
}

class FeatureTypeMetadata {
XYZ xyz;
FeatureTypeMetadata( FeatureTypeMetadata origional ); // copy constructor
XYZ getXYZ(){ return xyz; }
}

OPTION 2 AFTER DELEGATION (same arrangement just using aggregation
rather then superclass; works better with multiple inheritance of
interface);

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
FeatureTypeMetadata delegate;
Catalog getCatalog(){ return catalog; }
XYZ getXYZ(){ return delegate.getXYZ(); }
// optional
FeatureTypeMetadata toMetadata(){
return new FeatureTypeMetadata( delegate ); // return a copy for safety
}

class FeatureTypeMetadata {
XYZ xyz;
FeatureTypeMetadata( FeatureTypeMetadata origional ); // copy constructor
XYZ getXYZ(){ return xyz; }
}

OPTION 3 AFTER STRAIGHT SEPARATION

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
FeatureTypeMetadata delegate;
Catalog getCatalog(){ return catalog; }
XYZ getXYZ(){ return delegate.getXYZ(); }
// optional
FeatureTypeMetadata toMetadata(){
FeatureTypeMetadata metadata = new FeatureTypeMetadata();
metadata.set( xyz );
return metadata; // externalise metadata content
}

class FeatureTypeMetadata {
XYZ xyz;
void setXYZ( XYZ value ){ xyz = value; }
XYZ getXYZ(){ return xyz; }
}

On 03/03/2010, at 10:45 AM, Justin Deoliveira wrote:

Not sure I agree here, or maybe I just don't understand you. The
beauty of the extension method is that there is no api shift for
GeoServer. It is a straight refactor and *no* behavior should change
at all.

I agree that we do walk a thin line providing straight pojos and
classes that do data access in the same interfaces and classes. But
something like this is a separate concern as far as i am concerned and
should occur after the refactor is completed.

-Justin

On 3/2/10 6:28 PM, Jody Garnett wrote:

Thought about this a bit more... think it may be "safer" in terms of
api shift to use aggregation rather then extension. The problem we
had with the previous STRUTS stuff came down to duplicating methods
every which way and I am worried about the same path ....

class FeatureTypeInfo {
FeatureTypeMetadata bean; // wrapped
Catalog catalog;
... accessors and delegation
}

On 02/03/2010, at 7:46 PM, Jody Garnett wrote:

Catching up ... I share justin's frustration on this one (seen the
catalog api too many times!).

One possible avenue forward would be to pull out a super class;

FeatureTypeInfo extends FeatureTypeMetadata ....

That way you are not stuck removing setCatalog / getCatalog and
other methods justin needs to make the catalog go? However I am not
sure that helps you with your need.

Can you please clarify the purpose; are you really just wanting a
"data transfer object" to send back and forth? ie you would like to
send java beans back and forth between the applications?

Jody

On 25/02/2010, at 11:41 PM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

At the moment, when an external app needs to exchange data with a
GeoServer
instance (e.g.: via REST or by accessing a DB-based catalog), it has to
re-define its own set of beans representing Stores, Resources,
Styles and so
on.

It could be extremely handy if external applications could use the
very same
*Info beans used by GeoServer (both interfaces and related
implementations).

In the present architecture this cannot be accomplished without
importing in
the external app all the catalog logic, that is useless outside a
complete
GeoServer instance.

All in all, this refactoring will make clear the boundaries of metadata
objects, making the creation of modules for
marshalling/umarshalling them
much simpler.

Ciao,
Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
<mailto:Geoserver-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

Um sorry for "dto" - is my understanding wrong? For me a creating a bean in order to "serialize directly" is is called a data transfer object.

The idea crops up in punting stuff across the wire; in and out of the database etc... I think Java EE hijacked the use and thus is the source of scaring you :frowning:

I also agree that Option 1 is the way to go; if we get stuck on multiple interaces or something crazy we can mix in a bit of Option 2.

Cheers,
Jody

On 03/03/2010, at 12:36 PM, Justin Deoliveira wrote:

ack!! the word "dto" scares me. As far as I know there is no need for dto's here as the intent is to serialize java beans directly. Not transform them to dto's for sending over the wire or whatever...

Which I think is what you mean. But nevertheless i see what you are getting at. But I would rather change the minimum than go for an api paradigm shift. So option 1 rephrased as "pull up sueprclass beans" :stuck_out_tongue:

-Justin

On 3/2/10 8:00 PM, Jody Garnett wrote:

I probably just did not explain very well - in both cases there should
be no api shift for geoserver and no behavior should change at all.

Option 1 - pull up a superclass DTO. This is probably what we will do
since there is an Eclipse Refactoring support for it and it can be done
smoothly as a result.

Option 2 - push the DTO into a delegate

Option 3 - straight up separation

There is another unstated question here - how to make the Bean/DTO
available? Option 1 can be done with an instanceof check; but you may
wish to return a copy.

BEFORE

class FeatureTypeInfo {
XYZ xyz;
Catalog catalog;

XYZ getXYZ(){ return xyz; }
Catalog getCatalog(){ return catalog; }
}

OPTION 1 AFTER PULL UP SUPER CLASS REFACTORING:

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
Catalog getCatalog(){ return catalog; }
// optional publish metadata
FeatureTypeMetadata toMetadata(){
return new FeatureTypeMetadata( this ); // return a copy for safety
}
}

class FeatureTypeMetadata {
XYZ xyz;
FeatureTypeMetadata( FeatureTypeMetadata origional ); // copy constructor
XYZ getXYZ(){ return xyz; }
}

OPTION 2 AFTER DELEGATION (same arrangement just using aggregation
rather then superclass; works better with multiple inheritance of
interface);

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
FeatureTypeMetadata delegate;
Catalog getCatalog(){ return catalog; }
XYZ getXYZ(){ return delegate.getXYZ(); }
// optional
FeatureTypeMetadata toMetadata(){
return new FeatureTypeMetadata( delegate ); // return a copy for safety
}
}

class FeatureTypeMetadata {
XYZ xyz;
FeatureTypeMetadata( FeatureTypeMetadata origional ); // copy constructor
XYZ getXYZ(){ return xyz; }
}

OPTION 3 AFTER STRAIGHT SEPARATION

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
FeatureTypeMetadata delegate;
Catalog getCatalog(){ return catalog; }
XYZ getXYZ(){ return delegate.getXYZ(); }
// optional
FeatureTypeMetadata toMetadata(){
FeatureTypeMetadata metadata = new FeatureTypeMetadata();
metadata.set( xyz );
return metadata; // externalise metadata content
}
}

class FeatureTypeMetadata {
XYZ xyz;
void setXYZ( XYZ value ){ xyz = value; }
XYZ getXYZ(){ return xyz; }
}

On 03/03/2010, at 10:45 AM, Justin Deoliveira wrote:

Not sure I agree here, or maybe I just don't understand you. The
beauty of the extension method is that there is no api shift for
GeoServer. It is a straight refactor and *no* behavior should change
at all.

I agree that we do walk a thin line providing straight pojos and
classes that do data access in the same interfaces and classes. But
something like this is a separate concern as far as i am concerned and
should occur after the refactor is completed.

-Justin

On 3/2/10 6:28 PM, Jody Garnett wrote:

Thought about this a bit more... think it may be "safer" in terms of
api shift to use aggregation rather then extension. The problem we
had with the previous STRUTS stuff came down to duplicating methods
every which way and I am worried about the same path ....

class FeatureTypeInfo {
FeatureTypeMetadata bean; // wrapped
Catalog catalog;
... accessors and delegation
}

On 02/03/2010, at 7:46 PM, Jody Garnett wrote:

Catching up ... I share justin's frustration on this one (seen the
catalog api too many times!).

One possible avenue forward would be to pull out a super class;

FeatureTypeInfo extends FeatureTypeMetadata ....

That way you are not stuck removing setCatalog / getCatalog and
other methods justin needs to make the catalog go? However I am not
sure that helps you with your need.

Can you please clarify the purpose; are you really just wanting a
"data transfer object" to send back and forth? ie you would like to
send java beans back and forth between the applications?

Jody

On 25/02/2010, at 11:41 PM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

At the moment, when an external app needs to exchange data with a
GeoServer
instance (e.g.: via REST or by accessing a DB-based catalog), it has to
re-define its own set of beans representing Stores, Resources,
Styles and so
on.

It could be extremely handy if external applications could use the
very same
*Info beans used by GeoServer (both interfaces and related
implementations).

In the present architecture this cannot be accomplished without
importing in
the external app all the catalog logic, that is useless outside a
complete
GeoServer instance.

All in all, this refactoring will make clear the boundaries of metadata
objects, making the creation of modules for
marshalling/umarshalling them
much simpler.

Ciao,
Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
<mailto:Geoserver-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

Whenever I have seen the pattern used (or abused) there is a set of domain model objects and then a set of dto's used to transfer or serialize them or whatever.

In GeoServer we explicitly killed any notion of dto's and stick with just a set of domain model objects. Which are made as simple and java bean like as possible in order to make serialization as simple as possible.

-Justin

On 3/2/10 9:27 PM, Jody Garnett wrote:

Um sorry for "dto" - is my understanding wrong? For me a creating a bean in order to "serialize directly" is is called a data transfer object.

The idea crops up in punting stuff across the wire; in and out of the database etc... I think Java EE hijacked the use and thus is the source of scaring you :frowning:

I also agree that Option 1 is the way to go; if we get stuck on multiple interaces or something crazy we can mix in a bit of Option 2.

Cheers,
Jody

On 03/03/2010, at 12:36 PM, Justin Deoliveira wrote:

ack!! the word "dto" scares me. As far as I know there is no need for dto's here as the intent is to serialize java beans directly. Not transform them to dto's for sending over the wire or whatever...

Which I think is what you mean. But nevertheless i see what you are getting at. But I would rather change the minimum than go for an api paradigm shift. So option 1 rephrased as "pull up sueprclass beans" :stuck_out_tongue:

-Justin

On 3/2/10 8:00 PM, Jody Garnett wrote:

I probably just did not explain very well - in both cases there should
be no api shift for geoserver and no behavior should change at all.

Option 1 - pull up a superclass DTO. This is probably what we will do
since there is an Eclipse Refactoring support for it and it can be done
smoothly as a result.

Option 2 - push the DTO into a delegate

Option 3 - straight up separation

There is another unstated question here - how to make the Bean/DTO
available? Option 1 can be done with an instanceof check; but you may
wish to return a copy.

BEFORE

class FeatureTypeInfo {
XYZ xyz;
Catalog catalog;

XYZ getXYZ(){ return xyz; }
Catalog getCatalog(){ return catalog; }
}

OPTION 1 AFTER PULL UP SUPER CLASS REFACTORING:

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
Catalog getCatalog(){ return catalog; }
// optional publish metadata
FeatureTypeMetadata toMetadata(){
return new FeatureTypeMetadata( this ); // return a copy for safety
}

class FeatureTypeMetadata {
XYZ xyz;
FeatureTypeMetadata( FeatureTypeMetadata origional ); // copy constructor
XYZ getXYZ(){ return xyz; }
}

OPTION 2 AFTER DELEGATION (same arrangement just using aggregation
rather then superclass; works better with multiple inheritance of
interface);

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
FeatureTypeMetadata delegate;
Catalog getCatalog(){ return catalog; }
XYZ getXYZ(){ return delegate.getXYZ(); }
// optional
FeatureTypeMetadata toMetadata(){
return new FeatureTypeMetadata( delegate ); // return a copy for safety
}

class FeatureTypeMetadata {
XYZ xyz;
FeatureTypeMetadata( FeatureTypeMetadata origional ); // copy constructor
XYZ getXYZ(){ return xyz; }
}

OPTION 3 AFTER STRAIGHT SEPARATION

class FeatureTypeInfo extends FeatureTypeMetadata {
Catalog catalog;
FeatureTypeMetadata delegate;
Catalog getCatalog(){ return catalog; }
XYZ getXYZ(){ return delegate.getXYZ(); }
// optional
FeatureTypeMetadata toMetadata(){
FeatureTypeMetadata metadata = new FeatureTypeMetadata();
metadata.set( xyz );
return metadata; // externalise metadata content
}

class FeatureTypeMetadata {
XYZ xyz;
void setXYZ( XYZ value ){ xyz = value; }
XYZ getXYZ(){ return xyz; }
}

On 03/03/2010, at 10:45 AM, Justin Deoliveira wrote:

Not sure I agree here, or maybe I just don't understand you. The
beauty of the extension method is that there is no api shift for
GeoServer. It is a straight refactor and *no* behavior should change
at all.

I agree that we do walk a thin line providing straight pojos and
classes that do data access in the same interfaces and classes. But
something like this is a separate concern as far as i am concerned and
should occur after the refactor is completed.

-Justin

On 3/2/10 6:28 PM, Jody Garnett wrote:

Thought about this a bit more... think it may be "safer" in terms of
api shift to use aggregation rather then extension. The problem we
had with the previous STRUTS stuff came down to duplicating methods
every which way and I am worried about the same path ....

class FeatureTypeInfo {
FeatureTypeMetadata bean; // wrapped
Catalog catalog;
... accessors and delegation
}

On 02/03/2010, at 7:46 PM, Jody Garnett wrote:

Catching up ... I share justin's frustration on this one (seen the
catalog api too many times!).

One possible avenue forward would be to pull out a super class;

FeatureTypeInfo extends FeatureTypeMetadata ....

That way you are not stuck removing setCatalog / getCatalog and
other methods justin needs to make the catalog go? However I am not
sure that helps you with your need.

Can you please clarify the purpose; are you really just wanting a
"data transfer object" to send back and forth? ie you would like to
send java beans back and forth between the applications?

Jody

On 25/02/2010, at 11:41 PM, Emanuele Tajariol wrote:

Hi all,

I created a GSIP about a refactorization of the catalog beans.
You can find it at
http://geoserver.org/display/GEOS/GSIP+45+-+Moving+GeoServer+model+in+a+standalone+module

Here's a little excerpt from the proposal:

At the moment, when an external app needs to exchange data with a
GeoServer
instance (e.g.: via REST or by accessing a DB-based catalog), it has to
re-define its own set of beans representing Stores, Resources,
Styles and so
on.

It could be extremely handy if external applications could use the
very same
*Info beans used by GeoServer (both interfaces and related
implementations).

In the present architecture this cannot be accomplished without
importing in
the external app all the catalog logic, that is useless outside a
complete
GeoServer instance.

All in all, this refactoring will make clear the boundaries of metadata
objects, making the creation of modules for
marshalling/umarshalling them
much simpler.

Ciao,
Emanuele

-------------------------------------------------------
Ing. Emanuele Tajariol

GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027

http://www.geo-solutions.it
http://geo-solutions.blogspot.com
-------------------------------------------------------

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
<mailto:Geoserver-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.

--
Justin Deoliveira
OpenGeo - http://opengeo.org
Enterprise support for open source geospatial.