Re: Practical WO Book Demos

From: Chuck Hill (chil..lobal-village.net)
Date: Thu Oct 25 2007 - 19:07:20 EDT

  • Next message: James Cicenia: "Feeling stupid about Frameworks..."

    Was JavaMail installed in /Library/Java/Extensions? IIRC, it
    searches in classpath order for something named Session.

    In any case, your code makes a lot more sense than what WO normally
    does. :-)

    Chuck

    On Oct 25, 2007, at 3:59 PM, Kieran Kelleher wrote:

    > FYI,
    >
    > Recently, a developer on one team I work on had this exact problem
    > in Deployment. App ran fine in development from Eclipse, but in
    > deployment the app was trying to use java mail Session instead of
    > app Session. This workaround was necessary to fix it.
    >
    > Regards, Kieran
    >
    > On Oct 25, 2007, at 5:34 PM, Chuck Hill wrote:
    >
    >>
    >> On Oct 25, 2007, at 11:13 AM, Fred Shurtleff wrote:
    >>
    >>> This did the trick - the app now runs ok. Thank you very much.
    >>>
    >>> But it does raise the question WHY this code is needed when there
    >>> is only one Session file in all the projects I have imported into
    >>> Eclipse. Seems very odd to me.
    >>
    >> It is probably a problem with the Eclipse launcher configuration
    >> for this project. I am not sure why it would affect just this one.
    >>
    >>
    >> Chuck
    >>
    >>>
    >>> Fred (see further below)
    >>>
    >>> Kieran Kelleher wrote:
    >>>> Just copy/paste this code below into your Application class and
    >>>> assuming your Session class is in the same package as your
    >>>> Application class, this will solve the WebObjects bad
    >>>> implementation for identifying the Session class
    >>>>
    >>>> private Class _ourSessionClass;
    >>>>
    >>>> /* (non-Javadoc)
    >>>> *..ee com.webobjects.appserver.WOApplication#_sessionClass()
    >>>> * WebObjects searches the classpath and uses the first
    >>>> class it finds with
    >>>> * the name Session ... crazy huh? This ensures that Session
    >>>> from the same package as the
    >>>> * Application class is used
    >>>> */
    >>>> ..verride
    >>>> protected Class _sessionClass()
    >>>> {
    >>>> if (_ourSessionClass == null) {
    >>>> String ourSessionClassName = null;
    >>>> try {
    >>>> ourSessionClassName = getClass().getPackage
    >>>> ().getName() + ".Session";
    >>>> System.out.println("Using " +
    >>>> ourSessionClassName + " as the application's Session class.");
    >>>> _ourSessionClass = Class.forName
    >>>> ( ourSessionClassName );
    >>>> } catch ( Exception e ) {
    >>>> System.err.println( "What have you done with
    >>>> your " + ourSessionClassName + " class?!\n" + e.getStackTrace() );
    >>>> }
    >>>> } //~ if (_ourSessionClass == null)
    >>>> return _ourSessionClass;
    >>>> }
    >>>>
    >>>>
    >>>> HTH, Kieran
    >>>>
    >>>> On Oct 24, 2007, at 12:51 PM, Chuck Hill wrote:
    >>>>
    >>>>> It sounds like you may have a classpath issue and that the
    >>>>> Session class getting loaded is something like
    >>>>> java.mail.Session instead of the Session class in this project.
    >>>>>
    >>>>> Try adding this to the constructor in Main:
    >>>>>
    >>>>> NSLog.out.appendln("Session class is " + session().getClass
    >>>>> ().getName());
    >>>>>
    >>>>> Chuck
    >>>>>
    >>> This statement did not report nothing (that is no fixed text nor
    >>> the Session name). But I don't know why - perhaps I positioned in
    >>> the wrong place (I put it in public Main - right after the super
    >>> (context) statement.
    >>>>>
    >>>>> On Oct 3, 2007, at 9:02 AM, Fred Shurtleff wrote:
    >>>>>
    >>>>>> Thanks for your suggestions, but unfortunately, deleting
    >>>>>> unused projects did NOT have any effect. I deleted all
    >>>>>> projects EXCEPT PracticalUtilities, EOJDBCPrototypes, and
    >>>>>> PWOExampleApp, which are all companion apps specified in the
    >>>>>> PWO Book setup instructions. And furthermore, I checked each
    >>>>>> of these projects and there is no Session.java file - so this
    >>>>>> leaves only 1 Session file in all of Eclipse - that being in
    >>>>>> the Chap4App project.
    >>>>>>
    >>>>>> Regards the bindings tip, I do NOT see a proper validation
    >>>>>> performed in this case - Main.wod. I actually changed the
    >>>>>> binding > condition = session.isUserAuthenticated; to an
    >>>>>> erroneous method (isUserAuthenticatedX) and changed the title
    >>>>>> in the HTML file to trigger a re-validation, but this
    >>>>>> validated OK - there was no red X indicating a problem.
    >>>>>>
    >>>>>> And as previously mentioned, I changed the session syntax to
    >>>>>> Session(with a capital S), but this triggered an error re no
    >>>>>> 'Session' class found. So I interpret this to mean that it is
    >>>>>> finding the session class, but for some reason cannot find any
    >>>>>> of the class methods (ie. generates an NSKeyValueCoding
    >>>>>> exception > UnknownKeyException > lookup for unknown key:
    >>>>>> isUserAuthenticated).
    >>>>>>
    >>>>>> This is very puzzling in that something about this particular
    >>>>>> project fails, whereas the other demos run/build Ok.
    >>>>>>
    >>>>>> Fred
    >>>>>>
    >>>>>> D Tim Cummings wrote:
    >>>>>>> On 29/09/2007, at 7:59 AM, Fred Shurtleff wrote:
    >>>>>>>
    >>>>>>>> Actually each chapter is a separate project which gets
    >>>>>>>> imported into Eclipse, and, of course, contains only 1
    >>>>>>>> Session class. Furthermore I have not made ANY change to the
    >>>>>>>> project files ie. Main or Session.java, nor the Main.wod
    >>>>>>>> files. I simple want to demo their technique of managing
    >>>>>>>> security using a few methods in the session class to control
    >>>>>>>> access to various public/secure areas in the application.
    >>>>>>>>
    >>>>>>> I find sometimes if I have several projects open in eclipse,
    >>>>>>> WO Component Editor validates against the wrong Session or
    >>>>>>> Application class. Closing the unused projects fixes the
    >>>>>>> problem.
    >>>>>>>
    >>>>>>>> WOComponentEditor does not complain about the bindings -
    >>>>>>>> that is there are no red X's or other symbols indicating a
    >>>>>>>> problem. Matter of fact, I did change the binding to
    >>>>>>>> 'Session.isUserAuthenticated'(with a capital S since WOLips
    >>>>>>>> does create a default Session.java file), and when I ran the
    >>>>>>>> app it did complain that there was no 'Session' class. So I
    >>>>>>>> interpret this to mean the session class is referenced Ok,
    >>>>>>>> but none of the session class methods or variables are
    >>>>>>>> accessible. But I can't see why!
    >>>>>>>>
    >>>>>>>
    >>>>>>> You need to make a small change, eg add a space to the html,
    >>>>>>> to the WOComponent and save it to trigger WO Component Editor
    >>>>>>> to revalidate the bindings.
    >>>>>>>
    >>>>>>> Session.isUserAuthenticated will be looking first for a
    >>>>>>> method in your component called Session() or getSession()
    >>>>>>> which won't work
    >>>>>>>
    >>>>>>> session.isUserAuthenticated will be looking first for a
    >>>>>>> method session() which exists in WOComponent which your
    >>>>>>> component extends. WOComponentEditor must do some funky
    >>>>>>> stuff to determine that session() returns an object of type
    >>>>>>> Session rather than type WOSession to complete the validation.
    >>>>>>>
    >>>>>>> Tim
    >>>>>>>
    >>>>>>>> I am totally stumped on this one.
    >>>>>>>>
    >>>>>>>> Jean Pierre Malrieu wrote:
    >>>>>>>>> My guess is that there are several "Session" classes
    >>>>>>>>> corresponding to different chapters in the book, and that
    >>>>>>>>> somehow, you are using the wrong "Session" (from a previous
    >>>>>>>>> chapter?) which does not have the required variables and
    >>>>>>>>> functions.
    >>>>>>>>> What does WOComponentEditor say about the bindings? Does it
    >>>>>>>>> complain?
    >>>>>>>>>
    >>>>>>>>> jpm
    >>>>>>>>>
    >>>>>>>>>
    >>>>>>>>>
    >>>>>>>>> Le 28 sept. 07 à 19:56, Fred Shurtleff a écrit :
    >>>>>>>>>
    >>>>>>>>>> Yes - this is the conditional causing the exception. So I
    >>>>>>>>>> changed the condition = true (to get around this problem),
    >>>>>>>>>> and then another 'unknown key' exception is triggered:
    >>>>>>>>>> authenticatedUser is unknown(but is in fact a public
    >>>>>>>>>> method in session.java).
    >>>>>>>>>>
    >>>>>>>>>> So for some reason none of the bindings on Main.wod using
    >>>>>>>>>> session PUBLIC methods/vars are recognizable eg. they
    >>>>>>>>>> trigger exception errors. Can anyone see what might be the
    >>>>>>>>>> problem here?
    >>>>>>>>>>
    >>>>>>>>>> Jean Pierre Malrieu wrote:
    >>>>>>>>>>> Without taking a look at the book, or the code, so just a
    >>>>>>>>>>> guess: Did you try changing the wod to
    >>>>>>>>>>>
    >>>>>>>>>>> Conditional: WOConditional {
    >>>>>>>>>>> condition = session.isUserAuthenticated;
    >>>>>>>>>>> }
    >>>>>>>>>>>
    >>>>>>>>>>> ?
    >>>>>>>>>>>
    >>>>>>>>>>>
    >>>>>>>>>>> jpm
    >>>>>>>>>>>
    >>>>>>>>>>> Le 27 sept. 07 à 21:49, Fred Shurtleff a écrit :
    >>>>>>>>>>>
    >>>>>>>>>>>> Has anyone been able to run the Chapter4App demo from
    >>>>>>>>>>>> the Practical WebObjects Book by Hill & Mallais?
    >>>>>>>>>>>>
    >>>>>>>>>>>> I am unable to get this project to run - it raises an
    >>>>>>>>>>>> Exception > An instance variable or method of the name
    >>>>>>>>>>>> 'isUserAuthenticated' is not found(this is a
    >>>>>>>>>>>> WOConditional binding on the Main page). But
    >>>>>>>>>>>> 'isUserAuthenticated' is, in fact, a method in
    >>>>>>>>>>>> Session.java. So I am now at a dead end.
    >>>>>>>>>>>>
    >>>>>>>>>>>> Thanks for any ideas or suggestions.
    >>>>>>>>>>>>
    >>>>>>>>>>>>
    >>>>>>>>>>>
    >>>>>>>>>>>
    >>>>>>>>>>>
    >>>>>>>>>>
    >>>>>>>>>>
    >>>>>>>>>>
    >>>>>>>>>
    >>>>>>>>>
    >>>>>>>>>
    >>>>>>>>
    >>>>>>>>
    >>>>>>>>
    >>>>>>>
    >>>>>>>
    >>>>>>>
    >>>>>>
    >>>>>>
    >>>>>>
    >>>>>
    >>>>> --
    >>>>>
    >>>>> 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
    >>>>>
    >>>>>
    >>>>>
    >>>>>
    >>>>>
    >>>>
    >>>>
    >>>>
    >>>
    >>>
    >>>
    >>
    >> --
    >>
    >> 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
    >>
    >>
    >>
    >>
    >>
    >
    >

    -- 
    

    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



    This archive was generated by hypermail 2.0.0 : Thu Oct 25 2007 - 19:08:30 EDT