Re: Integrating jars for WOFrameworks ?

From: Ken Anderson (list..nderhome.com)
Date: Fri Mar 24 2006 - 14:53:26 EST

  • Next message: Ken Anderson: "Re: Integrating jars for WOFrameworks ?"

    Marc & everyone,

    OK, my fears about this have been realized. I'm including jars in a
    framework that, in xcode, used to be integrated into the one single
    jar with the same name as the framework. When my apps look for
    classes, they're not finding ones that are in the other jars. WOLips/
    eclipse is just copying those jars into the Java directory of the
    framework.

    What's the best approach for me to get this to work? Because these
    jars cannot be shared system wide, I can't just put them in
    extensions. I could probably manually add the entire directory to
    the classpath, but that's a maintenance headache.

    Any thoughts?

    Thanks again for all your help,

    Ken

    On Mar 21, 2006, at 3:30 PM, Marc Respass wrote:

    > [snip]
    >>> XCode used to have the ability to "merge" a jar which just
    >>> unjarred then included all the classes in your jar. If that's
    >>> what you're looking for, I believe you need to write some ant
    >>> targets to do that for you.
    >>
    >> No real need to merge the jar if nothing else cares - I just
    >> always thought it merged them because it would only have a
    >> classpath to that single jar.
    >
    > Maybe it does. I have an app that uses a framework and I see the
    > following entry for it in the MacOSClassPath.txt file
    >
    > LOCALROOT/Library/Frameworks/BailModel.framework/Resources/Java/
    > bailmodel.jar
    >
    > So it's clearly going straight for the jar file in the classpath,
    > not loading every jar in Resources/Java. If you're including jars
    > with your framework, maybe they are merged in
    >
    > [snip]
    >> Yes, I'm beginning to see the advantage to this. So you're
    >> advocating building regular jars and just having the apps
    >> reference them, getting rid of the framework concept altogether.
    >> It certainly is better than installing in /Library/Frameworks all
    >> the time. Where do you store your eomodeld?
    >
    > My former boss wrote a library which I enhanced. It loads an
    > external plist as a configuration file. I store a public ivar to it
    > and then I can call valueForKeyPath on WOApplication. I set a known
    > location (/Library/EOModelFiles for instance) where I put my
    > models. I wrote a Handler which I subclass. The class stores a
    > reference to an EOModel. In the constructor, I load the model from
    > the name in the configuration file. Of course, this only works with
    > one model but that meets my needs. It's a simple matter to make a
    > key ModelNames returning an array, work through the array, and load
    > all the models.
    >
    > In my case, I'm writing a lot of apps that are nothing but web
    > service servers. I have also had a need for a lot of apps with a
    > timer that triggers an action to load data from the DB and send it
    > somewhere. I ended up writing a generic wrapper application that
    > loads the right class and the class loads the model when it's first
    > used. This has led to a very flexible app that can be reused with a
    > different configuration file so writing a new "application" really
    > means only writing a new class or two, putting it in the right
    > place in /Library/WebObjects/Extensions, and running an instance of
    > my app which loads a different config. It's all very flexible and
    > much easier to manaage than writing a new app every time with an
    > accompanying framework.
    >
    > Here's the constructor for my class.
    >
    > public Handler() {
    > if (model == null) {
    > String modelPath = RESOURCE_PATH
    > + (String) WOApplication.application
    > ().valueForKeyPath("config.ModelName");
    > modelPath = modelPath + ".eomodeld";
    > logger.debug("Attempting to load model at path " +
    > modelPath);
    >
    > URL modelPathURL = null;
    > try {
    > modelPathURL = URLUtilities.urlForFilePath(modelPath);
    > model = new EOModel(modelPathURL);
    > EOModelGroup.defaultGroup().addModel(model);
    > logger.info("loaded model at path: " + modelPath);
    > } catch (MalformedURLException e) {
    > logger.fatal("Unable to load required EOModel at
    > url: " + modelPathURL);
    > System.exit(1);
    > }
    > }
    > }
    >
    >



    This archive was generated by hypermail 2.0.0 : Fri Mar 24 2006 - 14:53:29 EST