Some more modification to make things more Spring friendly. Updated

Spring configurations to match.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3278 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-07-04 14:34:50 +00:00
parent 37843668a4
commit b05422171a
13 changed files with 260 additions and 235 deletions

View File

@@ -35,7 +35,7 @@ public class AVMCrawlTest extends AVMServiceTestBase
*/
public void testCrawl()
{
int n = 4; // Number of Threads.
int n = 8; // Number of Threads.
int m = 16; // How many multiples of content to start with.
long runTime = 1200000; // Ten minutes
fService.purgeRepository("main");

View File

@@ -28,12 +28,10 @@ import java.util.List;
import java.util.SortedMap;
import org.alfresco.repo.avm.SuperRepository;
import org.alfresco.repo.avm.hibernate.HibernateHelper;
import org.alfresco.repo.avm.hibernate.HibernateTxn;
import org.alfresco.repo.avm.hibernate.HibernateTxnCallback;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/**
* Implements the AVMService. Stub.
@@ -74,12 +72,7 @@ public class AVMServiceImpl implements AVMService
/**
* Whether the tables should be dropped and created.
*/
private boolean fCreateTables;
/**
* The HibernateHelper.
*/
private HibernateHelper fHibernateHelper;
private boolean fInitialize;
/**
* Basic constructor for the service.
@@ -94,61 +87,47 @@ public class AVMServiceImpl implements AVMService
*/
public void init()
{
fTransaction = new HibernateTxn(fHibernateHelper.getSessionFactory());
if (fCreateTables)
try
{
SchemaExport se = new SchemaExport(fHibernateHelper.getConfiguration());
se.drop(false, true);
se.create(false, true);
File storage = new File(fStorage);
storage.mkdirs();
fNodeIssuer = new Issuer(0L);
fContentIssuer = new Issuer(0L);
fLayerIssuer = new Issuer(0L);
fTransaction.perform(
new HibernateTxnCallback()
{
public void perform(Session sess)
{
Query query = sess.createQuery("select max(an.id) from AVMNodeImpl an");
Long val = (Long)query.uniqueResult();
fNodeIssuer = new Issuer(val == null ? 0L : val + 1L);
query = sess.createQuery("select max(fc.id) from FileContentImpl fc");
val = (Long)query.uniqueResult();
fContentIssuer = new Issuer(val == null ? 0L : val + 1L);
query = sess.createQuery("select max(an.layerID) from AVMNodeImpl an");
val = (Long)query.uniqueResult();
fLayerIssuer = new Issuer(val == null ? 0L : val + 1L);
}
}, false);
fSuperRepository = new SuperRepository(fNodeIssuer,
fContentIssuer,
fLayerIssuer,
fStorage);
try
{
createRepository("main");
}
catch (Exception e)
{
// TODO Log this and abort in some useful way.
}
}
else
{
try
{
fTransaction.perform(
new HibernateTxnCallback()
{
public void perform(Session sess)
{
Query query = sess.createQuery("select max(an.id) from AVMNodeImpl an");
Long val = (Long)query.uniqueResult();
fNodeIssuer = new Issuer(val == null ? 0L : val + 1L);
query = sess.createQuery("select max(fc.id) from FileContentImpl fc");
val = (Long)query.uniqueResult();
fContentIssuer = new Issuer(val == null ? 0L : val + 1L);
query = sess.createQuery("select max(an.layerID) from AVMNodeImpl an");
val = (Long)query.uniqueResult();
fLayerIssuer = new Issuer(val == null ? 0L : val + 1L);
}
}, false);
fSuperRepository = new SuperRepository(fNodeIssuer,
fContentIssuer,
fLayerIssuer,
fStorage);
}
catch (Exception e)
{
e.printStackTrace(System.err);
// TODO Log this and abort in some useful way.
}
}
catch (Exception e)
{
e.printStackTrace(System.err);
// TODO Log this and abort in some useful way.
}
if (fInitialize)
{
createRepository("main");
}
}
/**
* Set the Hibernate Transaction wrapper.
* @param txn
*/
public void setHibernateTxn(HibernateTxn txn)
{
fTransaction = txn;
}
/**
@@ -161,23 +140,14 @@ public class AVMServiceImpl implements AVMService
}
/**
* Set whether we should drop and create tables.
* @param createTables
* Set whether we should create an initial repository.
* @param initialize
*/
public void setCreateTables(boolean createTables)
public void setInitialize(boolean initialize)
{
fCreateTables = createTables;
fInitialize = initialize;
}
/**
* Set the HibernateHelper.
* @param helper
*/
public void setHibernateHelper(HibernateHelper helper)
{
fHibernateHelper = helper;
}
/**
* Get an InputStream from a file.
* @param version The version to look under.

View File

@@ -23,7 +23,6 @@ import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import org.alfresco.repo.avm.hibernate.HibernateHelper;
import org.hibernate.stat.Statistics;
import org.springframework.context.support.FileSystemXmlApplicationContext;

View File

@@ -56,6 +56,7 @@ abstract class DirectoryNodeImpl extends AVMNodeImpl implements DirectoryNode
@SuppressWarnings("unchecked")
protected ChildEntry getChild(String name, boolean write)
{
// TODO This may be very Dangerous!
Session sess = SuperRepository.GetInstance().getSession();
ChildEntry entry = (ChildEntry)sess.get(ChildEntryImpl.class, new ChildEntryImpl(name, this, null),
(write && getIsNew()) ? LockMode.UPGRADE : LockMode.READ);

View File

@@ -19,7 +19,6 @@ package org.alfresco.repo.avm;
import java.util.List;
import org.alfresco.repo.avm.hibernate.HibernateHelper;
import org.alfresco.repo.avm.hibernate.HibernateTxn;
import org.alfresco.repo.avm.hibernate.HibernateTxnCallback;
import org.hibernate.Query;
@@ -68,11 +67,6 @@ public class OrphanReaper implements Runnable
*/
private Thread fThread;
/**
* The Hibernate helper to use.
*/
private HibernateHelper fHibernateHelper;
/**
* Create one with default parameters.
*/
@@ -113,14 +107,14 @@ public class OrphanReaper implements Runnable
{
fBatchSize = size;
}
/**
* Set the HibernateHelper to use.
* @param helper The helper to use.
* Set the Hibernate Transaction Wrapper.
* @param transaction
*/
public void setHibernateHelper(HibernateHelper helper)
public void setHibernateTxn(HibernateTxn transaction)
{
fHibernateHelper = helper;
fTransaction = transaction;
}
/**
@@ -128,7 +122,6 @@ public class OrphanReaper implements Runnable
*/
public void init()
{
fTransaction = new HibernateTxn(fHibernateHelper.getSessionFactory());
fThread = new Thread(this);
fThread.start();
}

View File

@@ -43,7 +43,7 @@ public class SimultaneousLoadTest extends AVMServiceTestBase
Thread [] threads = new Thread[n];
for (int i = 0; i < n; i++)
{
Loader loader = new Loader("source", "main:/d" + i, m);
Loader loader = new Loader("/Users/britt/stuff/" + i, "main:/d" + i, m);
threads[i] = new Thread(loader);
threads[i].start();
}

View File

@@ -1,86 +0,0 @@
/*
* Copyright (C) 2006 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*/
package org.alfresco.repo.avm.hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Like 83.7 gazillion others, a HibernateHelper. This will go away.
* @author britt
*/
public class HibernateHelper
{
/**
* The single instance of this.
*/
private static HibernateHelper fgInstance = null;
/**
* The Hibernate Configuration object.
*/
private Configuration fCfg;
/**
* The Hibernate SessionFactory;
*/
private SessionFactory fFactory;
public HibernateHelper()
{
fCfg = null;
fFactory = null;
setup();
fgInstance = this;
}
public SessionFactory getSessionFactory()
{
return fFactory;
}
public Configuration getConfiguration()
{
return fCfg;
}
public void setup()
{
try
{
fCfg = new Configuration();
fCfg.configure();
fFactory = fCfg.buildSessionFactory();
}
catch (Throwable t)
{
t.printStackTrace(System.err);
System.exit(1);
}
}
public void shutdown()
{
fFactory.close();
}
public static HibernateHelper GetInstance()
{
return fgInstance;
}
}

View File

@@ -18,11 +18,11 @@ package org.alfresco.repo.avm.hibernate;
*/
import java.util.Random;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.alfresco.repo.avm.AVMException;
import org.hibernate.FlushMode;
import org.alfresco.repo.avm.AVMNotFoundException;
import org.hibernate.HibernateException;
import org.hibernate.ObjectNotFoundException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.StaleStateException;
@@ -46,20 +46,22 @@ public class HibernateTxn
*/
private Random fRandom;
/**
* The BFL.
*/
private ReentrantReadWriteLock fLock;
/**
* Make one up.
* @param sessionFactory The SessionFactory.
*/
public HibernateTxn(SessionFactory sessionFactory)
public HibernateTxn()
{
fSessionFactory = sessionFactory;
fRandom = new Random();
fLock = new ReentrantReadWriteLock(true); // Make the lock fair.
}
/**
* Set the Hibernate Session factory.
* @param factory
*/
public void setSessionFactory(SessionFactory factory)
{
fSessionFactory = factory;
}
/**
@@ -76,18 +78,7 @@ public class HibernateTxn
{
try
{
/*
if (write)
{
fLock.writeLock().lock();
}
else
{
fLock.readLock().lock();
}
*/
sess = fSessionFactory.openSession();
// sess.setFlushMode(FlushMode.ALWAYS);
txn = sess.beginTransaction();
callback.perform(sess);
txn.commit();
@@ -113,23 +104,23 @@ public class HibernateTxn
{
if (t instanceof StaleStateException)
{
System.err.println("Lost Race");
StackTraceElement [] stack = t.getStackTrace();
long threadID = Thread.currentThread().getId();
for (StackTraceElement frame : stack)
{
System.err.println(threadID + " " + frame);
}
// System.err.println("Lost Race");
// StackTraceElement [] stack = t.getStackTrace();
// long threadID = Thread.currentThread().getId();
// for (StackTraceElement frame : stack)
// {
// System.err.println(threadID + " " + frame);
// }
}
else
{
System.err.println("Deadlock");
StackTraceElement [] stack = t.getStackTrace();
long threadID = Thread.currentThread().getId();
for (StackTraceElement frame : stack)
{
System.err.println(threadID + " " + frame);
}
// System.err.println("Deadlock");
// StackTraceElement [] stack = t.getStackTrace();
// long threadID = Thread.currentThread().getId();
// for (StackTraceElement frame : stack)
// {
// System.err.println(threadID + " " + frame);
// }
try
{
long interval;
@@ -154,20 +145,14 @@ public class HibernateTxn
}
// TODO Crack t into more useful exception types.
// Otherwise nothing we can do except throw.
throw new AVMException("Unrecoverable error", t);
if (t instanceof ObjectNotFoundException)
{
throw new AVMNotFoundException("Object not found.", t);
}
throw new AVMException("Unrecoverable error.");
}
finally
{
/*
if (write)
{
fLock.writeLock().unlock();
}
else
{
fLock.readLock().unlock();
}
*/
if (sess != null)
{
try

View File

@@ -25,8 +25,6 @@ import java.io.OutputStream;
import org.alfresco.repo.avm.AVMException;
import org.alfresco.repo.avm.AVMService;
import org.alfresco.repo.avm.AVMServiceImpl;
import org.alfresco.repo.avm.hibernate.HibernateHelper;
/**
* This takes a filesystem directory path and a repository path and name