diff --git a/lib/compile/commons-lang.jar b/lib/compile/commons-lang.jar new file mode 100644 index 0000000..c33b353 Binary files /dev/null and b/lib/compile/commons-lang.jar differ diff --git a/lib/compile/cpdetector_1.0.9.jar b/lib/compile/cpdetector_1.0.9.jar new file mode 100644 index 0000000..86e0acb Binary files /dev/null and b/lib/compile/cpdetector_1.0.9.jar differ diff --git a/lib/deploy/org.soyatec.windows.azure.java_2.0.1.v20110606-0728.jar b/lib/deploy/org.soyatec.windows.azure.java_2.0.1.v20110606-0728.jar new file mode 100644 index 0000000..efa5516 Binary files /dev/null and b/lib/deploy/org.soyatec.windows.azure.java_2.0.1.v20110606-0728.jar differ diff --git a/src/uk/co/atomus/session/TomcatSessionStorageEntity.java b/src/uk/co/atomus/session/TomcatSessionStorageEntity.java index 73b4c14..7435d43 100644 --- a/src/uk/co/atomus/session/TomcatSessionStorageEntity.java +++ b/src/uk/co/atomus/session/TomcatSessionStorageEntity.java @@ -14,14 +14,15 @@ package uk.co.atomus.session; -import org.soyatec.windows.azure.table.TableStorageEntity; +import org.soyatec.windowsazure.table.AbstractTableServiceEntity; + /** * Represents the tomcat session entity to be persisted to Azure Table Storage * * @author Simon Dingle and Chris Derham */ -public class TomcatSessionStorageEntity extends TableStorageEntity { +public class TomcatSessionStorageEntity extends AbstractTableServiceEntity { private byte[] data; private String sessionId; private boolean validSession; diff --git a/src/uk/co/atomus/session/manager/AtomusManager.java b/src/uk/co/atomus/session/manager/AtomusManager.java index a340eb0..7ee841f 100644 --- a/src/uk/co/atomus/session/manager/AtomusManager.java +++ b/src/uk/co/atomus/session/manager/AtomusManager.java @@ -23,8 +23,7 @@ import org.apache.catalina.session.StandardSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.soyatec.windows.azure.error.StorageException; -import org.soyatec.windows.azure.error.StorageServerException; +import org.soyatec.windowsazure.error.StorageServerException; import uk.co.atomus.session.AtomusSession; import uk.co.atomus.session.SessionStorageFacade; @@ -191,9 +190,7 @@ private void deleteExpiredSessions() { sessionService.deleteExpiredSessions(); } catch (StorageServerException e) { log.warn("Error deleting expired sessions", e); - } catch (StorageException e) { - log.error("Error deleting expired sessions", e); - } + } } @Override diff --git a/src/uk/co/atomus/session/service/SessionServiceImpl.java b/src/uk/co/atomus/session/service/SessionServiceImpl.java index f266dbc..4aa7a19 100644 --- a/src/uk/co/atomus/session/service/SessionServiceImpl.java +++ b/src/uk/co/atomus/session/service/SessionServiceImpl.java @@ -20,8 +20,9 @@ import org.apache.catalina.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.soyatec.windows.azure.error.StorageException; -import org.soyatec.windows.azure.table.TableStorageEntity; +import org.soyatec.windowsazure.error.StorageException; +import org.soyatec.windowsazure.table.AbstractTableServiceEntity; +import org.soyatec.windowsazure.table.ITableServiceEntity; import uk.co.atomus.session.TomcatSessionStorageEntity; import uk.co.atomus.session.service.dao.SessionDao; @@ -84,7 +85,7 @@ protected String getPartitionKey() { private TomcatSessionStorageEntity findInStorage(String id) { try { - TableStorageEntity storageEntity = sessionDao.retrieveEntity(partitionKey, id); + ITableServiceEntity storageEntity = sessionDao.retrieveEntity(partitionKey, id); return storageEntity == null ? null : (TomcatSessionStorageEntity) storageEntity; } catch (StorageException e) { log.error("Error loading from storage", e); @@ -171,7 +172,6 @@ public ObjectInputStream getSessionAsStream(long thisAccessedTime, String id, Cl + sessionStorageEntity.getLastAccessedTime()); return null; } - log.debug("found more recent session in storage timeStamp " + sessionStorageEntity.getTimestamp().getTime()); return sessionMapper.toObjectInputStream(sessionStorageEntity, classLoader); } diff --git a/src/uk/co/atomus/session/service/dao/SessionDao.java b/src/uk/co/atomus/session/service/dao/SessionDao.java index 2848eb3..2b18221 100644 --- a/src/uk/co/atomus/session/service/dao/SessionDao.java +++ b/src/uk/co/atomus/session/service/dao/SessionDao.java @@ -16,8 +16,9 @@ import java.util.List; -import org.soyatec.windows.azure.error.StorageException; -import org.soyatec.windows.azure.table.TableStorageEntity; +import org.soyatec.windowsazure.error.StorageException; +import org.soyatec.windowsazure.table.AbstractTableServiceEntity; +import org.soyatec.windowsazure.table.ITableServiceEntity; import uk.co.atomus.session.TomcatSessionStorageEntity; @@ -27,11 +28,11 @@ public interface SessionDao { int countEntities(String partitionKey, String rowKey); - TableStorageEntity retrieveEntity(String partitionKey, String rowKey); + ITableServiceEntity retrieveEntity(String partitionKey, String rowKey); - List retrieveEntitiesByKey(String partitionKey, String rowKey); + List retrieveEntitiesByKey(String partitionKey, String rowKey); - List queryEntitiesByKeys(String partitionKey, String rowKey); + List queryEntitiesByKeys(String partitionKey, String rowKey); void insertStorageEntity(TomcatSessionStorageEntity storageEntity); diff --git a/src/uk/co/atomus/session/service/dao/SessionDaoImpl.java b/src/uk/co/atomus/session/service/dao/SessionDaoImpl.java index e984ded..4e3fc66 100644 --- a/src/uk/co/atomus/session/service/dao/SessionDaoImpl.java +++ b/src/uk/co/atomus/session/service/dao/SessionDaoImpl.java @@ -20,13 +20,15 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.soyatec.windows.azure.blob.RetryPolicies; -import org.soyatec.windows.azure.blob.RetryPolicy; -import org.soyatec.windows.azure.error.StorageException; -import org.soyatec.windows.azure.table.AzureTable; -import org.soyatec.windows.azure.table.TableStorage; -import org.soyatec.windows.azure.table.TableStorageEntity; -import org.soyatec.windows.azure.util.TimeSpan; +import org.soyatec.windowsazure.blob.IRetryPolicy; +import org.soyatec.windowsazure.blob.internal.RetryPolicies; +import org.soyatec.windowsazure.error.StorageException; +import org.soyatec.windowsazure.internal.util.TimeSpan; +import org.soyatec.windowsazure.table.AbstractTableServiceEntity; +import org.soyatec.windowsazure.table.ITableServiceEntity; +import org.soyatec.windowsazure.table.TableServiceContext; +import org.soyatec.windowsazure.table.TableStorageClient; +import org.soyatec.windowsazure.table.internal.CloudTable; import uk.co.atomus.session.TomcatSessionStorageEntity; @@ -41,8 +43,8 @@ public class SessionDaoImpl implements SessionDao { private static final int DEFAULT_RETRY_POLICY_INTERVAL_SECONDS = 1; private String accountName; private String accountKey; - private AzureTable azureTable; - private TableStorage tableStorage; + private CloudTable azureTable; + private TableStorageClient tableStorage; private String tableName; private int retryPolicyRetries = DEFAULT_RETRY_POLICY_RETRIES; private int retryPolicyIntervalSeconds = DEFAULT_RETRY_POLICY_INTERVAL_SECONDS; @@ -87,19 +89,19 @@ public void setTableName(String tableName) { this.tableName = tableName; } - private AzureTable getAzureTable() { + private CloudTable getAzureTable() { if (azureTable == null) { - azureTable = getTableStorage().getAzureTable(tableName); + azureTable = (CloudTable) getTableStorage().getTableReference(tableName); if (null == azureTable) { throw new NullPointerException(String.format("TableStorage returned null AzureTable '%s'.", tableName)); } azureTable.setRetryPolicy(getRetryPolicy()); - if (!azureTable.doesTableExist()) { + if (!azureTable.isTableExist()) { azureTable.createTable(); - if (!azureTable.doesTableExist()) { + if (!azureTable.isTableExist()) { throw new RuntimeException(String.format("Table '%s' was not created.", tableName)); } } @@ -108,79 +110,79 @@ private AzureTable getAzureTable() { return azureTable; } - private TableStorage getTableStorage() { + private TableStorageClient getTableStorage() { if (tableStorage == null) { - tableStorage = TableStorage.create(URI.create(TABLE_NAMESPACE), false, accountName, accountKey); + tableStorage = TableStorageClient.create(URI.create(TABLE_NAMESPACE), false, accountName, accountKey); } return tableStorage; } - private RetryPolicy getRetryPolicy() { + private IRetryPolicy getRetryPolicy() { return RetryPolicies.retryN(retryPolicyRetries, TimeSpan.fromSeconds(retryPolicyIntervalSeconds)); } @Override public void removeAll(String partitionKey) { - List entities = queryEntitiesByKeys(partitionKey, null); + List entities = queryEntitiesByKeys(partitionKey, null); deleteBatch(entities); } @Override public int countEntities(String partitionKey, String rowKey) { - List entities = queryEntitiesByKeys(partitionKey, rowKey); + List entities = queryEntitiesByKeys(partitionKey, rowKey); return entities.size(); } @Override public void updateStorageEntity(TomcatSessionStorageEntity storageEntity) { - AzureTable table = getAzureTable(); + CloudTable table = getAzureTable(); table.updateEntity(storageEntity); } @Override public void insertStorageEntity(TomcatSessionStorageEntity storageEntity) { - AzureTable table = getAzureTable(); + CloudTable table = getAzureTable(); table.insertEntity(storageEntity); } @Override - public List queryEntitiesByKeys(String partitionKey, String rowKey) { - List storageEntities = null; - AzureTable table = getAzureTable(); + public List queryEntitiesByKeys(String partitionKey, String rowKey) { + List storageEntities = null; + CloudTable table = getAzureTable(); if (null == partitionKey || partitionKey.isEmpty()) { /* Return list of all Entities in Table */ - storageEntities = table.retrieveEntities(); + storageEntities = table.retrieveEntities(TomcatSessionStorageEntity.class); } else if (null != partitionKey && !partitionKey.isEmpty() && (null == rowKey || rowKey.isEmpty())) { - storageEntities = table.retrieveEntitiesByKey(partitionKey, null); + storageEntities = table.retrieveEntitiesByKey(partitionKey, null, TomcatSessionStorageEntity.class); } else if (null != partitionKey && !partitionKey.isEmpty() && null != rowKey && !rowKey.isEmpty()) { - storageEntities = table.retrieveEntitiesByKey(partitionKey, rowKey); + storageEntities = table.retrieveEntitiesByKey(partitionKey, rowKey, TomcatSessionStorageEntity.class); } else { throw new StorageException(String.format("Unexpected condition: partitionKey '%s', rowKey '%s'", partitionKey, rowKey)); } if (null == storageEntities) { - return new ArrayList(); + return new ArrayList(); } return storageEntities; } @Override - public TableStorageEntity retrieveEntity(String partitionKey, String rowKey) { - List entities = retrieveEntitiesByKey(partitionKey, rowKey); + public ITableServiceEntity retrieveEntity(String partitionKey, String rowKey) { + List entities = retrieveEntitiesByKey(partitionKey, rowKey); return entities.isEmpty() ? null : entities.get(0); } @Override - public List retrieveEntitiesByKey(String partitionKey, String rowKey) { - AzureTable table = getAzureTable(); - return table.retrieveEntitiesByKey(partitionKey, rowKey); + public List retrieveEntitiesByKey(String partitionKey, String rowKey) { + CloudTable table = getAzureTable(); + return table.retrieveEntitiesByKey(partitionKey, rowKey, TomcatSessionStorageEntity.class); } @Override public void remove(String partitionKey, String rowKey) throws StorageException { - List entities = queryEntitiesByKeys(partitionKey, rowKey); + List entities = queryEntitiesByKeys(partitionKey, rowKey); if (entities.isEmpty()) { log.debug("record not deleted as not found with rowKey " + rowKey); return; @@ -188,28 +190,29 @@ public void remove(String partitionKey, String rowKey) throws StorageException { deleteBatch(entities); } - private void deleteBatch(List entities) { + private void deleteBatch(List entities) { if (entities.isEmpty()) { return; } - AzureTable table = getAzureTable(); - table.startBatch(); - for (TableStorageEntity entity : entities) { + CloudTable table = getAzureTable(); + TableServiceContext tableServiceContext = new TableServiceContext(table); + tableServiceContext.startBatch(); + for (ITableServiceEntity entity : entities) { deleteTableEntity(entity); } - table.executeBatch(); + tableServiceContext.executeBatch(); } - private void deleteTableEntity(TableStorageEntity entity) { + private void deleteTableEntity(ITableServiceEntity entity) { log.debug("deleting record with rowKey" + entity.getRowKey()); getAzureTable().deleteEntity(entity); } @Override public void removeExpired(String partitionKey) throws StorageException { - List entities = queryEntitiesByKeys(partitionKey, null); + List entities = queryEntitiesByKeys(partitionKey, null); log.debug("found " + entities.size() + " records"); - for (TableStorageEntity entity : entities) { + for (ITableServiceEntity entity : entities) { TomcatSessionStorageEntity sessionStorageEntity = (TomcatSessionStorageEntity) entity; if (sessionStorageEntity.hasExpired()) { log.debug("found expired record with rowKey" + entity.getRowKey()); diff --git a/src/uk/co/atomus/session/util/SessionDumper.java b/src/uk/co/atomus/session/util/SessionDumper.java index b79fb0a..fd79d0e 100644 --- a/src/uk/co/atomus/session/util/SessionDumper.java +++ b/src/uk/co/atomus/session/util/SessionDumper.java @@ -20,7 +20,7 @@ import org.apache.catalina.core.StandardWrapper; import org.apache.catalina.session.StandardSession; -import org.soyatec.windows.azure.table.TableStorageEntity; +import org.soyatec.windowsazure.table.ITableServiceEntity; import uk.co.atomus.session.AtomusSession; import uk.co.atomus.session.TomcatSessionStorageEntity; @@ -54,7 +54,7 @@ public static void main(String[] args) throws Exception { sessionDao.setAccountKey(accountKey); sessionDao.setTableName(tableName); - List entities = sessionDao.queryEntitiesByKeys(partitionKey, rowKey); + List entities = sessionDao.queryEntitiesByKeys(partitionKey, rowKey); System.out.println("Found " + entities.size() + " entities"); SessionMapper sessionMapper = new SessionMapperImpl(); @@ -62,7 +62,7 @@ public static void main(String[] args) throws Exception { AtomusManager manager = new AtomusManager(); manager.setContainer(new StandardWrapper()); - for (TableStorageEntity tableStorageEntity : entities) { + for (ITableServiceEntity tableStorageEntity : entities) { dumpTableStorageEntity(tableStorageEntity, sessionMapper, manager, sessionDeserializer, urlClassLoader); } } @@ -90,7 +90,7 @@ public boolean accept(File dir, String name) { return urlClassLoader; } - private static void dumpTableStorageEntity(TableStorageEntity tableStorageEntity, SessionMapper sessionMapper, + private static void dumpTableStorageEntity(ITableServiceEntity tableStorageEntity, SessionMapper sessionMapper, AtomusManager manager, SessionDeserializer sessionDeserializer, ClassLoader urlClassLoader) throws Exception { try { diff --git a/test-src/uk/co/atomus/session/SessionDaoImplTest.java b/test-src/uk/co/atomus/session/SessionDaoImplTest.java index 2243aa3..233466e 100644 --- a/test-src/uk/co/atomus/session/SessionDaoImplTest.java +++ b/test-src/uk/co/atomus/session/SessionDaoImplTest.java @@ -25,7 +25,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.soyatec.windows.azure.table.TableStorageEntity; +import org.soyatec.windowsazure.table.ITableServiceEntity; import uk.co.atomus.session.service.dao.SessionDaoImpl; @@ -81,7 +81,7 @@ public void testUpdate() throws Exception { @Test public void testRetrieveEntitiesByKey() throws Exception { - List entities = sessionDao.retrieveEntitiesByKey(partitionKey, + List entities = sessionDao.retrieveEntitiesByKey(partitionKey, sessionStorageEntity.getRowKey()); Assert.assertNotNull(entities); assertEquals(entities.size(), 1);