uPortal IRC Logs-2007-02-15

[09:16:14 CST(-0600)] <EricDalquist> time to start another day of unit test fixing
[09:23:22 CST(-0600)] <lescour> ugh...ampersands are allowed in passwords here, and uportal doesn't like this
[09:32:05 CST(-0600)] <esm> hooray for unit tests
[09:32:07 CST(-0600)] * esm cheers
[09:32:30 CST(-0600)] <EricDalquist> what part of uP doesn't like the &?
[09:32:48 CST(-0600)] <lescour> oh..nvr mind..it looks like it's coming out of unicon code
[09:34:06 CST(-0600)] <EricDalquist> ah
[09:45:53 CST(-0600)] <lescour> don't sweat it andrew..just keep working on 2.1 pls
[10:26:05 CST(-0600)] <andrew_petro_ubu> I won't sweat it. For the record, since this chat is archived and Googleable and all that good stuff, you are welcome to enter a support request, in response to which it'll go into the queue to get looked at, acknowledged, release-noted and KBA'ed, and eventually fixed in some appropriate way. If you don't, I'm going to pretend no one told me about this issue, because I can't get into the habit of launching that support lifecycle off of rumou
[10:26:46 CST(-0600)] <andrew_petro_ubu> It's interesting getting into this product support / development role. The number of issues people encounter, are annoyed by, but don't report so they don't get addressed, is more than I would have expected. A learning experience.
[10:27:17 CST(-0600)] <EricDalquist> I can imagine
[10:27:35 CST(-0600)] <esm> you don't know what you don't know (smile)
[10:27:58 CST(-0600)] <andrew_petro_ubu> Also for the record, there's some nonzero chance this is actually a uPortal issue, not an Academus-unique issue. Not that I'm trying to shift blame around. But as a casual academus developer response: there's just not that much Academus-custom code in the login workflow.
[10:28:46 CST(-0600)] <EricDalquist> I wouldn't be supprised if it is some XML/HTML escaping issue with the login form being used
[10:29:04 CST(-0600)] <EricDalquist> since that is the main thing that an & would cause issues with
[10:30:02 CST(-0600)] <EricDalquist> in which case it could just be the UI for that particular portal that is root of the problem
[11:34:24 CST(-0600)] <EricDalquist> any hibernate experiance here?
[11:36:06 CST(-0600)] <andrew_petro_ubu> minimal on my part
[11:37:09 CST(-0600)] <EricDalquist> any idea how to get it to set NULL instead of an empty List if there is no data in the DB for the List?
[11:37:34 CST(-0600)] <EricDalquist> one of this issues where a null and an empty List have different meaning
[11:37:37 CST(-0600)] <EricDalquist> meanings*
[12:15:35 CST(-0600)] <esm> EricDalquist: let me check
[12:21:32 CST(-0600)] <esm> "Collections obey the usual rules for value types: no shared references, created and deleted along with containing entity. Due to the underlying relational model, they do not support null value semantics; Hibernate does not distinguish between a null collection reference and an empty collection."
[12:21:49 CST(-0600)] <esm> :/
[13:29:25 CST(-0600)] <EricDalquist> oh well
[13:29:46 CST(-0600)] <EricDalquist> I'm very tempted to ditch dbloader in my efforts to fix the DAOs
[13:30:00 CST(-0600)] <EricDalquist> dealing with assigned keys makes the hibernate mappings much more complicated
[13:30:16 CST(-0600)] <EricDalquist> but if I do that I have to write a whole data import scheme
[13:30:26 CST(-0600)] <EricDalquist> which I don't want to do right now
[13:33:33 CST(-0600)] <esm> hmm
[13:33:53 CST(-0600)] <esm> what do you mean by "assigned keys"
[13:53:45 CST(-0600)] <EricDalquist> right now uP3 generates all object IDs internally
[13:54:24 CST(-0600)] <EricDalquist> so when you create a new PortletDefinitionTransferImpl the DAO uses this Incrementer interface with the appropriate ID Factory to create the needed IDs
[13:54:38 CST(-0600)] <EricDalquist> the problem is Hibernate has a hard time knowing if an object has been saved or not
[13:54:52 CST(-0600)] <EricDalquist> which causes problems unless we add a lot of code to manually save every object we create
[14:04:18 CST(-0600)] <esm> i probably don't understand the issue enough to be helpful
[14:04:43 CST(-0600)] <esm> if an object is associated with a hibernate session, then hibernate should be aware of the object's state
[14:05:17 CST(-0600)] <esm> anyway... i don't know the code so I don't really understand the issue
[14:05:35 CST(-0600)] <EricDalquist> no problem (smile)
[14:05:53 CST(-0600)] <esm> (smile)
[14:06:28 CST(-0600)] <esm> in general though, hibernate should be very good at knowing if an object has been saved or not
[14:06:34 CST(-0600)] <esm> since that is what hibernate does (smile)
[14:06:40 CST(-0600)] <EricDalquist> it should
[14:06:49 CST(-0600)] <EricDalquist> but it isn't when using assigned IDs
[14:07:12 CST(-0600)] <EricDalquist> since it has no way to know if the object has been saved without doing a query for the object
[14:07:28 CST(-0600)] <EricDalquist> when using hibernate generated IDs you specify an unsaved value
[14:07:46 CST(-0600)] <EricDalquist> that way the code can do a quick check to see if an object needs saving
[14:08:13 CST(-0600)] <EricDalquist> if you want to use assigned IDs you end up needing to be very carefull and manually calling save() on each object in the tree in the right order
[14:08:24 CST(-0600)] <esm> yes that is true
[14:08:40 CST(-0600)] <EricDalquist> the only reason we're using assigned IDs is because of DBloader
[14:09:06 CST(-0600)] <EricDalquist> so I think I'm going to just bite the bullet and change things to generated IDs and whip up some easy import/export XML format for uPortal data
[14:09:10 CST(-0600)] <EricDalquist> that goes through the DAOs
[14:09:31 CST(-0600)] <esm> what if you load() the object into the Session first?
[14:10:51 CST(-0600)] <esm> if the object is in a Session, then - from what I'm reading - Hibernate should be clued, regardless of whether or not generated or assigned ids are used
[14:11:04 CST(-0600)] <EricDalquist> this is an issue for the first time an object is stored
[14:11:20 CST(-0600)] <esm> ok so it isi going from Transient to Persistent
[14:11:23 CST(-0600)] <esm> got it
[14:11:29 CST(-0600)] <EricDalquist> and we don't nessesarily want to load() every time
[14:11:32 CST(-0600)] <EricDalquist> since sessions are short
[14:11:35 CST(-0600)] <esm> yeah
[14:11:41 CST(-0600)] <EricDalquist> but the transfer objects are long lived in the cache
[14:16:35 CST(-0600)] <lescour> i've found it easier to deal with hibernate (and rails too) by letting them have their default key behaviour
[14:20:00 CST(-0600)] <esm> saveOrUpdate() does the following:
[14:20:00 CST(-0600)] <esm> *
[14:20:00 CST(-0600)] <esm> if the object is already persistent in this session, do nothing
[14:20:00 CST(-0600)] <esm> *
[14:20:00 CST(-0600)] <esm> if another object associated with the session has the same identifier, throw an exception
[14:20:00 CST(-0600)] <esm> *
[14:20:02 CST(-0600)] <esm> if the object has no identifier property, save() it
[14:20:04 CST(-0600)] <esm> *
[14:20:06 CST(-0600)] <esm> if the object's identifier has the value assigned to a newly instantiated object, save() it
[14:20:08 CST(-0600)] <esm> *
[14:20:10 CST(-0600)] <esm> if the object is versioned (by a <version> or <timestamp>), and the version property value is the same value assigned to a newly instantiated object, save() it
[14:20:13 CST(-0600)] <esm> *
[14:20:15 CST(-0600)] <esm> otherwise update() the object
[14:20:17 CST(-0600)] <esm> (phew, no flood kick)
[14:23:06 CST(-0600)] <esm> we have a vendor who is recommending that we triple the amount of ram for their product (its java based)
[14:23:11 CST(-0600)] <esm> they think we have a memory problem.
[14:23:29 CST(-0600)] <esm> visualgc (still 1.4) says otherwise, and they won't listen to us
[14:24:27 CST(-0600)] <esm> with the hardware configuration they recommend you could run the weather service climate prediction algorithms
[14:31:04 CST(-0600)] <EricDalquist> lol
[14:31:31 CST(-0600)] <EricDalquist> so I just discovered an issue with our IObjectIdsa
[14:31:46 CST(-0600)] <EricDalquist> we can't use the "native" hibernate ID generation with custom object ID types
[14:57:49 CST(-0600)] <EricDalquist> actually
[14:57:51 CST(-0600)] <EricDalquist> scratch that
[14:58:07 CST(-0600)] <EricDalquist> I just need to change the persisted IObjectIds to be BIGINTs instead of VARCHARs then it would work
[14:58:13 CST(-0600)] <EricDalquist> that can wait till later
[14:58:17 CST(-0600)] <EricDalquist> I think I have some hack working
[14:58:51 CST(-0600)] <EricDalquist> next big thing after pluto & maven will be DAOimpl agnostic data files
[14:59:06 CST(-0600)] <EricDalquist> any thoughts out there on ways to do that?
[14:59:21 CST(-0600)] <EricDalquist> do we invent custom XML schemas for each domain objects?
[14:59:41 CST(-0600)] <EricDalquist> Just use the Java XMLEncoder/XMLDecoder APIs?
[15:00:01 CST(-0600)] <esm> if all you want is ser/deser then XStream may be enough
[15:00:17 CST(-0600)] <esm> but if you want databinding you'd need JAXB or something like it
[15:00:49 CST(-0600)] <esm> ugh
[15:01:48 CST(-0600)] <esm> how many different types of domain objects are there
[15:02:56 CST(-0600)] <esm> If you use xstream, most likely each domain object would need an XStream converter.
[15:03:15 CST(-0600)] <esm> You can use XStream with a parser that supports validation
[15:03:37 CST(-0600)] <esm> so if there are just a handful of domain objects, XStream may be viable
[15:04:25 CST(-0600)] <esm> OTOH, the Pluto 286 guys are using JAXB with annotations; i've never used JAXB+annotations - i got turned off to JAXB in the 1.4 days
[15:05:08 CST(-0600)] <esm> http://xstream.codehaus.org
[15:22:35 CST(-0600)] <EricDalquist> there are quite a few domain objects
[15:23:49 CST(-0600)] <EricDalquist> my 'dream' requirements would be one bit of code or mappings to do both serialization and deserialization and a resulting XML file that can be edited by a human fairly easily (having an XSD associated with the XML file would be even better)
[15:34:27 CST(-0600)] <EricDalquist> on a side note ... I didn't realize how much of our design was influenced by pluto 1.0
[15:34:36 CST(-0600)] <EricDalquist> there is so much cleanup I can do now
[15:41:13 CST(-0600)] <esm> heh yeah. up3 was awfully polluted with pluto-influence code
[15:41:30 CST(-0600)] <esm> which is not saying anything bad about up3 mind you...
[15:42:00 CST(-0600)] <esm> if the domain objects have common data types, Xstream's converters could be re-used
[15:42:21 CST(-0600)] <EricDalquist> cool, I'll keep that in mind
[15:42:24 CST(-0600)] <esm> the XML xstream produces is pretty-printed and suitable for human ediiting
[15:42:28 CST(-0600)] <EricDalquist> nice
[15:42:56 CST(-0600)] <EricDalquist> it looks like it doesn't generate XSDs but that doesn't mean we can't hand-write them ourselves
[15:46:29 CST(-0600)] <esm> right it won't
[15:46:31 CST(-0600)] <esm> https://bajor.mse.jhu.edu/repos/public/trunk/scratch/esm/JiraRest/src/main/java/edu/jhu/library/atlassian/services/jirarest/builder/impl/
[15:46:45 CST(-0600)] <esm> click through the ssl errors and those are converters I wrote for a project
[15:46:54 CST(-0600)] <esm> i use relaxng
[15:47:11 CST(-0600)] <esm> XSD is painful IMHO, and relaxng is so much easier to write and read
[15:47:19 CST(-0600)] <esm> Jing is a relaxng validator
[15:48:06 CST(-0600)] <esm> IssueConverter.java calls the other converters
[15:48:13 CST(-0600)] <EricDalquist> cool
[15:48:32 CST(-0600)] <esm> i can reuse the converters in different xml documents
[15:48:52 CST(-0600)] <EricDalquist> thats nice
[15:48:54 CST(-0600)] <esm> but i will admit there is a lot of scaffolding-type code in using XStream
[15:49:03 CST(-0600)] <esm> e.g. you have to write the converters
[15:49:41 CST(-0600)] <esm> after using JAXB in the early days i got turned off to generated code
[15:49:49 CST(-0600)] <esm> things are probably much better now
[15:50:59 CST(-0600)] <EricDalquist> well everything has its mappings or such you have to write
[15:51:08 CST(-0600)] <EricDalquist> being fairly simple is a +
[15:51:11 CST(-0600)] <esm> yeah
[15:51:18 CST(-0600)] <EricDalquist> generating human readable XML is a +
[15:51:43 CST(-0600)] <EricDalquist> and being able to deal with version changes (reading XML from an older POJO and configuring the newer POJO correctly)
[15:51:51 CST(-0600)] <EricDalquist> since that is a nice upgrade path
[15:52:00 CST(-0600)] <esm> yes. xstream is good in that regard
[15:52:08 CST(-0600)] <EricDalquist> being able to export data to XML then import the XML into the new version
[15:52:27 CST(-0600)] <esm> yeah. i don't do on-the wire validation in this particular project
[15:52:32 CST(-0600)] <esm> but i do throw a bunch of unit tests on it
[15:52:42 CST(-0600)] <esm> and round-trip the xml
[15:52:50 CST(-0600)] <esm> e.g. xml -> object -> xml
[15:52:56 CST(-0600)] <EricDalquist> I'm not worried about validation of the XML when importing
[15:53:17 CST(-0600)] <EricDalquist> I'm more thinking of the XSD/relaxng for making it easier for people editing the XML
[15:53:24 CST(-0600)] <esm> ah
[15:53:27 CST(-0600)] <EricDalquist> much easier to author the files if your xml editor auto-completes
[15:53:37 CST(-0600)] <esm> yeah. oxygen can do relaxng (smile)
[15:55:05 CST(-0600)] <EricDalquist> cool
[16:33:06 CST(-0600)] <esm> woops. i just deleted an important issue out of our local jira instance
[16:33:35 CST(-0600)] <esm> i am trained to just hit the confirm button w/o really looking at what is being deleted (smile)
[16:33:45 CST(-0600)] <EricDalquist> lol
[16:36:26 CST(-0600)] <esm> crap. well a full export was done just two hours ago... hopefully not much has changed
[16:36:31 CST(-0600)] * esm goes to diff the exports
[16:45:25 CST(-0600)] <esm> 2007-02-15 17:43:09,662 INFO [jira.action.admin.DataImport] Importing data
[16:45:25 CST(-0600)] <esm> 2007-02-15 17:43:09,690 INFO [jira.action.admin.DataImport] Start parsing XML with SAX Parser
[16:45:25 CST(-0600)] <esm> 2007-02-15 17:43:16,517 INFO [jira.action.admin.DataImport] XML successfully parsed
[16:45:25 CST(-0600)] <esm> 2007-02-15 17:43:16,518 INFO [jira.action.admin.DataImport] Removing all entries from the database.
[16:45:30 CST(-0600)] * esm holds breath
[17:05:17 CST(-0600)] <esm> whew all back
[17:05:18 CST(-0600)] <esm> (smile)
[17:14:39 CST(-0600)] * lescour gets the webctvista redirector working
[21:43:03 CST(-0600)] * andrew_petro_ubu (n=apetro@uni1.unicon.net) has joined ##uportal
[21:43:03 CST(-0600)] * apetro_work_desk (n=apetro@uni1.unicon.net) has joined ##uportal
[21:43:03 CST(-0600)] * esmaway (n=esm@esm.qis.net) has joined ##uportal
[21:43:03 CST(-0600)] * EricDalqui[away] (n=dalquist@bohemia.doit.wisc.edu) has joined ##uportal
[21:43:03 CST(-0600)] * Tuomaz_ (n=fredrik@kaffe.umdc.umu.se) has joined ##uportal