Return-Path: Delivered-To: apmail-incubator-cayenne-user-archive@locus.apache.org Received: (qmail 25936 invoked from network); 7 Apr 2006 08:07:05 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 7 Apr 2006 08:07:05 -0000 Received: (qmail 82480 invoked by uid 500); 7 Apr 2006 08:06:57 -0000 Delivered-To: apmail-incubator-cayenne-user-archive@incubator.apache.org Received: (qmail 82455 invoked by uid 500); 7 Apr 2006 08:06:56 -0000 Mailing-List: contact cayenne-user-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cayenne-user@incubator.apache.org Delivered-To: mailing list cayenne-user@incubator.apache.org Received: (qmail 82446 invoked by uid 99); 7 Apr 2006 08:06:56 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Apr 2006 01:06:56 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [64.124.179.114] (HELO mensk.objectstyle.org) (64.124.179.114) by apache.org (qpsmtpd/0.29) with SMTP; Fri, 07 Apr 2006 01:06:56 -0700 Received: (qmail 30999 invoked from network); 7 Apr 2006 08:06:35 -0000 Received: from localhost (HELO ?IPv6:::1?) (127.0.0.1) by mensk.objectstyle.org with SMTP; 7 Apr 2006 08:06:35 -0000 Mime-Version: 1.0 (Apple Message framework v746.3) In-Reply-To: <0178252D-4BD1-48E3-844A-E981E8549D0F@pvv.ntnu.no> References: <0178252D-4BD1-48E3-844A-E981E8549D0F@pvv.ntnu.no> Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed Message-Id: Content-Transfer-Encoding: 7bit From: Andrus Adamchik Subject: Re: finding the correct DataNode Date: Fri, 7 Apr 2006 12:06:32 +0400 To: cayenne-user@incubator.apache.org X-Mailer: Apple Mail (2.746.3) X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N On Apr 6, 2006, at 11:19 PM, Tore Halset wrote: > Hello! > > For any given Persistent object, is it possible to find the > DataNode used? How? > > PS: Looking forward to try out B1! > > - Tore. Hi Tore, Here is a 1.1-ish solution that assumes that your ObjectContext is a DataContext: Persistent object = .. DataContext context = (DataContext) object.getObjectContext(); DataDomain domain = context.getParentDataDomain(); DataMap map = context.getEntityResolver().getObjEntity (object.getObjectId().getEntityName()).getDataMap(); DataNode node = domain.lookupDataNode(map); 1.2-ish solution should make no assumptions about the stack structure, so it will have to do the lookup indirectly via a custom query. Here is such a query. The trick is to override "route" method, obtaining QueryEngine from QueryRouter and store it in the query: public class DataNodeQuery extends AbstractQuery { protected DataNode node; protected String entityName; public DataNodeQuery(Persistent object) { this.entityName = object.getObjectId().getEntityName(); } public void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery) { DataMap map = resolver.getObjEntity(entityName).getDataMap(); this.node = (DataNode) router.engineForDataMap(map); } public SQLAction createSQLAction(SQLActionVisitor visitor) { throw new UnsupportedOperationException(); } public DataNode getDataNode() { return node; } } Execute the query, but ignore returned result: DataNodeQuery q = new DataNodeQuery(object); object.getObjectContext().performGenericQuery(q); DataNode node = q.getDataNode(); Andrus