Index: .classpath
===================================================================
--- .classpath	(revision 0)
+++ .classpath	(revision 0)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
Index: src/main/java/org/modeshape/jboss/managed/ManagedConnectionPool.java
===================================================================
--- src/main/java/org/modeshape/jboss/managed/ManagedConnectionPool.java	(revision 0)
+++ src/main/java/org/modeshape/jboss/managed/ManagedConnectionPool.java	(revision 0)
@@ -0,0 +1,98 @@
+/*
+ * ModeShape (http://www.modeshape.org)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors. 
+ *
+ * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * ModeShape is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.modeshape.jboss.managed;
+
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementOperation;
+import org.jboss.managed.api.annotation.ManagementProperty;
+import org.modeshape.common.util.CheckArg;
+import org.modeshape.graph.connector.RepositoryConnectionPool;
+
+/**
+ *
+ */
+@ManagementObject
+public class ManagedConnectionPool implements ModeShapeManagedObject {
+    private final RepositoryConnectionPool connectionPool;
+
+    public ManagedConnectionPool( RepositoryConnectionPool connectionPool ) {
+        CheckArg.isNotNull(connectionPool, "connectionPool");
+        this.connectionPool = connectionPool;
+    }
+
+    @ManagementOperation
+    public Object flush() {
+        // TODO implement
+        return null;
+    }
+
+    @ManagementProperty
+    public int getAvailableConnectionCount() {
+        // TODO implement
+        return 0;
+    }
+
+    @ManagementProperty
+    public int getConnectionCount() {
+        // TODO implement
+        return 0;
+    }
+
+    @ManagementProperty
+    public int getConnectionCreatedCount() {
+        // TODO implement
+        return 0;
+    }
+
+    @ManagementProperty
+    public int getConnectionDestroyedCount() {
+        // TODO implement
+        return 0;
+    }
+
+    @ManagementProperty
+    public int getConnectionInUseCount() {
+        // TODO implement
+        return 0;
+    }
+
+    @ManagementProperty
+    public int getConnectionInUseHighWaterMark() {
+        // TODO implement
+        return 0;
+    }
+
+    @ManagementProperty
+    public int getMaxSize() {
+        // TODO implement
+        return 0;
+    }
+
+    @ManagementProperty
+    public int getMinSize() {
+        // TODO implement
+        return 0;
+    }
+
+}
Index: src/main/java/org/modeshape/jboss/managed/ManagedConnector.java
===================================================================
--- src/main/java/org/modeshape/jboss/managed/ManagedConnector.java	(revision 0)
+++ src/main/java/org/modeshape/jboss/managed/ManagedConnector.java	(revision 0)
@@ -0,0 +1,55 @@
+/*
+ * ModeShape (http://www.modeshape.org)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors. 
+ *
+ * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * ModeShape is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.modeshape.jboss.managed;
+
+import java.util.concurrent.TimeUnit;
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementOperation;
+import org.modeshape.common.util.CheckArg;
+import org.modeshape.graph.connector.RepositorySource;
+
+/**
+ *
+ */
+@ManagementObject
+public class ManagedConnector implements ModeShapeManagedObject {
+
+    private final RepositorySource connector;
+
+    public ManagedConnector( RepositorySource connector ) {
+        CheckArg.isNotNull(connector, "connector");
+        this.connector = connector;
+    }
+
+    @ManagementOperation
+    public boolean ping() {
+        try {
+            return this.connector.getConnection().ping(2, TimeUnit.SECONDS);
+        } catch (Exception e) {
+            // TODO log this
+            return false;
+        }
+    }
+
+}
Index: src/main/java/org/modeshape/jboss/managed/ManagedEngine.java
===================================================================
--- src/main/java/org/modeshape/jboss/managed/ManagedEngine.java	(revision 0)
+++ src/main/java/org/modeshape/jboss/managed/ManagedEngine.java	(revision 0)
@@ -0,0 +1,164 @@
+/*
+ * ModeShape (http://www.modeshape.org)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors. 
+ *
+ * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * ModeShape is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.modeshape.jboss.managed;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import javax.jcr.RepositoryException;
+import net.jcip.annotations.Immutable;
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementOperation;
+import org.modeshape.common.util.CheckArg;
+import org.modeshape.graph.connector.RepositorySource;
+import org.modeshape.jcr.JcrEngine;
+import org.modeshape.jcr.JcrRepository;
+
+/**
+ * The <code>ManagedEngine</code> class is the JBoss managed object for {@link JcrEngine}.
+ */
+@Immutable
+@ManagementObject
+public final class ManagedEngine implements ModeShapeManagedObject {
+
+    // TODO (1) look up engine in JNDI or (2) subclass engine
+
+    private final JcrEngine engine; // the ModeShape delegate object being managed
+    private ManagedSequencingService sequencingService;
+
+    /**
+     * Constructs a JBoss managed object from a ModeShape engine.
+     * 
+     * @param engine the engine being managed (may not be <code>null</code>)
+     */
+    public ManagedEngine( JcrEngine engine ) {
+        CheckArg.isNotNull(engine, "engine");
+        this.engine = engine;
+    }
+
+    /**
+     * Obtains the managed repositories of this engine.
+     * 
+     * @return an unmodifiable collection of managed connectors (never <code>null</code>)
+     */
+    @ManagementOperation
+    public Collection<ManagedConnector> getConnectors() {
+        Collection<ManagedConnector> connectors = new ArrayList<ManagedConnector>();
+
+        if (isRunning()) {
+            for (String repositoryName : this.engine.getRepositoryNames()) {
+                RepositorySource repositorySource = this.engine.getRepositorySource(repositoryName);
+                assert (repositorySource != null) : "Repository '" + repositoryName + "' does not exist";
+                connectors.add(new ManagedConnector(repositorySource));
+            }
+        }
+
+        return Collections.unmodifiableCollection(connectors);
+    }
+
+    /**
+     * Obtains the managed repositories of this engine.
+     * 
+     * @return an unmodifiable collection of repositories (never <code>null</code>)
+     */
+    @ManagementOperation
+    public Collection<ManagedRepository> getRepositories() {
+        Collection<ManagedRepository> repositories = new ArrayList<ManagedRepository>();
+
+        if (isRunning()) {
+            for (String repositoryName : this.engine.getRepositoryNames()) {
+                try {
+                    JcrRepository repository = this.engine.getRepository(repositoryName);
+                    repositories.add(new ManagedRepository(repository));
+                } catch (RepositoryException e) {
+                    // TODO log repository does not exist
+                }
+            }
+        }
+
+        return Collections.unmodifiableCollection(repositories);
+    }
+
+    /**
+     * Obtains the managed sequencing service.
+     * 
+     * @return the sequencing service or <code>null</code> if never started
+     */
+    @ManagementOperation
+    public ManagedSequencingService getSequencingService() {
+        if (isRunning()) {
+            if (this.sequencingService == null) {
+                this.sequencingService = new ManagedSequencingService(this.engine.getSequencingService());
+            }
+        } else {
+            this.sequencingService = null;
+        }
+
+        return this.sequencingService;
+    }
+
+    /**
+     * Indicates if the managed engine is running.
+     * 
+     * @return <code>true</code> if the engine is running
+     */
+    @ManagementOperation
+    public boolean isRunning() {
+        try {
+            this.engine.getRepositoryService();
+            return true;
+        } catch (IllegalStateException e) {
+            return false;
+        }
+    }
+
+    /**
+     * First {@link #shutdown() shutdowns} the engine and then {@link #start() starts} it back up again.
+     * 
+     * @see #shutdown()
+     * @see #start()
+     */
+    @ManagementOperation
+    public void restart() {
+        shutdown();
+        start();
+    }
+
+    /**
+     * @see JcrEngine#shutdown()
+     */
+    @ManagementOperation
+    public void shutdown() {
+        this.engine.shutdown();
+    }
+
+    /**
+     * @see JcrEngine#start()
+     */
+    @ManagementOperation
+    public void start() {
+        this.engine.start();
+    }
+
+}
Index: src/main/java/org/modeshape/jboss/managed/ManagedLock.java
===================================================================
--- src/main/java/org/modeshape/jboss/managed/ManagedLock.java	(revision 0)
+++ src/main/java/org/modeshape/jboss/managed/ManagedLock.java	(revision 0)
@@ -0,0 +1,189 @@
+/*
+ * ModeShape (http://www.modeshape.org)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors. 
+ *
+ * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * ModeShape is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.modeshape.jboss.managed;
+
+import java.util.Comparator;
+import net.jcip.annotations.Immutable;
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementProperty;
+import org.joda.time.DateTime;
+import org.modeshape.common.util.CheckArg;
+
+/**
+ * The <code>ManagedSession</code> class is a JBoss managed object of a ModeShape session.
+ */
+@Immutable
+@ManagementObject
+public final class ManagedLock implements ModeShapeManagedObject {
+
+    /**
+     * A sorter for when locks need to be sorted by owner.
+     */
+    public static final Comparator<ManagedLock> SORT_BY_OWNER = new Comparator<ManagedLock>() {
+        @Override
+        public int compare( ManagedLock thisLock,
+                            ManagedLock thatLock ) {
+            return thisLock.getOwner().compareTo(thatLock.getOwner());
+        }
+    };
+
+    /**
+     * The managed property indicating if this lock is a deep lock.
+     */
+    private final boolean deep;
+
+    /**
+     * The managed property for the lock's expiration time. The expiration time is never <code>null</code>.
+     */
+    private final DateTime expiration;
+
+    /**
+     * The managed property for the lock's identifier. The ID is never <code>null</code> and never empty.
+     */
+    private final String id;
+
+    /**
+     * The managed property for the lock's session identifier. The session ID is never <code>null</code> and never empty.
+     */
+    private final String sessionId;
+
+    /**
+     * The managed property for the lock's owner. The owner is never <code>null</code> and never empty.
+     */
+    private final String owner;
+
+    /**
+     * The managed property indicating if this lock is a session-based lock.
+     */
+    private final boolean sessionBased;
+
+    /**
+     * The managed property for the lock's workspace name. The workspace name is never <code>null</code> and never empty.
+     */
+    private final String workspaceName;
+
+    /**
+     * Constructs a managed object for a ModeShape lock.
+     * 
+     * @param workspaceName the name of the lock's workspace (never <code>null</code> and never empty)
+     * @param sessionBased the flag indicating if this lock is session-based
+     * @param sessionId the session ID of this lock (never <code>null</code> and never empty)
+     * @param expiration the lock expiration time (never <code>null</code>)
+     * @param id the lock ID (never <code>null</code> and never empty)
+     * @param owner the owner of the lock (never <code>null</code> or empty)
+     * @param deep the flag indicating if this is a deep lock
+     */
+    public ManagedLock( String workspaceName,
+                        boolean sessionBased,
+                        String sessionId,
+                        DateTime expiration,
+                        String id,
+                        String owner,
+                        boolean deep ) {
+        CheckArg.isNotEmpty(workspaceName, "workspaceName");
+        CheckArg.isNotEmpty(sessionId, "sessionId");
+        CheckArg.isNotNull(expiration, "expiration");
+        CheckArg.isNotEmpty(id, "id");
+        CheckArg.isNotEmpty(owner, "owner");
+
+        this.deep = deep;
+        this.expiration = expiration;
+        this.id = id;
+        this.sessionId = sessionId;
+        this.owner = owner;
+        this.sessionBased = sessionBased;
+        this.workspaceName = workspaceName;
+    }
+
+    /**
+     * Obtains the lock's expiration time.
+     * 
+     * @return the time this lock will expire (never <code>null</code>)
+     */
+    @ManagementProperty( readOnly = true )
+    public DateTime getExpiration() {
+        return this.expiration;
+    }
+
+    /**
+     * Obtains the lock's identifier.
+     * 
+     * @return the identifier of this lock (never <code>null</code> and never empty)
+     */
+    @ManagementProperty( readOnly = true )
+    public String getId() {
+        return this.id;
+    }
+
+    /**
+     * Obtains the lock's owner.
+     * 
+     * @return the owner of this lock (never <code>null</code> and never empty)
+     */
+    @ManagementProperty( readOnly = true )
+    public String getOwner() {
+        return this.owner;
+    }
+
+    /**
+     * Obtains the session's unique identifier.
+     * 
+     * @return the session identifier of this lock (never <code>null</code> and never empty)
+     */
+    @ManagementProperty( readOnly = true )
+    public String getSessionId() {
+        return this.sessionId;
+    }
+
+    /**
+     * Obtains the lock's workspace name.
+     * 
+     * @return the workspace name of this lock (never <code>null</code> and never empty)
+     */
+    @ManagementProperty( readOnly = true )
+    public String getWorkspaceName() {
+        return this.workspaceName;
+    }
+
+    /**
+     * Indicates if this lock is a deep lock.
+     * 
+     * @return <code>true</code> if a deep lock
+     */
+    @ManagementProperty( readOnly = true )
+    public boolean isDeep() {
+        return this.deep;
+    }
+
+    /**
+     * Indicates if this lock is a session-based lock.
+     * 
+     * @return <code>true</code> if a session-based lock
+     */
+    @ManagementProperty( readOnly = true )
+    public boolean isSessionBased() {
+        return this.sessionBased;
+    }
+
+}
Index: src/main/java/org/modeshape/jboss/managed/ManagedRepository.java
===================================================================
--- src/main/java/org/modeshape/jboss/managed/ManagedRepository.java	(revision 0)
+++ src/main/java/org/modeshape/jboss/managed/ManagedRepository.java	(revision 0)
@@ -0,0 +1,209 @@
+/*
+ * ModeShape (http://www.modeshape.org)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors. 
+ *
+ * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * ModeShape is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.modeshape.jboss.managed;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementOperation;
+import org.jboss.managed.api.annotation.ManagementProperty;
+import org.joda.time.DateTime;
+import org.modeshape.common.util.CheckArg;
+import org.modeshape.jcr.JcrRepository;
+import org.modeshape.jcr.JcrRepository.Option;
+
+/**
+ *
+ */
+@ManagementObject
+public class ManagedRepository implements ModeShapeManagedObject {
+
+    /**
+     * A JBoss managed property for the the configured descriptors of this repository. This map is unmodifiable and never
+     * <code>null</code>.
+     */
+    private final Map<String, String> descriptors;
+
+    /**
+     * A JBoss managed property for configured options of this repository. This map is unmodifiable and never <code>null</code>.
+     */
+    private final Map<String, String> options;
+
+    /**
+     * The ModeShape delegate object that is being managed. This object is never <code>null</code>.
+     */
+    private final JcrRepository repository;
+
+    /**
+     * Constructs a managed object for the specified {@link JcrRepository repository}.
+     * 
+     * @param repository the repository being managed (never <code>null</code>)
+     */
+    public ManagedRepository( JcrRepository repository ) {
+        CheckArg.isNotNull(repository, "repository");
+        this.repository = repository;
+
+        // construct options
+        Map<String, String> tempOptions = new HashMap<String, String>();
+
+        for (Entry<Option, String> entry : this.repository.getOptions().entrySet()) {
+            tempOptions.put(entry.getKey().toString(), entry.getValue());
+        }
+
+        this.options = Collections.unmodifiableMap(tempOptions);
+
+        // construct descriptors
+        Map<String, String> tempDescriptors = new HashMap<String, String>();
+
+        for (String descriptorName : this.repository.getDescriptorKeys()) {
+            tempDescriptors.put(descriptorName, this.repository.getDescriptor(descriptorName));
+        }
+
+        this.descriptors = Collections.unmodifiableMap(tempDescriptors);
+    }
+
+    /**
+     * Obtains the descriptors configured for this repository.
+     * 
+     * @return the unmodifiable descriptors (never <code>null</code>)
+     */
+    @ManagementProperty( readOnly = true )
+    public Map<String, String> getDescriptors() {
+        return this.descriptors;
+    }
+
+    /**
+     * Obtains the options configured for this repository.
+     * 
+     * @return the unmodifiable options (never <code>null</code>)
+     */
+    @ManagementProperty( readOnly = true )
+    public Map<String, String> getOptions() {
+        return this.options;
+    }
+
+    @ManagementProperty
+    public int getQueryActivity() {
+        // TODO implement getQueryActivity() and define in doc what the return value actually represents
+        return 0;
+    }
+
+    @ManagementProperty
+    public int getSaveActivity() {
+        // TODO implement getSaveActivity() and define in doc what the return value actually represents
+        return 0;
+    }
+
+    @ManagementProperty
+    public Object getSessionActivity() {
+        // TODO implement getSaveActivity() and define in doc what the return value actually represents
+        return 0;
+    }
+
+    /**
+     * Obtains all the repository locks sorted by owner.
+     * 
+     * @return a list of sessions sorted by owner (never <code>null</code>)
+     */
+    @ManagementOperation
+    public List<ManagedLock> listLocks() {
+        return listLocks(ManagedLock.SORT_BY_OWNER);
+    }
+
+    /**
+     * Obtains all the repository locks sorted by the specified sorter.
+     * 
+     * @param lockSorter the lock sorter (never <code>null</code>)
+     * @return a list of locks sorted by the specified lock sorter (never <code>null</code>)
+     */
+    @ManagementOperation
+    public List<ManagedLock> listLocks( Comparator<ManagedLock> lockSorter ) {
+        CheckArg.isNotNull(lockSorter, "lockSorter");
+
+        // TODO implement listLocks(Comparator)
+        List<ManagedLock> locks = new ArrayList<ManagedLock>();
+
+        // create temporary date
+        for (int i = 0; i < 5; ++i) {
+            locks.add(new ManagedLock("workspace-" + i, true, "sessionId-1", new DateTime(), "id-" + i, "owner-" + i, true));
+        }
+
+        // sort
+        Collections.sort(locks, lockSorter);
+
+        return locks;
+    }
+
+    /**
+     * Obtains all the repository sessions sorted by user name.
+     * 
+     * @return a list of sessions sorted by user name (never <code>null</code>)
+     */
+    @ManagementOperation
+    public List<ManagedSession> listSessions() {
+        return listSessions(ManagedSession.SORT_BY_USER);
+    }
+
+    /**
+     * Obtains all the repository sessions sorted by the specified sorter.
+     * 
+     * @param sessionSorter the session sorter (never <code>null</code>)
+     * @return a list of locks sorted by the specified session sorter (never <code>null</code>)
+     */
+    @ManagementOperation
+    public List<ManagedSession> listSessions( Comparator<ManagedSession> sessionSorter ) {
+        CheckArg.isNotNull(sessionSorter, "sessionSorter");
+
+        // TODO implement listSessions(Comparator)
+        List<ManagedSession> sessions = new ArrayList<ManagedSession>();
+
+        // create temporary date
+        for (int i = 0; i < 5; ++i) {
+            sessions.add(new ManagedSession("workspace-" + i, "userName-" + i, "sessionId-1", new DateTime()));
+        }
+
+        // sort
+        Collections.sort(sessions, sessionSorter);
+
+        return sessions;
+    }
+
+    @ManagementOperation
+    public Object removeLockWithLockToken() {
+        // TODO implement removeLockWithLockToken()
+        return null;
+    }
+
+    @ManagementOperation
+    public Object terminateSessionBySessionId() {
+        // TODO implement terminateSessionBySessionId()
+        return null;
+    }
+
+}
Index: src/main/java/org/modeshape/jboss/managed/ManagedSequencingService.java
===================================================================
--- src/main/java/org/modeshape/jboss/managed/ManagedSequencingService.java	(revision 0)
+++ src/main/java/org/modeshape/jboss/managed/ManagedSequencingService.java	(revision 0)
@@ -0,0 +1,63 @@
+/*
+ * ModeShape (http://www.modeshape.org)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors. 
+ *
+ * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * ModeShape is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.modeshape.jboss.managed;
+
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementOperation;
+import org.jboss.managed.api.annotation.ManagementProperty;
+import org.modeshape.common.util.CheckArg;
+import org.modeshape.repository.sequencer.SequencingService;
+
+/**
+ *
+ */
+@ManagementObject
+public class ManagedSequencingService implements ModeShapeManagedObject {
+
+    private final SequencingService sequencingService;
+
+    public ManagedSequencingService( SequencingService sequencingService ) {
+        CheckArg.isNotNull(sequencingService, "sequencingService");
+        this.sequencingService = sequencingService;
+    }
+
+    @ManagementProperty
+    public Object getJobActivity() {
+        // TODO implement
+        return null;
+    }
+
+    @ManagementProperty
+    public int getQueuedJobCount() {
+        // TODO implement
+        return 0;
+    }
+
+    @ManagementOperation
+    public Object listQueuedJobs() {
+        // TODO implement
+        return null;
+    }
+
+}
Index: src/main/java/org/modeshape/jboss/managed/ManagedSession.java
===================================================================
--- src/main/java/org/modeshape/jboss/managed/ManagedSession.java	(revision 0)
+++ src/main/java/org/modeshape/jboss/managed/ManagedSession.java	(revision 0)
@@ -0,0 +1,134 @@
+/*
+ * ModeShape (http://www.modeshape.org)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors. 
+ *
+ * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * ModeShape is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.modeshape.jboss.managed;
+
+import java.util.Comparator;
+import net.jcip.annotations.Immutable;
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementProperty;
+import org.joda.time.DateTime;
+import org.modeshape.common.util.CheckArg;
+
+/**
+ * The <code>ManagedSession</code> class is a JBoss managed object of a ModeShape session.
+ */
+@Immutable
+@ManagementObject
+public final class ManagedSession implements ModeShapeManagedObject {
+
+    /**
+     * A sorter for when sessions need to be sorted by user name.
+     */
+    public static final Comparator<ManagedSession> SORT_BY_USER = new Comparator<ManagedSession>() {
+        @Override
+        public int compare( ManagedSession thisSession,
+                            ManagedSession thatSession ) {
+            return thisSession.getUserName().compareTo(thatSession.getUserName());
+        }
+    };
+
+    /**
+     * The managed property for the session's identifier. The ID is never <code>null</code> and never empty.
+     */
+    private final String sessionId;
+
+    /**
+     * The managed property for the session's creation time. The time is never <code>null</code>.
+     */
+    private final DateTime timeCreated;
+
+    /**
+     * The managed property for the session's user name. The user name is never <code>null</code> and never empty.
+     */
+    private final String userName;
+
+    /**
+     * The managed property for the session's workspace name. The workspace name is never <code>null</code> and never empty.
+     */
+    private final String workspaceName;
+
+    /**
+     * Constructs a managed object for a ModeShape session.
+     * 
+     * @param workspaceName the session's workspace name (never <code>null</code> and never empty)
+     * @param userName the user name of the session (never <code>null</code> and never empty)
+     * @param sessionId the session's identifier (never <code>null</code> and never empty)
+     * @param timeCreated the session's time of creation (never <code>null</code>)
+     */
+    public ManagedSession( String workspaceName,
+                           String userName,
+                           String sessionId,
+                           DateTime timeCreated ) {
+        CheckArg.isNotEmpty(workspaceName, "workspaceName");
+        CheckArg.isNotEmpty(userName, "userName");
+        CheckArg.isNotEmpty(sessionId, "sessionId");
+        CheckArg.isNotNull(timeCreated, "timeCreated");
+
+        this.sessionId = sessionId;
+        this.timeCreated = timeCreated;
+        this.userName = userName;
+        this.workspaceName = workspaceName;
+    }
+
+    /**
+     * Obtains the session's unique identifier.
+     * 
+     * @return the identifier of this session (never <code>null</code>
+     */
+    @ManagementProperty( readOnly = true )
+    public String getSessionId() {
+        return this.sessionId;
+    }
+
+    /**
+     * Obtains the session's creation time.
+     * 
+     * @return the time this session was created (never <code>null</code>)
+     */
+    @ManagementProperty( readOnly = true )
+    public DateTime getTimeCreated() {
+        return this.timeCreated;
+    }
+
+    /**
+     * Obtains the session's user name.
+     * 
+     * @return the user name of this session (never <code>null</code>)
+     */
+    @ManagementProperty( readOnly = true )
+    public String getUserName() {
+        return this.userName;
+    }
+
+    /**
+     * Obtains the session's workspace name.
+     * 
+     * @return the workspace name of this session (never <code>null</code>
+     */
+    @ManagementProperty( readOnly = true )
+    public String getWorkspaceName() {
+        return this.workspaceName;
+    }
+
+}
Index: src/main/java/org/modeshape/jboss/managed/ModeShapeManagedObject.java
===================================================================
--- src/main/java/org/modeshape/jboss/managed/ModeShapeManagedObject.java	(revision 0)
+++ src/main/java/org/modeshape/jboss/managed/ModeShapeManagedObject.java	(revision 0)
@@ -0,0 +1,32 @@
+/*
+ * ModeShape (http://www.modeshape.org)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of 
+ * individual contributors. 
+ *
+ * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * ModeShape is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.modeshape.jboss.managed;
+
+
+/**
+ * A signature indicating the object is a ModeShape JBoss managed object.
+ */
+public interface ModeShapeManagedObject {
+
+}
Index: .project
===================================================================
--- .project	(revision 0)
+++ .project	(revision 0)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>modeshape-jboss-managed</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
Index: pom.xml
===================================================================
--- pom.xml	(revision 0)
+++ pom.xml	(revision 0)
@@ -0,0 +1,128 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.modeshape</groupId>
+		<artifactId>modeshape</artifactId>
+		<version>1.2-SNAPSHOT</version>
+	</parent>
+	<!-- The groupId and version values are inherited from parent -->
+	<artifactId>modeshape-jboss-managed</artifactId>
+	<packaging>jar</packaging>
+	<name>ModeShape Managed Objects</name>
+	<description>ModeShape JBoss managed objects</description>
+	<url>http://www.modeshape.org</url>
+
+	<!--
+		Define the dependencies. Note that all version and scopes default to
+		those defined in the dependencyManagement section of the parent pom.
+	-->
+	<dependencies>
+		<!-- 
+            Testing (note the scope)
+        -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.hamcrest</groupId>
+			<artifactId>hamcrest-library</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.mockito</groupId>
+			<artifactId>mockito-all</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<!--
+			Logging (require SLF4J API for compiling, but use Log4J and its SLF4J
+			binding for testing)
+		-->
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-log4j12</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+		</dependency>
+
+        <!--
+            ModeShape dependencies
+        -->
+        <dependency>
+            <groupId>org.modeshape</groupId>
+            <artifactId>modeshape-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.modeshape</groupId>
+            <artifactId>modeshape-graph</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.modeshape</groupId>
+            <artifactId>modeshape-repository</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.modeshape</groupId>
+            <artifactId>modeshape-jcr</artifactId>
+        </dependency>
+
+        <!-- 
+            Java Concurrency in Practice annotations
+        -->
+    	<dependency>
+    		<groupId>net.jcip</groupId>
+    		<artifactId>jcip-annotations</artifactId>
+    	</dependency>
+ 
+        <!--
+            JBoss dependencies
+        -->
+        <dependency>
+            <groupId>org.jboss.man</groupId>
+            <artifactId>jboss-managed</artifactId>
+            <version>2.1.0.SP1</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+	<build>
+		<plugins>
+			<!--
+				Adding OSGI metadata to the JAR without changing the packaging type.
+			-->
+			<plugin>
+				<artifactId>maven-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+					</archive>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>bundle-manifest</id>
+						<phase>process-classes</phase>
+						<goals>
+							<goal>manifest</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	<reporting>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-report-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</reporting>
+</project>
