I like the idea of a separate code base (including repo) for separate problem 
domains. I think trying to fit a new API inside or parallel to the existing API 
has too high of a likelihood of confusion.

Sarge

> On 26 Apr, 2017, at 16:52, Bruce Schuchardt <bschucha...@pivotal.io> wrote:
> 
> I don't think we should mix the old client code with a new API.  We should 
> keep the new client code separate from the server.  Maybe even in a different 
> repo, as I think Fred suggested.
> 
> Le 4/26/2017 à 3:12 PM, Kirk Lund a écrit :
>> If we want to add a new API then I suggest we create new API packages and
>> leave the "cache" package as the old deprecated API for backwards
>> compatibility.
>> 
>> The new APIs and implementation could be separated into different geode
>> modules and packages (something like what follows):
>> 
>> org.apache.geode.api -- the main rich API (geode-api module and jar)
>> org.apache.geode.api.client -- the new thin client API (geode-api-client
>> module and jar)
>> org.apache.geode.core -- the main implementation of api (geode-core module
>> and jar which also currently contains the old API)
>> 
>> On Wed, Apr 26, 2017 at 9:41 AM, William Markito Oliveira <
>> william.mark...@gmail.com> wrote:
>> 
>>> This is an awesome discussion and Jake's hitting all the right notes about
>>> why JCache is a good idea! I've fought that fight in the past and lost it
>>> but I'm happy to see it coming back...
>>> 
>>> What's really nice about Geode is that the functionalities and capabilities
>>> are all there, they're just not that well exposed, known by others or
>>> obscured by some decisions that doesn't apply anymore.
>>> 
>>> It's the same conversation about monitoring and statistics...  All the
>>> capability is there with JMX and Stats, but using an unknown custom format
>>> or tool to display that data makes it not very appealing for OSS and
>>> enterprise users that need workarounds and hacks to integrate with common
>>> monitoring tools.
>>> 
>>> Refactoring API Client APIs, documentation and implementation of a new
>>> Protocol, Reactive APIs, better integration with standard monitoring tools
>>> -  Sounds like good points for a 2.0 roadmap IMHO.
>>> 
>>> 
>>> On Wed, Apr 26, 2017 at 10:28 AM, Jacob Barrett <jbarr...@pivotal.io>
>>> wrote:
>>> 
>>>> Wes,
>>>> 
>>>> Those are almost all administrative commands and have no place on the
>>>> client API. They belong on an administrative API or as I'm arguing a
>>> series
>>>> of MBeans/JMX as it is already an established standard.
>>>> 
>>>> -Jake
>>>> 
>>>> On Wed, Apr 26, 2017 at 8:09 AM Wes Williams <wwilli...@pivotal.io>
>>> wrote:
>>>>> Now we're getting some precision. Let's talk about the "raw" Geode
>>>>> proprietary bad ass API!  Would that "raw" Geode proprietary bad ass
>>> API
>>>>> "raw"
>>>>> Geode proprietary bad ass API that we're talking about be centered
>>> around
>>>>> the commands found here:
>>>>> 
>>>>> https://github.com/apache/geode/tree/rel/v1.1.1/geode-
>>>> core/src/main/java/org/apache/geode/management/internal/cli/commands
>>>>> Or somewhere else?
>>>>> 
>>>>> *Wes Williams | Pivotal Advisory **Data Engineer*
>>>>> 781.606.0325
>>>>> http://pivotal.io/big-data/pivotal-gemfire
>>>>> 
>>>>> On Tue, Apr 25, 2017 at 11:41 PM, Jacob Barrett <jbarr...@pivotal.io>
>>>>> wrote:
>>>>> 
>>>>>> Java and its community have standards for all of these issue so why
>>>>>> re-invent the wheel. The market doesn't want proprietary anymore,
>>> they
>>>>> want
>>>>>> standards and mobility.
>>>>>> 
>>>>>> Configuration of the server should happen through MBeans. You can
>>> wrap
>>>>> that
>>>>>> in gfsh for command line, REST for remote web based admin, use
>>> JConsole
>>>>> or
>>>>>> any other number of JMX based enterprise management tools. By using
>>>>> MBeans
>>>>>> the server can easily expose new discovered services without the need
>>>> to
>>>>>> code specific gfsh commands, REST interfaces or APIs. There is no
>>>> reason
>>>>> my
>>>>>> SDG can't be retooled to "discover" the configuration from these
>>> MBeans
>>>>> as
>>>>>> well rather than having to be touched every time we add or change
>>>>>> something. There are tools and books already written that
>>> implementors
>>>>> can
>>>>>> consult on MBeans. There isn't anything out there on gfsh commands.
>>>>>> 
>>>>>> If we want to play in the Java community, especially J2EE (the other
>>>> 50%
>>>>> of
>>>>>> Java that isn't Spring), then we had better have a JSR-107 answer no
>>>>> matter
>>>>>> what the pain is to provide it. I can pull dozens of books of the
>>> shelf
>>>>>> that teach me how to effectively use a JCache, how many can I pull
>>> off
>>>>> the
>>>>>> shelf that teach me Geode's API? How many engineers can I get
>>>>> applications
>>>>>> form by saying "must have Geode API knowledge"? I can find people
>>> with
>>>>>> JCache knowledge though. So from in implementor's perspective having
>>>>>> standards is a must. Now I don't think the JSR-107 interface should
>>> be
>>>>> the
>>>>>> root interface but rather a facade on the "raw" Geode proprietary bad
>>>> ass
>>>>>> API. That API should be 100% asynchronous (reactive, SEDA, whatever
>>> the
>>>>>> current buzzword for asynchronous is today). Around that API we can
>>>>> provide
>>>>>> facades for JSR 107, ConcurrentMap (our current yet not so well
>>>> behaving
>>>>>> API), List, Queue, etc. Maybe even JPA, JCA, etc. The thought of
>>>> putting
>>>>>> all those features into a single API makes my head exploded and they
>>>>> don't
>>>>>> need to be like they are today.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Tue, Apr 25, 2017 at 8:25 PM Wes Williams <wwilli...@pivotal.io>
>>>>> wrote:
>>>>>>> A couple of points to interact with John's points.
>>>>>>> 
>>>>>>> GFSH as API
>>>>>>> 
>>>>>>> We agree that GFSH is a DSL, and a really good and useful one. We
>>>> agree
>>>>>>> that we don't want our API tied to GFSH syntax. I view the valuable
>>>>> part
>>>>>> of
>>>>>>> GemFire admin as the Java code underneath GFSH, or the "Commands."
>>>>>>> 
>>>>>>> For example, to create a JAVA API to "Create Region",  why not
>>>> create a
>>>>>>> Java API around CreateAlterDestroyRegionCommands? In this way,
>>> GFSH
>>>> and
>>>>>> the
>>>>>>> JAVA API share the same code. It seems too obvious yet I don't see
>>> it
>>>>>> being
>>>>>>> recommended.  Why not?  (Note: the hard-coded formatting would need
>>>> to
>>>>> be
>>>>>>> removed).
>>>>>>> 
>>>>>>> Once you have the Java/GFSH/REST API as common code, you then
>>>> refactor
>>>>>> it.
>>>>>>> What's the objection to this approach? Once you open Java API's to
>>> do
>>>>>>> everything that GFSH does, then you have now unshackled the power
>>> of
>>>>> the
>>>>>>> developer (the JAVA API) and the admin (GFSH API).
>>>>>>> 
>>>>>>> 
>>>>>>> REST API
>>>>>>> 
>>>>>>> I've found that most don't want to use the Dev REST API because
>>> it's
>>>>>>> attached to a server rather than the cluster. HA?
>>>>>>> 
>>>>>>> 
>>>>>>> *Wes Williams | Pivotal Advisory **Data Engineer*
>>>>>>> 781.606.0325 <(781)%20606-0325>
>>>>>>> http://pivotal.io/big-data/pivotal-gemfire
>>>>>>> 
>>>>>>> On Tue, Apr 25, 2017 at 7:01 PM, Fred Krone <fkr...@pivotal.io>
>>>> wrote:
>>>>>>>> Good feedback.
>>>>>>>> 
>>>>>>>> This would use the new protocol.  I should have mentioned that.
>>>>>>>> 
>>>>>>>> The original driver for this was the Region API needs either an
>>>>> update
>>>>>> or
>>>>>>>> an alternative.  Updating has a few drawbacks: Region wasn't
>>>> designed
>>>>>>> with
>>>>>>>> open source in-mind and as Swap mentioned it is naturally tightly
>>>>>>> coupled.
>>>>>>>> Members of the community are already working to update Region but
>>>>>>> something
>>>>>>>> gets fixed and it breaks something for someone else.  I think
>>> it's
>>>>> much
>>>>>>>> better to provide a new interface that implements the first part
>>> of
>>>>> JSR
>>>>>>> 107
>>>>>>>> (javax.cache) and get the ball rolling for the community and,
>>>>> perhaps,
>>>>>>> over
>>>>>>>> time deprecate Region (although that's not a primary objective).
>>>>>>>> 
>>>>>>>> A Java driver will probably get built regardless just to give the
>>>> new
>>>>>>>> protocol some legs. That driver also needs a decent caching
>>>>> interface.
>>>>>>> JSR
>>>>>>>> 107 has already solved that part.  So let's get started on it.
>>> If
>>>>> the
>>>>>>>> community wants to go the whole way and continue JSR 107
>>>>> implementation
>>>>>>>> after that that's awesome.  Functions can also be added, etc.
>>>>>>>> 
>>>>>>>> I intentionally did not mention anything about PCF as this
>>> pertains
>>>>> to
>>>>>>>> Geode itself as an open source offering and developer experience.
>>>>> I'm
>>>>>>>> writing as a member of the community. Ie: I'm a developer who
>>> would
>>>>>> like
>>>>>>> to
>>>>>>>> add some caching to my application -- I can download either Geode
>>>> or
>>>>>>>> Hazelcast for free and right now it's a no brainer.  Not that we
>>>>>> wouldn't
>>>>>>>> keep PCF in-mind but it's out of scope for this thread.  I do
>>>> believe
>>>>>>>> getting started on a Java driver for the protocol and a
>>>> standardized
>>>>>>>> caching API are easily leveraged wins across the board.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Tue, Apr 25, 2017 at 3:20 PM, Swapnil Bawaskar <
>>>>>> sbawas...@pivotal.io>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> I had looked at the JCache in the past and here are some of the
>>>>>> things
>>>>>>> I
>>>>>>>>> noted:
>>>>>>>>> 
>>>>>>>>> Naming convention: Geode's region is a Cache in JSR-107, and
>>>>> Geode's
>>>>>>>> Cache
>>>>>>>>> is a CacheManager. I think it would be too confusing to change
>>>> the
>>>>>>>> meaning
>>>>>>>>> of cache. Also, how do you document this given that Cache means
>>>>>>> different
>>>>>>>>> things if you are talking JCache vs Geode.
>>>>>>>>> 
>>>>>>>>> The way to create a Cache in JSR-107 is:
>>>>>>>>> Cache<Integer, Date> cache = manager.createCache(cacheName,
>>>>>>> Configuration
>>>>>>>>> c);
>>>>>>>>> Where it is upto the implementation to extend Configuration.
>>>> Given
>>>>>>> this,
>>>>>>>>> users will not be able to switch from an existing
>>> implementation
>>>> to
>>>>>>> ours;
>>>>>>>>> will have to write new code specially Configuration, making
>>>>> callbacks
>>>>>>>>> serializable etc.
>>>>>>>>> 
>>>>>>>>> JSR-107 will not be limited to the client. Server side
>>> callbacks
>>>>> like
>>>>>>>>> CacheLoader, CacheListener etc. will need handle on jsr-107
>>>>> “cache”.
>>>>>>>>> JSR-107 supports features like an EntryProcessor, which is a
>>>>> function
>>>>>>>>> invoked atomically on an entry operation. We will have to make
>>>>>> invasive
>>>>>>>>> changes to Geode to support this.
>>>>>>>>> 
>>>>>>>>> Given these, I don't think supporting JSR-107 is trivial.
>>>>>>>>> 
>>>>>>>>> On Tue, Apr 25, 2017 at 2:55 PM Dan Smith <dsm...@pivotal.io>
>>>>> wrote:
>>>>>>>>>> What transport are you planning on using? REST, or the
>>> current
>>>>>> binary
>>>>>>>>>> protocol? Or is this just a wrapper around the existing java
>>>>> client
>>>>>>>> APIs?
>>>>>>>>>> If this about creating a new API, I agree with what John is
>>>>> saying
>>>>>>> that
>>>>>>>>> we
>>>>>>>>>> need reduce the number of APIs we have to do the same thing
>>> in
>>>>>> java.
>>>>>>> It
>>>>>>>>>> seems especially confusing if we end up with different APIs
>>>> that
>>>>>>>> support
>>>>>>>>>> distinct features - like being able to create a region on the
>>>>>> server
>>>>>>>> with
>>>>>>>>>> this new API but only being able to invoke a function with
>>> the
>>>>> old
>>>>>>> API.
>>>>>>>>>> The other thing I think we need to avoid is being able to do
>>>>> things
>>>>>>>> from
>>>>>>>>>> the client (or gfsh, or xml, ...) that don't have a java API
>>> on
>>>>> the
>>>>>>>>> server.
>>>>>>>>>> I'm assuming your getOrCreateRegion region is supposed behave
>>>>> like
>>>>>>> the
>>>>>>>>> gfsh
>>>>>>>>>> command and update the cluster configuration? +++1 to Wes's
>>>>>>> suggestion
>>>>>>>>> have
>>>>>>>>>> a public API for executing these gfsh operations.
>>>>>>>>>> 
>>>>>>>>>> I really think we need to work on having *one* authoritative
>>>>> public
>>>>>>> API
>>>>>>>>>> that contains everything that we support on the server. The
>>>>>> protocols
>>>>>>>> we
>>>>>>>>>> support (REST, binary, ...) and the client drivers that use
>>>> those
>>>>>>>>> protocols
>>>>>>>>>> should just be ways of accessing that API. The Java API on
>>> the
>>>>>> server
>>>>>>>>> right
>>>>>>>>>> now the closest thing we have to this, but there are things
>>> you
>>>>> can
>>>>>>> do
>>>>>>>>> with
>>>>>>>>>> gfsh and things you can do with the current client that have
>>> no
>>>>>> java
>>>>>>>> API
>>>>>>>>>> equivalent. I think we really need to fix that!
>>>>>>>>>> 
>>>>>>>>>> Also, preferably we won't have to hand code a bunch of stuff
>>> in
>>>>>> every
>>>>>>>>>> client driver and protocol whenever we add a new feature. For
>>>>>> example
>>>>>>>> if
>>>>>>>>>> were to add a geode function to invoke each new API we add,
>>>> that
>>>>>> new
>>>>>>>> API
>>>>>>>>>> would be accessible from REST, gfsh, the java client etc.
>>> Later
>>>>> we
>>>>>>>> could
>>>>>>>>>> add syntatic sugar to make the new API prettier, but if we
>>> had
>>>> a
>>>>>> low
>>>>>>>>> level
>>>>>>>>>> API that automatically exposed all new features that would
>>> make
>>>>>>> adding
>>>>>>>>> new
>>>>>>>>>> features much less painful.
>>>>>>>>>> 
>>>>>>>>>> I do like the idea of adding a reactive API.
>>>>>>>>>> 
>>>>>>>>>>  Supporting JSR-107 might be nice - but that could probably
>>> be
>>>>>>> written
>>>>>>>>> just
>>>>>>>>>> as a wrapper around the current API without too much work. I
>>>>> don't
>>>>>>>> think
>>>>>>>>> we
>>>>>>>>>> should do anything for JSR-107 other than provide a JSR-107
>>>>>>> compatible
>>>>>>>>>> wrapper - if someone wants additional geode specific features
>>>>> they
>>>>>>>> should
>>>>>>>>>> drop into the existing API.
>>>>>>>>>> 
>>>>>>>>>> I also like the idea of a smaller client jar and
>>> dependencies,
>>>>> but
>>>>>> I
>>>>>>>>> think
>>>>>>>>>> there is a huge amount of room for improvement in our
>>> existing
>>>>>> client
>>>>>>>>> just
>>>>>>>>>> by refactoring the code a bit more and shinking geode-core
>>>> into a
>>>>>>> bare
>>>>>>>>>> minimum.
>>>>>>>>>> 
>>>>>>>>>> -Dan
>>>>>>>>>> 
>>>>>>>>>> On Mon, Apr 24, 2017 at 8:20 PM, Fred Krone <
>>> fkr...@pivotal.io
>>>>>>> wrote:
>>>>>>>>>>> That's great, Wes.  I will take a look.  Thanks.
>>>>>>>>>>> 
>>>>>>>>>>> John -- good feedback to consider and I was hoping this
>>> would
>>>>>> come
>>>>>>>> up.
>>>>>>>>>>> "In my mind, there really are only 2 approaches... *Spring*
>>>> and
>>>>>>>>>>> non-*Spring*,
>>>>>>>>>>> or rather PCF and non-PCF, and since PCF is primarily based
>>>> on
>>>>>> Boot
>>>>>>>>>> (given
>>>>>>>>>>> Microservices/applications are the new concurrency), then I
>>>> am
>>>>>>> really
>>>>>>>>>>> saying the same thing."
>>>>>>>>>>> 
>>>>>>>>>>> This would be cover non spring and attempt to give the
>>>>> community
>>>>>>>>>> something
>>>>>>>>>>> that had the same standardized experience as JSR 107 --
>>>>> starting
>>>>>>> with
>>>>>>>>> the
>>>>>>>>>>> Cache interface itself.  Although we don't necessarily have
>>>> to
>>>>>>>>> implement
>>>>>>>>>>> Cache, it's method signatures are essentially a (non
>>> spring)
>>>>>>> caching
>>>>>>>>>>> standard for Java developers at this point.   We considered
>>>>> full
>>>>>>>> blown
>>>>>>>>>> JSR
>>>>>>>>>>> 107 implementation but thought it was too robust for the
>>>> needs
>>>>>>>>> mentioned
>>>>>>>>>>> (that's not to say we couldn't get there incrementally).  I
>>>>> think
>>>>>>>> those
>>>>>>>>>>> needs still exist open-source outside of PCF and don't
>>>>>> cannibalize.
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> On Mon, Apr 24, 2017 at 7:44 PM, Real Wes <
>>>>>> thereal...@outlook.com>
>>>>>>>>>> wrote:
>>>>>>>>>>>> Here is a simple Java client _for enterprise use_ that I
>>>>>>> developed
>>>>>>>>> for
>>>>>>>>>>>> Geode and distributed to several enterprises. It has
>>>>>> similarities
>>>>>>>> and
>>>>>>>>>>>> differences for your goal. This project creates both
>>> server
>>>>> and
>>>>>>>>> client
>>>>>>>>>>>> regions dynamically.  It lists regions, alters regions…
>>>>> really
>>>>>>>>> anything
>>>>>>>>>>>> that GFSH can do. It differs in that it calls GFSH to do
>>>> its
>>>>>> work
>>>>>>>>>> rather
>>>>>>>>>>>> than a Java interface. You can think of this as a Java
>>> API
>>>> on
>>>>>> top
>>>>>>>> of
>>>>>>>>>>> GFSH.
>>>>>>>>>>>> You can use this model and keep the similarities while
>>>>>> adjusting
>>>>>>>> for
>>>>>>>>>> the
>>>>>>>>>>>> Java interface.
>>>>>>>>>>>> 
>>>>>>>>>>>> Similarities
>>>>>>>>>>>> - Client uses SDG and complies with JSR-107
>>>>>>>>>>>>      [the Cache Manager is here:
>>>> https://github.com/Pivotal-
>>>>>>>>>>>> Data-Engineering/ClusterManagement/tree/master/
>>>>>>>>>>>> 
>>>>> cluster-management-client/src/main/java/com/geode/cache/manager
>>>>>> ]
>>>>>>>>>>>> - After the server creates its region, client creates its
>>>>>> region
>>>>>>>>>>>>      [ see createRegions at: https://github.com/Pivotal-
>>>>>>>>>>> Data-Engineering/
>>>>>>>>>>>> ClusterManagement/blob/master/cluster-management-
>>>>>>>>>>>> 
>>>>>>>>>> client/src/main/java/com/geode/cache/manager/
>>>>>>>> RegionCreator.java<https://
>>>>>>>>>>>> github.com/Pivotal-Data-Engineering/ClusterManagement/
>>>>>>>>>>> blob/master/cluster-
>>>>>>>>>>>> management-client/src/main/java/com/geode/cache/manager/
>>>>>>>>>>> RegionCreator.java>
>>>>>>>>>>>> ]
>>>>>>>>>>>> 
>>>>>>>>>>>> Differences
>>>>>>>>>>>> Server dynamically calls GFSH to execute commands
>>>>>>>>>>>> 
>>>>>>>>>>>> How it works
>>>>>>>>>>>> - Whenever the client calls a region that does not exist,
>>>> the
>>>>>>>> client
>>>>>>>>>>> looks
>>>>>>>>>>>> for a <region name>.properties file. If the properties
>>> file
>>>>>>> exists,
>>>>>>>>> the
>>>>>>>>>>>> region is created with the dynamic properties.
>>>>>>>>>>>> - If <region name>.properties does not exist, default
>>>> region
>>>>>>>>> properties
>>>>>>>>>>>> are loaded and used to create the region.
>>>>>>>>>>>> - properties are formed into a GFSH string and passed to
>>> a
>>>>>> server
>>>>>>>>>>> function
>>>>>>>>>>>> - The server function calls GFSH using internal calls. It
>>>>> calls
>>>>>>> the
>>>>>>>>>>>> GfshParser, executes the command, and then returns the
>>>> parsed
>>>>>>>>> results.
>>>>>>>>>>>> [see https://github.com/Pivotal-Data-Engineering/
>>>>>>>>>>>> ClusterManagement/blob/master/
>>>> cluster-management-server/src/
>>>>>>>>>>>> main/java/com/geode/gfsh/GfshCommand.java]
>>>>>>>>>>>> 
>>>>>>>>>>>> Limitations
>>>>>>>>>>>> It uses internal calls to call GFSH. I have made requests
>>>> to
>>>>>> make
>>>>>>>>> this
>>>>>>>>>> a
>>>>>>>>>>>> stable public interface. Andrew Baker had a good idea to
>>>>> return
>>>>>>>> gfsh
>>>>>>>>>>>> results in JSON format with a new —results=json property
>>> to
>>>>>> pass
>>>>>>> to
>>>>>>>>>> GFSH.
>>>>>>>>>>>> Strengths
>>>>>>>>>>>> That is uses GFSH can be viewed as a strength to keep a
>>>>>>> consistent
>>>>>>>>> API,
>>>>>>>>>>>> whether Java or GFSH
>>>>>>>>>>>> 
>>>>>>>>>>>> TESTS
>>>>>>>>>>>> You can start by running server tests at:
>>>>>>>>> https://github.com/Pivotal-
>>>>>>>>>>>> Data-Engineering/ClusterManagement/tree/master/
>>>>>>>>>>>> cluster-management-server/src/test/java/com/geode/gfsh
>>>>>>>>>>>> 
>>>>>>>>>>>> Client tests are at:
>>>>>>> https://github.com/Pivotal-Data-Engineering/
>>>>>>>>>>>> ClusterManagement/tree/master/
>>>> cluster-management-client/src/
>>>>>>>>>>>> test/java/com/geode/management/client
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Regards,
>>>>>>>>>>>> Wes Williams
>>>>>>>>>>>> 
>>>>>>>>>>>> On Apr 24, 2017, at 6:51 PM, Kirk Lund <kl...@apache.org
>>>>>> <mailto:
>>>>>>>>> klund
>>>>>>>>>>>> @apache.org>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> A couple things I'd like to see:
>>>>>>>>>>>> 
>>>>>>>>>>>> 1) completely new API that doesn't reuse the old API
>>>> classes
>>>>>> (or
>>>>>>> at
>>>>>>>>>> least
>>>>>>>>>>>> not the giant classes such as Cache and Region
>>> interfaces)
>>>>>>>>>>>> 2) separation of API and Impl so that users can compile
>>>> their
>>>>>>> code
>>>>>>>>>>> against
>>>>>>>>>>>> a dedicated client API jar
>>>>>>>>>>>> 
>>>>>>>>>>>> On Mon, Apr 24, 2017 at 3:03 PM, Fred Krone <
>>>>> fkr...@pivotal.io
>>>>>>>>> <mailto:
>>>>>>>>>>> fkro
>>>>>>>>>>>> n...@pivotal.io>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> In an effort to improve Java developer ease of use for
>>>>> caching
>>>>>>> with
>>>>>>>>>>> Geode I
>>>>>>>>>>>> am looking for feedback on going forward with creating a
>>>> Java
>>>>>>>> client.
>>>>>>>>>>> This
>>>>>>>>>>>> client will allow for server-side region creation and
>>>>>> distributed
>>>>>>>>> data
>>>>>>>>>>>> caching.  This would allow for a thin client that fits
>>> with
>>>>>>>>>> microservice
>>>>>>>>>>>> caching patterns and also abstracts a cleaner
>>> client-server
>>>>>>>>> experience
>>>>>>>>>>>> driven interface.
>>>>>>>>>>>> 
>>>>>>>>>>>> Initially we were going to update the Region interface
>>> but
>>>>> were
>>>>>>>>>> concerned
>>>>>>>>>>>> with breaking existing applications.  We also would like
>>> to
>>>>>>> provide
>>>>>>>>>>> Region
>>>>>>>>>>>> creation to a client application and so propose here
>>>> solving
>>>>>> both
>>>>>>>> of
>>>>>>>>>>> these
>>>>>>>>>>>> areas with a Java client.
>>>>>>>>>>>> 
>>>>>>>>>>>> It would have new project repo for the client.
>>>>>>>>>>>> 
>>>>>>>>>>>> It would provide new Region interface for clients.  The
>>>>>> specifics
>>>>>>>> of
>>>>>>>>>> the
>>>>>>>>>>>> API design are too lengthy for this conversation but
>>>>>>> implementation
>>>>>>>>>> will
>>>>>>>>>>>> resemble JSR 107 Cache interface.
>>>>>>>>>>>> 
>>>>>>>>>>>> It would use the new security framework.
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> *An example*,
>>>>>>>>>>>> 
>>>>>>>>>>>> The client application simply creates an instance of
>>> client
>>>>> and
>>>>>>>>> points
>>>>>>>>>> it
>>>>>>>>>>>> to the locator:
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> org.apache.geode.client.Client client =
>>>>>>> Client.create(locatorHost,
>>>>>>>>>>>> locatorPort);
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Client has the following methods:
>>>>>>>>>>>> 
>>>>>>>>>>>> package org.apache.geode.client;
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> public interface GeodeClient {
>>>>>>>>>>>> 
>>>>>>>>>>>>  /**
>>>>>>>>>>>> 
>>>>>>>>>>>>   * creates the region on the servers, or gets the region
>>>> if
>>>>> it
>>>>>>>>> exits,
>>>>>>>>>>>> returns a PROXY region
>>>>>>>>>>>> 
>>>>>>>>>>>>   */
>>>>>>>>>>>> 
>>>>>>>>>>>>  public Region getOrCreateRegion(RegionAttributes
>>>> attributes,
>>>>>>>> String
>>>>>>>>>>>> name);
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>  /**
>>>>>>>>>>>> 
>>>>>>>>>>>>   * Returns a PROXY region if the region exists on the
>>>> server
>>>>>>>>>>>>   */
>>>>>>>>>>>> 
>>>>>>>>>>>>  public Region getRegion(String name);
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> MVP
>>>>>>>>>>>> 
>>>>>>>>>>>> The smallest set of features to test this idea, learn and
>>>>>>> iterate,
>>>>>>>>> and
>>>>>>>>>>> get
>>>>>>>>>>>> the client into the communities hands for future
>>> iterations
>>>>> is:
>>>>>>>>>>>> 
>>>>>>>>>>>> Create a server side Region from a client
>>>>>>>>>>>> 
>>>>>>>>>>>> Region interface has CRUD on par with javax.cache.Cache
>>>> (from
>>>>>> JSR
>>>>>>>>> 107)
>>>>>>>>>>>> Calls are asynchronous -- futures
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Also would like feedback on which future functionality
>>>> would
>>>>> be
>>>>>>>> most
>>>>>>>>>>> useful
>>>>>>>>>>>> from a thin client:
>>>>>>>>>>>> 
>>>>>>>>>>>> Function execution
>>>>>>>>>>>> 
>>>>>>>>>>>> Durable clients
>>>>>>>>>>>> 
>>>>>>>>>>>> User defined serialization
>>>>>>>>>>>> 
>>>>>>>>>>>> Register interest
>>>>>>>>>>>> 
>>>>>>>>>>>> Queries
>>>>>>>>>>>> 
>>>>>>>>>>>> CQ
>>>>>>>>>>>> 
>>>>>>>>>>>> Near side caching
>>>>>>>>>>>> 
>>>>>>>>>>>> Create disk stores from client
>>>>>>>>>>>> 
>>>>>>>>>>>> Region group membership
>>>>>>>>>>>> 
>>>>>>>>>>>> Client subscription load balancing
>>>>>>>>>>>> Transactions
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> -Fred
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>> 
>>> 
>>> --
>>> ~/William
>>> 
> 

Reply via email to