don't make decisions based on anecdotal evidence

ms

On Jul 13, 2012, at 9:03 AM, Karl <kgret...@mac.com> wrote:

> Hi,
> 
> Making EOF multi-threaded is really not that desirable nor is it necessary.  
> EOF gets most of its speed and efficiency through its 'cut through' 
> single-threaded design at the Access layer.
> 
> About 4 years ago, Apple tested an internal build of WO/EOF that was fully 
> multi-threaded.  It was about half as fast as the EOF that we know (and 
> love?).  Since then, Apple's internal version of EOF retains virtually the 
> current implementation except for the snapshot layer which is now shared by 
> multiple DB stacks.  So the solution was to remove the 1-1 relationship 
> between DB stacks and snapshots and to retain the cut-through single-threaded 
> design of EOF.
> 
> Karl
> 
> On 2012-07-13, at 3:06 PM, Farrukh Ijaz <farrukh.i...@fuegodigitalmedia.com> 
> wrote:
> 
>> Sorry for late response, just landed last night.
>> 
>> The idea is very simple to understand and implement. E.g. I've a third party 
>> library which has a method named with following signature:
>> 
>> String encode(String someString) {
>>      // some crappy encoding performed on someString and saved as encoded...
>>      return encoded;
>> }
>> 
>> Now this method can be private, public, protected, static, final, blah blah 
>> etc. I find that encoding is buggy, how to fix it? There are two ways:
>> 
>> 1. Get the source code, fix the method and submit patch. (This is sometimes 
>> not possible and for sure not possible in case of WebObjects)
>> 2. Use AOP
>> 
>> Forget about option 1. In Option 2 we have to use some AOP mechanism and the 
>> one that I've tested with my Wonder apps is AspectJ. I'm not going into 
>> details as it's a vast subject but providing links which are sufficient to 
>> experiment :)
>> 
>> http://www.eclipse.org/aspectj/
>> http://www.eclipse.org/aspectj/doc/released/progguide/starting-aspectj.html#the-dynamic-join-point-model
>> 
>> As far as weaving is concerned, I would suggest to use dynamic join point as 
>> they can be used to intercept calls and invoke different code rather than 
>> modifying the original classes.
>> 
>> The idea is we need to define join point for the method which is buggy or 
>> where we want to provide our own implementation. When the code is executed, 
>> the class loader reroutes the request for incoming method calls to our code. 
>> AOP is different that OOP. In contrast with OOP where methods are associated 
>> with Objects, AOP is used to classify those methods under common aspects and 
>> normally we use regular expressions for that. Two very common aspects I can 
>> explain here:
>> 
>> 1. You may have lots of methods and you want to collect execution type for 
>> each method call. (A logging aspect)
>> 2. A developer like me who put all the code in try block and catch one super 
>> Exception, someone would like to perform different operations on each 
>> sub-exception can write an aspect to catch my exceptions and do whatever he 
>> wants and then continue the original processing.
>> 
>> I'm not familiar with internals of the WebObjects but the code that's 
>> responsible for single thread can be studied and multithreaded solution can 
>> be provided using AOP. If someone is interested to work with me to on this, 
>> I'm more than happy to help where I can :)
>> 
>> Farrukh
>> 
>> On 2012-07-11, at 10:25 PM, Chuck Hill <ch...@global-village.net> wrote:
>> 
>>> Hi Farrukh,
>>> 
>>> I like the idea of using AOP to address bugs in WO.  Can you give us any 
>>> details on how you did that?
>>> 
>>> As for making EOF multi-threaded.... that is a very fundamental part of the 
>>> design.  Fixing that with AOP would be challenging.  :-)
>>> 
>>> 
>>> Chuck
>>> 
>>> 
>>> 
>>> On 2012-07-11, at 11:12 AM, Farrukh Ijaz wrote:
>>> 
>>>> Hi,
>>>> 
>>>> In past I've used AOP to address issues of closed source. This I believe 
>>>> if carefully used can help convert the EOF from single to multi threaded 
>>>> and/or solve other bottleneck problems. Having said this doesn't mean I'm 
>>>> against Cayane. However if the current EOF issues get fixed with AOP 
>>>> patched code would be better for those who don't want to or for some 
>>>> reasons can't switch to Cayane.
>>>> 
>>>> Farrukh
>>>> 
>>>> Chuck Hill <ch...@global-village.net> wrote:
>>>> 
>>>>> I agree that we need to more closely examine Cayenne before jumping in 
>>>>> with both feet.  How mature are the tools?  What is the functionality 
>>>>> gap?  How important is the missing functionality?  How costly is adding 
>>>>> any needed functionality?  Will the missing functionality fit in with the 
>>>>> Cayenne architecture?  How stable is it?  How well does it scale (scaling 
>>>>> is more than multi-threaded EOF)?  And Cayenne is only 
>>>>> EOAccess/EOControl.  What do we do about the presentation layer?  Getting 
>>>>> rid of 2/3 of WO still leaves you with WO.
>>>>> 
>>>>> 
>>>>> Chuck
>>>>> 
>>>>> On 2012-07-11, at 11:29 AM, Theodore Petrosky wrote:
>>>>> 
>>>>>> 
>>>>>> Hurray someone actually started talking about this.
>>>>>> 
>>>>>> 
>>>>>> I want to add my two cents without starting a "this is better than that" 
>>>>>> conversation.
>>>>>> 
>>>>>> If Cayenne is to be utilized, someone in the know must look not only at 
>>>>>> the current state of Cayenne, but at the developers. What is/was their 
>>>>>> philosophy behind what they write/wrote? If we don't, it will be a very 
>>>>>> short and costly marriage. Costly, because we either buck up and foot 
>>>>>> the bill to rewrite Webobjects or continue in a bad relationship.
>>>>>> 
>>>>>> I am writing this not as a diatribe but because I am concerned that in 
>>>>>> the excitement of looking at Cayenne, the obvious impact of differing 
>>>>>> philosophies of the original authors may be ignored. BTW, I say original 
>>>>>> authors because the person that wrote the first line of code left 
>>>>>> his/her imprint on the direction of all code that follows.
>>>>>> 
>>>>>> JMHO (i mean that sincerely).
>>>>>> 
>>>>>> Ted
>>>>>> 
>>>>>>> Message: 4
>>>>>>> Date: Wed, 11 Jul 2012 10:09:08 -0500
>>>>>>> From: John Huss <johnth...@gmail.com>
>>>>>>> To: WebObjects-Dev Mailing List List <webobjects-dev@lists.apple.com>
>>>>>>> Subject: Migrating from EOF to Cayenne
>>>>>>> Message-ID:
>>>>>>> 
>>>>>>> <CAOUwSGtOwEayxK4im97HucAUANo=cfnrkq9ej5z+679bcd7...@mail.gmail.com>
>>>>>>> Content-Type: text/plain; charset="windows-1252"
>>>>>>> 
>>>>>>> At WOWODC there was a lot of interest in migrating from EOF
>>>>>>> to Cayenne, and
>>>>>>> even entirely rebasing Wonder to run on top of Cayenne
>>>>>>> instead of EOF.
>>>>>>> 
>>>>>>> *Why would anyone want to do this?  *
>>>>>>> 
>>>>>>>  1. Cayenne is open-source and is actively
>>>>>>> being developed
>>>>>>>  2. Cayenne has great concurrency support
>>>>>>> which is in stark contrast to
>>>>>>>  EOF single-threaded architecture
>>>>>>>  3. Cayenne is conceptually very similar to
>>>>>>> EOF so the transition is
>>>>>>>  fairly straightforward
>>>>>>> 
>>>>>>> For those reasons it is a much better long term solution
>>>>>>> than EOF, which is
>>>>>>> now frozen in time.  Cayenne can be used inside a WO
>>>>>>> application as an EOF
>>>>>>> replacement while continuing to use the rest of WebObjects.
>>>>>>> 
>>>>>>> *I'm interested. Now what?*
>>>>>>> 
>>>>>>>  - Learn about Cayenne. The best source of
>>>>>>> information for comparing EOF
>>>>>>>  and Cayenne is on the
>>>>>>> wiki<http://wiki.wocommunity.org/display/WO/Alternative+Technologies-Cayenne>.
>>>>>>>  In addition, you can look at the
>>>>>>> documentation<http://cayenne.apache.org/>for
>>>>>>> Cayenne.
>>>>>>>  - Use Cayenne in your new projects. 
>>>>>>> Cayenne runs just fine inside a
>>>>>>>  WebObjects application.  Wonder has
>>>>>>> the ERCayenne framework and
>>>>>>>  ERCayenneExample to help you get started.
>>>>>>> I suggest working with the trunk
>>>>>>>  of the Cayenne source (and Wonder too)
>>>>>>> since some things are just being
>>>>>>>  added to make this easier.
>>>>>>>  - Help work on easing and automating the
>>>>>>> migration from EOF to Cayenne.
>>>>>>>  It is possible to automate a large part of
>>>>>>> the work involved in moving from
>>>>>>>  EOF to Cayenne. But it requires effort.
>>>>>>> ERCayenne in Wonder has a class
>>>>>>>  that will convert an EOModel to a Cayenne
>>>>>>> model (the class is
>>>>>>>  CayenneConverter). This works well, but
>>>>>>> could be improved. I've started
>>>>>>>  working on an Eclipse refactoring script
>>>>>>> that will convert from one API to
>>>>>>>  the other. Yes, you may not have known (I
>>>>>>> didn't) that Eclipse can record a
>>>>>>>  series of refactorings and save it as a
>>>>>>> script. The bulk of the migration
>>>>>>>  work is creating refactoring scripts in
>>>>>>> Eclipse by performing refactorings
>>>>>>>  on a stubbed out version of the EOF API to
>>>>>>> convert the API into the
>>>>>>>  equivalent Cayenne API. After performing
>>>>>>> the refactorings, a script can be
>>>>>>>  exported using Refactor->"Create
>>>>>>> Script". For EOF methods that do not have
>>>>>>>  a direct Cayenne equivalent, helper
>>>>>>> methods (or classes) will need to be
>>>>>>>  written that can serve as a direct
>>>>>>> replacement.
>>>>>>> 
>>>>>>> *How can I help specifically with the migration effort?*
>>>>>>> 
>>>>>>>  - CayenneConverter in ERCayenne (for
>>>>>>> converting the model) does not
>>>>>>>  convert the connection dictionaries in the
>>>>>>> EOModel yet.
>>>>>>>  - CayenneConverter does a poor job
>>>>>>> converting fetch specs defined in the
>>>>>>>  model currently.
>>>>>>>  - We need to create new subclasses of
>>>>>>> Cayenne's DbAdapter that use the
>>>>>>>  Wonder naming convention for primary key
>>>>>>> generators/sequences. This is done
>>>>>>>  by subclassing classes like
>>>>>>> PostgresPkGenerator and overriding
>>>>>>>  sequenceName.  This is necessary to
>>>>>>> support existing databases created with
>>>>>>>  EOF.
>>>>>>>  - An Wonder-like entity template is
>>>>>>> already in ERCayenneExample. This
>>>>>>>  needs to be examined and any missing
>>>>>>> functions from WonderEntity need to be
>>>>>>>  added.  For example, I know some the
>>>>>>> .deleteAllXXXXRelationships and
>>>>>>>  .createXXXX(…) methods are missing.
>>>>>>>  - More refactorings need to created. For
>>>>>>> example, a refactoring script
>>>>>>>  should be made that changes NSArray and
>>>>>>> NSDictionary methods to the
>>>>>>>  equivalent List or Map APIs (since Cayenne
>>>>>>> doesn't use these classes for
>>>>>>>  relationships or fetch results you
>>>>>>> probably want to minimize the places you
>>>>>>>  need them).
>>>>>>>  - Submit code to Cayenne or create
>>>>>>> Jira<https://issues.apache.org/jira/browse/CAY>issues
>>>>>>> 
>>>>>>> Any questions?  :-)
>>>>>>> 
>>>>>>> John
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>> https://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>>>>>> 
>>>>>> This email sent to ch...@global-village.net
>>>>> 
>>>>> -- 
>>>>> Chuck Hill             Senior Consultant / VP Development
>>>>> 
>>>>> Practical WebObjects - for developers who want to increase their overall 
>>>>> knowledge of WebObjects or who are trying to solve specific problems.    
>>>>> http://www.global-village.net/gvc/practical_webobjects
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Do not post admin requests to the list. They will be ignored.
>>>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>> https://lists.apple.com/mailman/options/webobjects-dev/farrukh.ijaz%40fuegodigitalmedia.com
>>>>> 
>>>>> This email sent to farrukh.i...@fuegodigitalmedia.com
>>> 
>>> -- 
>>> Chuck Hill             Senior Consultant / VP Development
>>> 
>>> Practical WebObjects - for developers who want to increase their overall 
>>> knowledge of WebObjects or who are trying to solve specific problems.    
>>> http://www.global-village.net/gvc/practical_webobjects
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/kgretton%40mac.com
>> 
>> This email sent to kgret...@mac.com
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/mschrag%40pobox.com
> 
> This email sent to msch...@pobox.com

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to