Thomas, 
Thanks a lot for your elaborate reply. 
It was just the thing I needed before taking on the
trail of migrating to OJB 1.0 :->
By the way, thank you all for your hard work, 
and be assured that we find it useful and elegant. 
Cheers,
        Theo Niemeijer


> -------------------------------------------------
> Subject: Re: Any guidelines or best practices for OJB ?
> 
> 
> Hi Theo,
> 
> As no one else answered I share some thoughts.
> 
> Theo Niemeijer wrote:
> > Hi all. 
> > 
> > I hope this post is not to long to read. 
> > 
> > I am working with OJB for several months now, 
> > and although I am quite happy with its existance, 
> > I still have that nagging feeling that I am doing 
> > things wrong :->.  Or that things that seem strange are 
> > simply caused by my own misunderstandings. 
> > 
> > So what I would like to now: Can anyone with experience offer
> > some "best practice" guidelines ? 
> > 
> > For starters I will tell how we use it: 
> > 
> > - We use MSSQL Server, with JBoss app server, 
> >   and are still using 0.9.5 for production. 
> >   (I have tested with 1.0rc1, and it seems to work
> >    after changing some deprecated method calls. But I do 
> >    not dare to put it in production yet because of some
> >    subtle or not so subtle changes that were introduced)
> 
> Although I know SqlServer from past projects I have no personal 
> experience with OJB + MS SqlServer.
> 
> The general recommendation is to always use the latest release as part 
> of a continous integration dicipline. We are doing this for all 
> libraries that OJB depends on. See: 
> http://cvs.apache.org/builds/gump/2003-03-11/db-ojb.html
> 
> > - We use OJB in single server mode, with its 
> >   own connection pooling.
> 
> Using OJB C/S mode is definitely not recommended.
> I have no general tips wrt. connection pooling. It depends a lot to your 
> actual environment. With most app servers you won't have to rely on OJB 
> con pooling.
> 
> > 
> > - We have unique global identities, so each 
> >   objects has a unique key, using 
> >   SequenceManagerHighLowImpl (compatible with HiLo I think)
> >   We use an Integer field as the key. 
> 
> You could also use OJB GUIDs. They are based on a VARCHAR field.
> 
> > - We heavely use proxy references, and collection proxies,
> >   using the 'proxy="true"' idiom. 
> 
> Good idea for "normal" applications. special scenarios could possibly 
> benefit from not using proxies.
> 
> > - We only use the Persistence Broker API, making queries with the Criteria 
> >   objects and getIteratorByQuery and getCollectionByQuery. 
> >   We tried to not use the addSql() method, but could not avoid it
> >   in some places.  
> 
> PB is a good choice if you
> - want maximum performance and flecibility
> - are not bound to a standard API
> - are willing to implement some higher level "persistence-manager" 
> functionality on your own
> 
> I know several projects that use a lot of QueryBySql statements. Of 
> course you loose some "purity" and code beauty, but it may be a good 
> choice for special problems.
> We had no problems in those problems so far...
> 
> > - We do not use ODMG or JDO at all. We have quite complex queries expressed
> >   as OJB Criteria, and were attracted by the portable way these could 
> >   be expressed, and transferred from client to server. Extra 
> >   criteria are added for things like access rights and 'views' based on state.
> >   (front office sees a different 'view' than back-office)
> > 
> That's one of the benefits of the PB. It allows you to build your own 
> higher level persistence functionality by providing a flexible and 
> rock-solid foundation.
> If you are aware of the limited semantics of the PB you can build 
> extremely powerful persistence managers on top of it. Our ODMG and JDO 
> layer are examples for this.
> 
> > - We have quite a lot of domain objects, most of them in 
> >   several levels of hierarchy, all mapped in the repository.
> >   The main domain hierarchies are are each mapped to a single 
> >   table. The many relations are made between the abstract base
> >   objects of such a domain hierarchie.   
> >   (Activities, Resources, Events, Articles, Locations) 
> >
> No general rule here. it really depends on the domain model.
> 
> > - We mapped our domain objects directly on Java objects, but added
> >   OJB support (beforeStore) to add things like "createdBy", "creationDate", 
> >   "modifiedBy", "modifiedDate" etc. Therefore we use a PersistentObject
> >   base class that has the unique key and such. 
> 
> In the business frameworks my company develops on top of OJB we also use 
> a persistent base class. this makes it much easier to provide framework 
> services to all entity objects.
> 
> > - We actually use separate Tomcat web servers, connecting to 
> >   the JBoss app server Session EJB's, which in turn use
> >   the OJB persistence broker. Result objects and 
> >   collections are transferred to the client.
> 
> In our frameworks we provide delegation mechanisms that allow to use
> Swing, Servlet (Struts) and generic Webservices clients to access the 
> OJB based business logic either
> - through a direct inmemory call
> - using SessionBeans
> - using RMI
> - using CORBA
> 
> This allows us to use one and the same business logic and a wide range 
> of execution environments.
> E.g.
> - in WIndows2000, Tomcat servlet apps.
> - in MVS WebSphere based applications
> - on HP Nonstop Server Corba environments,
> etc...
> 
> > - Transactions are not used for complex stuff, only for the 
> >   simple operations that are done with a single call to 
> >   a facade session EJB. So no transactions over a series
> >   of EJB calls. 
> >  
> 
> Good idea!
> 
> > - We try to remove objects from the cache after any store operation 
> >   that involves several objects, because we got the feeling that 
> >   referenced objects and collections are not refreshed, causing 
> >   objects to mysteriously "re-appear" via references.  
> > 
> 
> Did you try the refresh="true" attribute on reference- and collection 
> descriptors?
> 
> > - We use the directly mapped fields (I mean not via getters and setters, 
> >   but the fields are directly accessed by OJB when an object is
> >   materialized). 
> 
> best performance guaranteed! (JavaBeans access is slower)
> 
> >  
> > And there is more of course. But the thing is, OJB offers a lot 
> > of choices, and some of them do not seem to scale very well.
> > I sometimes feel it is not a safe bet in such an "enterprise
> > application" (I mean here with the use of JBoss and with separate 
> > webservers, and high loads and possible concurrency) 
> > I would like to hear from others that use OJB in somewhat 
> > larger scale. 
> 
> We have been using OJB in several larger scale apps already. We had no 
> big performance issues so far.
> I agree that there are a lot of bells an whistles with OJB. We try to 
> make it simpler by providing kits (composed of a set of configuration 
> settings) that cover several app scenarios.
> 
> > 
> > Overall I am quite happy with the functionality that is offered, 
> > but sometimes it can be frustrating to work around limitations in the
> > criteria expressions, 
> 
> All ideas are welcome. Jakob is doing a great job in implementing new 
> features to the SQL generator!
> 
> >and sometimes I thinks that the generated database 
> > statements are a littlebit confusing :->
> 
> sigh. I have not seen an intelligent code generator so far. the OJB 
> mechanisms are nothing special in this respect :-(
> 
> thanks for sharing your ideas and findings. I feels such discussions can 
> be beneficial for many users.
> 
> cheers,
> Thomas
> 
> > 
> > Cheers,
> >     Theo Niemeijer
> > 
> >  
> >  
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> > 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to