Andrus,

> Also just found this on GitHub [1]. Not sure how legit it is. But posting our 
> own "canonical" SpringBoot example is probably a good idea.


On the subject of 'working examples', I could not agree more.   

Cayenne 4 is an excellent framework, and there are some excellent working 
examples.  However, there are also some framework-collaboration concepts that 
could be more easily communicated with more detailed working examples and 
recommended “best practices”.

I had to spend hours trying out a lot of non-working code fragments, and 
out-dated version examples.  The two that provided insight were Ken Anderson’s 

        "Lovely…. I guess the list doesn’t support attachments… 
CayenneService.java” (August 13, 2019 email), 

and  solution-1 from stackoverflow

        
https://stackoverflow.com/questions/46713728/using-cayenneruntime-in-webapplication-without-web-xml/46718149#46718149

My legacy Cayenne code (based on the at-the-time - version 3 - highly 
recommended "BaseContext.getThreadObjectContext()”) - recently upgraded to 
Cayenne-4, as best as I can tell, only works strategically with the 
stackoverflow example (above).   I would not have been able to get an effective 
demo of this working without these two working examples, (i.e. just based on 
reference docs).

Comments:
1. These two working examples very quickly contrasted DI-Service vs 
ServletFilter strategies. 
2. Working examples illustrate complex collaboration scenarios much more 
effectively.

Succinctly:
working examples - version-aware - effective collaboration demonstrations

Hope this helps,
Joe



> On Aug 13, 2019, at 1:25 PM, Andrus Adamchik <and...@objectstyle.org> wrote:
> 
>> Cayenne is pretty generic as far as integrations go - it should work well
>> and easily with any framework. 
> 
> Yep.
> 
>>> Has anyone done this before?  Are there any  suggestions  on what I should
>>> be certain to do or avoid? Should I just spin up the standard Cayenne web
>>> filter?  Are there other choices?
> 
> 
> It's been 3 years since I tried SpringBoot, so I don't remember all the 
> classes involved. But at the high level the approach should be the same as 
> with Bootique:
> 
> 1. Bind ServerRuntime as an injectable *singleton* 
> 2. Figure out how to scope ObjectContexts based on the app specifics.
> 
> I'd actually avoid CayenneFilter. It is too servlet-specific and favors 
> session scope for the context. My typical pattern for #2 is creating a simple 
> custom service like this:
> 
> public interface ICayenneService {
>  ObjectContext sharedContext();
>  ObjectContext newContext();
> }
> 
> It provides user-friendly API around ServerRuntime, and you inject it 
> everywhere you need a context. You'd use "sharedContext" for reads, and 
> "newContext" for writes.
> 
> Also just found this on GitHub [1]. Not sure how legit it is. But posting our 
> own "canonical" SpringBoot example is probably a good idea.
> 
> Andrus
> 
> [1] https://github.com/Softmotions/spring-boot-starter-cayenne
> 
>> On Aug 13, 2019, at 7:56 PM, John Huss <johnth...@gmail.com> wrote:
>> 
>> Cayenne is pretty generic as far as integrations go - it should work well
>> and easily with any framework. Just create your ServerRuntime and define a
>> way to retrieve it (using ServletContext.setAttribute is typical). Then
>> you'll want to bind the runtime to each request that comes in, which is all
>> that CayenneFilter does. If CayenneFilter has worked for you, then just use
>> that. CayenneFilter is very minimal so you copy it and customize it if
>> needed.
>> 
>> On Tue, Aug 13, 2019 at 11:29 AM Tony Giaccone <t...@giaccone.org> wrote:
>> 
>>> I want to look into using Cayenne with SpringBoot.  I was able to get a
>>> basic cayenne stack up and running by implementing a ContextListener  and
>>> on the create event starting up a Cayenne Runtime.  I was using an in
>>> memory database and I had problems getting the ;create=true working.  My
>>> hack was to set the strategy on the DataNode after the runtime after it
>>> was  spun up.
>>> 
>>> Has anyone done this before?  Are there any  suggestions  on what I should
>>> be certain to do or avoid? Should I just spin up the standard Cayenne web
>>> filter?  Are there other choices?
>>> 
>>> Thanks for any help you can provide.
>>> 
>>> 
>>> Tony
>>> 
> 

Reply via email to