Re: Thanks and raw sql statements and more

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Mon Sep 11 2006 - 14:13:00 EDT

  • Next message: Dave Dombrosky: "Re: Exception with Tomcat's session restore capability"

    Hi Peter,

    Glad Cayenne worked out well for you and thanks for sharing Derby
    experience.

    On Sep 8, 2006, at 5:20 PM, Peter Karich wrote:
    > If I create a new object, can I query the database (e.g. a
    > SelectQuery) without a commit? I tried this, but it does not work?
    > Should'nt I get this object from the cache instead of the db if it
    > is new?

    No you can't, as all queries (except for ObjectIdQuery) are not
    matched against individual objects in the cache. Doing it otherwise
    would turn Cayenne into RDBMS itself :-) If this is really important,
    there are workarounds involving external transactions. If you really
    need that and ready to jump a few hoops, we can discuss the details.

    > How to get the available column headers, not only the headers which
    > I defined in the modeler? (I wanted that users of gstpl can change
    > the columns of my tables from within gstpl.)

    > I tried SelectQuery select = new SelectQuery(tableName);
    > QueryMetadata meta = select.getMetaData(getContext
    > ().getEntityResolver());
    > Iterator iter = meta.getDbEntity().getAttributes().iterator();
    > colDefinition = new HashSet();
    > while(iter.hasNext()) colDefinition.add(((DbAttribute)iter.next
    > ()).getName());)

    You are on the right track here. The only change - you need to map
    ALL table columns in the DbEntity, but only map a subset of them in
    the ObjEntity.

    > What could happen if I make a raw sql update statement? (Docs says:
    > '... and therefore may potentially leave object graph in an
    > inconsistent state.') What does this mean for me as programmer?

    It means stale data. E.g.:

    // initial object state
    assertEquals("a", myArtist.getName());

    // run "update artist set name = 'b' where name = 'a'"

    // this will fail, as the artist name is still 'a' in memory
    assertEquals("b", myArtist.getName());

    What you can do is DataContext.invalidateObjects() if you can guess
    which artists are affected. Also 3.0 release introduces a
    RefreshQuery [1] that allows to invalidate groups of objects. Though
    3.0 is not yet released, and you'd have to build it yourself from SVN.

    > Does cayenne support user management in any sense?

    No.

    > Why or when should I use 'Remote Object Persistenc'? (Sorry for
    > that newbie question ...)

    Most common scenario are desktop (Swing or SWT) apps that should not
    or can not access the DB directly.

    > Which license-agreement-files should I add for gstpl? (it only uses
    > the cayenne.jar)

    Each release contains a Cayenne license file (and licenses for all
    dependencies) that you need to include with the distribution of any
    Cayenne-based software. In 1.2 the licenses are located under
    "cayenne_install_dir/docs/licences/" directory. Since you do not
    distribute the modeler, you'll need "LICENSE" and "LICENSE.apache"
    files.

    > Last but not least: How do you earn money with cayenne?

    If anybody knows the answer to this question, I'd like to know too :-)

    Seriously, most folks who are involved in development (myself
    included) are software consultants using Cayenne as a part of the
    stack when implementing solutions for their customers. Second common
    way (that is also a variety of consulting) is training and support
    for the framework.

    I guess a self-plug is due here - yes sometimes I do charge money to
    solve Cayenne problems :-)

    [1] http://cwiki.apache.org/confluence/display/CAY/RefreshQuery

    Andrus



    This archive was generated by hypermail 2.0.0 : Mon Sep 11 2006 - 14:13:08 EDT