Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 48476 invoked from network); 11 Feb 2010 16:18:51 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 11 Feb 2010 16:18:51 -0000 Received: (qmail 95627 invoked by uid 500); 11 Feb 2010 16:18:51 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 95591 invoked by uid 500); 11 Feb 2010 16:18:50 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 95441 invoked by uid 99); 11 Feb 2010 16:18:50 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 11 Feb 2010 16:18:50 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 11 Feb 2010 16:18:49 +0000 Received: from brutus.apache.org (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id D59E629A0018 for ; Thu, 11 Feb 2010 08:18:28 -0800 (PST) Message-ID: <857520270.208921265905108873.JavaMail.jira@brutus.apache.org> Date: Thu, 11 Feb 2010 16:18:28 +0000 (UTC) From: "Albert Lee (JIRA)" To: dev@openjpa.apache.org Subject: [jira] Created: (OPENJPA-1506) ConfigurationImpl.equals fails using a OpenJPA derived provider MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 ConfigurationImpl.equals fails using a OpenJPA derived provider --------------------------------------------------------------- Key: OPENJPA-1506 URL: https://issues.apache.org/jira/browse/OPENJPA-1506 Project: OpenJPA Issue Type: Bug Components: lib Affects Versions: 2.0.0, 2.0.1 Reporter: Albert Lee Assignee: Albert Lee Priority: Minor Fix For: 2.0.0 TestDynamicConfiguration.testConfigurationIsEqualByValueAndHashCode failed with configuration object equality using a OpenJPA derived provider. public void testConfigurationIsEqualByValueAndHashCode() { OpenJPAEntityManagerFactorySPI emf1 = createEMF(FRESH_EMF); assertNotNull(emf1); OpenJPAConfiguration conf1 = emf1.getConfiguration(); OpenJPAEntityManagerFactorySPI emf2 = createEMF(FRESH_EMF); assertNotNull(emf2); OpenJPAConfiguration conf2 = emf2.getConfiguration(); assertFalse(emf1==emf2); assertFalse(emf1.equals(emf2)); assertFalse(conf1==conf2); assertEquals(conf1, conf2); <<<< faild here assertEquals(conf1.hashCode(), conf2.hashCode()); assertEquals(conf1.toProperties(false), conf2.toProperties(false)); } The problem is in the equals() method of ConfigurationImpl: public boolean equals(Object other) { ..... for(Value v : _vals) { Value thatV = conf.getValue(propName); if (!v.equals(thatV)) { return false; } } return true; } getValue search backward based on the property name as in: public Value getValue(String property) { if (property == null) return null; // search backwards so that custom values added after construction // are found quickly, since this will be the std way of accessing them for (int i = _vals.size()-1; i >= 0; i--) { if (_vals.get(i).matches(property)) return _vals.get(i); } return null; } In the case of a dervied provider, it adds new EntityManagerFactoryValue to the end of the property list, which in theory override the one defined by the openjpa provider. However the equals method iterate the "current" configuration _vals list from the top but match the "other" configuration _vals list found from the bottom, so even both configuration objects are exactly the same, the equals will fail. In the case of a single openjpa provider, this problem is NOT surfaced. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.