• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Prevent NEW in D2W?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Prevent NEW in D2W?


  • Subject: Re: Prevent NEW in D2W?
  • From: Chuck Hill <email@hidden>
  • Date: Tue, 30 Aug 2011 17:16:36 -0700

On 2011-08-30, at 5:03 PM, Q wrote:

>
> On 30/08/2011, at 3:44 PM, David Avendasora wrote:
>
>>
>> On Aug 29, 2011, at 11:43 PM, Markus Ruggiero wrote:
>>
>>> Thanks Ramsey,
>>>
>>> This is a completely standalone table with no relationships that contains one record with a couple attributes that define the configuration of the app. I was so deep into doing everything without programming that I missed the obvious. Your answer triggered the following solution: Having a simple page with a message and only a CANCEL button for the Create* pageConfiguration should solve my problem.
>>
>> Beware. That solution only prevents creating new instances of your class when the creation is called using D2W, and then only for ways of creating it that match your rule. Any other code can still very simply call:
>>
>> EOUtillities. createAndInsertInstance(editingContext, "MySingleton")
>>
>> and get a new instance.
>>
>> At a minimum, you should override all the easy ways to create a new instance in the class to simply return the Singleton instead of actually creating a new one.
>>
>> I think a better solution (off the top of my head, not tested, Chuck will probably say it's all wrong, yadda, yadda) would be:
>
> Close, not Chuck. :)
>
>>
>> public class MySingletonEO {
>>
>>    private static MySingletonEO singleton = null;
>>
>>    public MySingletonEO() {
>>      // Don't call super() so this will stop instantiation.
>>      // Not sure what EOF will do, probably die horribly,
>>      // but really, that's okay, right?!
>>    }
>
> Bug #1: This doesn't work. The java compiler always inserts an implicit super() call, if no such constructor exists in the parent the class will not compile. The only thing you can do to prevent instantiation is to throw an exception in the constructor or make the constructor private.
>
>>    public static MySingletonEO initialize(EOEditingContext editingContext) {
>>       if(singleton == null) {
>>           singleton  = EOUtilities.faultWithPrimaryKeyValue(editingContext,
>>                                                            MySingletonEO.ENTITY_NAME,
>>                                                            Integer.valueOf(123456789)));
>>       }
>>       return singleton;
>>    }
>> }
>
> Bug #2: This is a race condition. This method is not synchronised, so you could end up returning more than one "singleton" instance in a threaded environment.
> Bug #3: If this method is called more than once the returned EO may not have been inserted into the provided editing context creating the potential for changes to be lost if saveChanges is called on the wrong ec.

Yeah, a singleton EO makes no sense as you need a separate instance in each EC (unless you want to use the Shared EC).


   public static MySpecialEO instance(EOEditingContext editingContext) {
      return EOUtilities.faultWithPrimaryKeyValue(editingContext,
                                                           			MySingletonEO.ENTITY_NAME,
                                                           			Integer.valueOf(123456789)));
   }

Is probably closer to what  you want.


Chuck

>
>>> Thanks Ramsey, it is not the first time that your input has helped me further.💐
>>
>> Funny, now you'll probably be saying "Thanks Dave, it's not the first time your input has completely screwed me over."
>>
>> Dave
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden

--
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/products/practical_webobjects







 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Prevent NEW in D2W?
      • From: David Avendasora <email@hidden>
References: 
 >Prevent NEW in D2W? (From: Markus Ruggiero <email@hidden>)
 >Re: Prevent NEW in D2W? (From: Ramsey Gurley <email@hidden>)
 >Re: Prevent NEW in D2W? (From: Markus Ruggiero <email@hidden>)
 >Re: Prevent NEW in D2W? (From: David Avendasora <email@hidden>)
 >Re: Prevent NEW in D2W? (From: Q <email@hidden>)

  • Prev by Date: Re: Prevent NEW in D2W?
  • Next by Date: WOCollapsibleComponentContent broken?
  • Previous by thread: Re: Prevent NEW in D2W?
  • Next by thread: Re: Prevent NEW in D2W?
  • Index(es):
    • Date
    • Thread