On 2010-12-15, at 1:43 PM, Ricardo J. Parada wrote:
> Thanks David.
>
> I noticed those __Clazz classes are then declared in the EOs as "public
> static class". I read the article below to figure what that meant. I'm
> still learning java I guess :-)
>
> http://www.javaworld.com/javaworld/javaqa/2001-08/01-qa-0817-static.html?page=1
>
> So I'm trying to put it together. My Foo.java would have a clazz static
> variable referencing an instance of FooClazz. I can add methods to FooClazz
> in my Foo.java.
> So then FooClazz extends _FooClazz which could have some static methods.
>
> Are we saying that when I define my FooClazz methods I implement them by
> calling _FooClazz static methods or I can rewrite (i.e. override) if needed?
>
> I think I'm getting there... I ought to try it I guess. :-)
I think the key to the use of Clazz in EOs is this line from the article above:
"Instead, instances of Justification act as constants that work with any
instance of Text. That's why we can get away with declaring Justification
static; it is independent of any specific Text instances."
The methods inside whatever class (Clazz) you declare as static inside an EO
should be independent of any specific instance. You can call something like
People.clazz.currentUser located inside the Person class because it isn't
dependent on an instance of the Person class. The "currentUser" should return
the same result regardless of where you're calling the accessor from, whereas
something like a fullName() method can't be in the static member class because
it relies on a specific Person instance to be able to give you a result.
If you look at Bug.java, you'll see the static BugClazz contains things like
qualifiers, fetchSpecification and arrays of objects that shouldn't be
dependent on a specific instance of Bug.
That's my understanding from reading the above article and watching the errors
that Eclipse gives me when I try to access a static method or variable
incorrectly.
HTH,
David
>
>
>
> On Dec 14, 2010, at 5:57 PM, David Holt wrote:
>
>>
>> On 2010-12-14, at 2:20 PM, Ricardo J. Parada wrote:
>>
>>>
>>> I've always wondered what that clazz thingy is. I'm still not sure. I
>>> read the javadoc on EOEnterpriseObjectClazz but still I don't quite get it.
>>> What is it? Maybe a little example will go a long way in understanding. :-)
>>
>> Hi Ricardo,
>>
>> You're not alone :-)
>>
>> To date I've been following BugTracker as an example to let me integrate the
>> pattern into my D2W applications to give me really fine control of what
>> objects I'm displaying in lists.
>>
>> I'm probably not understanding all that the Clazz pattern adds to the mix,
>> but using it has allowed me to start understanding Anjo's example
>> BusinessLogic in BugTracker and use the patterns I've found in my own code,
>> and I know that it has improved my D2W applications considerably.
>>
>> Here is an example I use inside DocumentClazz
>>
>> // Class methods go here
>> public static class DocumentClazz extends _Document._DocumentClazz {
>>
>> public EOFetchSpecification
>> fetchSpecificationForWorkingGroupDocumentsForDeletion(WorkingGroup wg) {
>> // selected working group, marked for Deletion
>> EOFetchSpecification fs =
>> Document.fetchSpec().qualify(Document.WORKING_GROUP.eq(wg).and(Document.IS_FOR_DELETION.eq(true)));
>> return fs;
>> }
>> }
>>
>> Now when I need to get a list of documents from an action triggered from a
>> navigation tab in my application I can use a method such as:
>>
>> // DELETION TAB
>> public WOComponent listDocumentsForDeletion() {
>> EOEditingContext ec = ERXEC.newEditingContext();
>> ec.lock();
>> WorkingGroup selectedWG = (WorkingGroup) WorkingGroup.wg(ec);
>> try {
>> EODatabaseDataSource ds = Document.clazz.newDatabaseDataSource(ec);
>> EOFetchSpecification fs =
>> Document.clazz.fetchSpecificationForWorkingGroupDocumentsForDeletion(selectedWG);
>> ds.setFetchSpecification(fs);
>> return (WOComponent) listPageNamed("ListDocumentsForDeletion", ds);
>> }
>> finally {
>> ec.unlock();
>> }
>>
>> }
>>
>> David
>>
>>
>>>
>>>
>>> On Dec 14, 2010, at 5:15 PM, David Holt wrote:
>>>
>>>> Hi Anjo,
>>>>
>>>> On 2010-12-14, at 1:34 PM, Anjo Krank wrote:
>>>>
>>>>> There is a reason why stuff in BT is done as it is.
>>>>>
>>>>> I.e. there is a People.class.setCurrentUser(People user) and
>>>>> People.class.currentUser(EOEditingContext ec). Basically it puts all the
>>>>> thread storage code (including the key) in People, which is, like, good
>>>>> style?
>>>>
>>>> Absolutely agree. But it was difficult for me to wrap my head around
>>>> ERXThreadStorage AND Clazz pattern AND ERCoreBusinessLogic at the same
>>>> time. I was just trying to simplify it a little for Jesse. There is no
>>>> question that all three together are much more powerful and useful.
>>>>
>>>>>
>>>>> Also, ERXThreadStorage already handles EOs and faulting.
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> David
>>>>
>>>>>
>>>>> Cheers, Anjo
>>>>>
>>>>>
>>>>>
>>>>> Am 14.12.2010 um 21:57 schrieb David Holt:
>>>>>
>>>>>> public static Person currentUser(EOEditingContext ec) {
>>>>>> Person currentUser = currentUser();
>>>>>> if (currentUser != null && currentUser.editingContext() != ec) {
>>>>>> EOEditingContext currentUserEc =
>>>>>> currentUser.editingContext();
>>>>>> currentUserEc.lock();
>>>>>> try {
>>>>>> Person localUser = (Person)
>>>>>> ERXEOControlUtilities
>>>>>> .localInstanceOfObject(ec,
>>>>>> currentUser);
>>>>>> currentUser = localUser;
>>>>>> } finally {
>>>>>> currentUserEc.unlock();
>>>>>> }
>>>>>> }
>>>>>> return currentUser;
>>>>>> }
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Do not post admin requests to the list. They will be ignored.
>>>>> Webobjects-dev mailing list ([email protected])
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>> http://lists.apple.com/mailman/options/webobjects-dev/programmingosx%40mac.com
>>>>>
>>>>> This email sent to [email protected]
>>>>
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list ([email protected])
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/webobjects-dev/rparada%40mac.com
>>>>
>>>> This email sent to [email protected]
>>>
>>
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]