blob: 3ca40bc6c3e01acb339c8c1a848f4887a14338ec [file] [log] [blame]
/*
* Copyright (c) 2008-2013, 2019 Eike Stepper (Loehne, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Simon McDuff - initial API and implementation
* Eike Stepper - maintenance
*/
package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.model1.Company;
import org.eclipse.emf.cdo.tests.util.TestAdapter;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOAdapterPolicy;
import org.eclipse.net4j.util.ref.ReferenceType;
import java.lang.ref.WeakReference;
/**
* @author Simon McDuff
*/
public class AdapterManagerTest extends AbstractCDOTest
{
public void testStrongReferencePolicy_NONE() throws Exception
{
final CDOSession session = openSession();
session.options().setPassiveUpdateEnabled(false);
// ************************************************************* //
Company companyA = getModel1Factory().createCompany();
final CDOTransaction transaction = session.openTransaction();
transaction.options().setCacheReferenceType(ReferenceType.WEAK);
transaction.options().setStrongReferencePolicy(CDOAdapterPolicy.NONE);
transaction.createResource(getResourcePath("/resA")).getContents().add(companyA);
transaction.commit();
final CDOID id = CDOUtil.getCDOObject(companyA).cdoID();
TestAdapter testAdapter = new TestAdapter(companyA);
companyA = null;
companyA = (Company)CDOUtil.getEObject(transaction.getObject(id));
testAdapter.assertNotifications(0);
companyA.setCity("Ottawa");
testAdapter.assertNotifications(1);
}
public void testStrongReferencePolicy_ALL() throws Exception
{
final CDOSession session = openSession();
session.options().setPassiveUpdateEnabled(false);
// ************************************************************* //
Company companyA = getModel1Factory().createCompany();
CDOTransaction transaction = session.openTransaction();
transaction.options().setCacheReferenceType(ReferenceType.WEAK);
transaction.options().setStrongReferencePolicy(CDOAdapterPolicy.ALL);
transaction.createResource(getResourcePath("/resA")).getContents().add(companyA);
transaction.commit();
CDOID id = CDOUtil.getCDOObject(companyA).cdoID();
TestAdapter testAdapter = new TestAdapter(companyA);
companyA = null;
testAdapter.clearNotifications();
System.gc();
assertEquals(true, transaction.isObjectRegistered(id));
companyA = (Company)CDOUtil.getEObject(transaction.getObject(id));
testAdapter.assertNotifications(0);
companyA.setCity("Ottawa");
testAdapter.assertNotifications(1);
}
public void testStrongReferencePolicy_ALL_AttachObject() throws Exception
{
final CDOSession session = openSession();
session.options().setPassiveUpdateEnabled(false);
// ************************************************************* //
Company companyA = getModel1Factory().createCompany();
TestAdapter testAdapter = new TestAdapter(companyA);
CDOTransaction transaction = session.openTransaction();
transaction.options().setCacheReferenceType(ReferenceType.WEAK);
transaction.options().setStrongReferencePolicy(CDOAdapterPolicy.ALL);
transaction.createResource(getResourcePath("/resA")).getContents().add(companyA);
transaction.commit();
CDOID id = CDOUtil.getCDOObject(companyA).cdoID();
companyA = null;
testAdapter.clearNotifications();
System.gc();
assertEquals(true, transaction.isObjectRegistered(id));
companyA = (Company)CDOUtil.getEObject(transaction.getObject(id));
testAdapter.assertNotifications(0);
companyA.setCity("Ottawa");
testAdapter.assertNotifications(1);
}
public void testStrongReferencePolicy_ALL_DetachObject() throws Exception
{
final CDOSession session = openSession();
session.options().setPassiveUpdateEnabled(false);
// ************************************************************* //
Company companyA = getModel1Factory().createCompany();
WeakReference<Company> weakCompanyA = new WeakReference<>(companyA);
TestAdapter testAdapter = new TestAdapter(companyA);
CDOTransaction transaction = session.openTransaction();
transaction.options().setCacheReferenceType(ReferenceType.WEAK);
transaction.options().setStrongReferencePolicy(CDOAdapterPolicy.ALL);
transaction.createResource(getResourcePath("/resA")).getContents().add(companyA);
transaction.commit();
CDOID id = CDOUtil.getCDOObject(companyA).cdoID();
companyA = null;
testAdapter.clearNotifications();
System.gc();
assertEquals(true, transaction.isObjectRegistered(id));
Company companyB = (Company)CDOUtil.getEObject(transaction.getObject(id));
assertEquals(companyB, weakCompanyA.get());
companyB.setCity("Ottawa");
transaction.getResource(getResourcePath("/resA")).getContents().remove(0);
transaction.commit();
}
}