exo-jcr SVN: r2526 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl: storage/jdbc and 7 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2010-06-09 09:47:50 -0400 (Wed, 09 Jun 2010)
New Revision: 2526
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MySQLMultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MySQLSingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/init/IngresSQLDBInitializer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/init/OracleDBInitializer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MySQLMultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MySQLSingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/update/StorageUpdateManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializer.java
Log:
EXOJCR-754: close Statements & ResultSets
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/config/JDBCConfigurationPersister.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -34,6 +34,7 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import javax.naming.InitialContext;
import javax.naming.NamingException;
@@ -226,25 +227,52 @@
try
{
Connection con = openConnection();
- if (isDbInitialized(con))
+ ResultSet res = null;
+ PreparedStatement ps = null;
+ try
{
- // check that data exists
- PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM " + configTableName + " WHERE NAME=?");
- try
+ if (isDbInitialized(con))
{
+ // check that data exists
+ ps = con.prepareStatement("SELECT COUNT(*) FROM " + configTableName + " WHERE NAME=?");
+
ps.setString(1, CONFIGNAME);
- ResultSet res = ps.executeQuery();
+ res = ps.executeQuery();
if (res.next())
{
return res.getInt(1) > 0;
}
}
- finally
+ return false;
+ }
+ finally
+ {
+ if (res != null)
{
- con.close();
+ try
+ {
+ res.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
+
+ if (ps != null)
+ {
+ try
+ {
+ ps.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
+ con.close();
}
- return false;
}
catch (final SQLException e)
{
@@ -264,14 +292,16 @@
try
{
Connection con = openConnection();
+ ResultSet res = null;
+ PreparedStatement ps = null;
try
{
if (isDbInitialized(con))
{
- PreparedStatement ps = con.prepareStatement("SELECT * FROM " + configTableName + " WHERE NAME=?");
+ ps = con.prepareStatement("SELECT * FROM " + configTableName + " WHERE NAME=?");
ps.setString(1, CONFIGNAME);
- ResultSet res = ps.executeQuery();
+ res = ps.executeQuery();
if (res.next())
{
@@ -281,7 +311,6 @@
else
throw new ConfigurationNotFoundException("No configuration data is found in database. Source name "
+ sourceName);
-
}
else
throw new ConfigurationNotInitializedException(
@@ -290,6 +319,30 @@
}
finally
{
+ if (res != null)
+ {
+ try
+ {
+ res.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+
+ if (ps != null)
+ {
+ try
+ {
+ ps.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
con.close();
}
}
@@ -316,6 +369,7 @@
try
{
Connection con = openConnection();
+ PreparedStatement ps = null;
try
{
@@ -324,7 +378,9 @@
if (!isDbInitialized(con))
{
// init db
- con.createStatement().executeUpdate(sql = initSQL);
+ Statement st = con.createStatement();
+ st.executeUpdate(sql = initSQL);
+ st.close();
con.commit();
con.close();
@@ -336,9 +392,6 @@
if (isDbInitialized(con))
{
-
- PreparedStatement ps = null;
-
ConfigDataHolder config = new ConfigDataHolder(confData);
if (hasConfig())
@@ -372,6 +425,18 @@
}
finally
{
+ if (ps != null)
+ {
+ try
+ {
+ ps.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
con.close();
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -330,6 +330,8 @@
checkIfOpened();
try
{
+ closeStatements();
+
if (!this.readOnly)
{
dbConnection.rollback();
@@ -386,156 +388,163 @@
*
* @throws SQLException
*/
- protected void closeStatements() throws SQLException
+ protected void closeStatements()
{
- if (findItemById != null)
+ try
{
- findItemById.close();
- }
+ if (findItemById != null)
+ {
+ findItemById.close();
+ }
- if (findItemByPath != null)
- {
- findItemByPath.close();
- }
+ if (findItemByPath != null)
+ {
+ findItemByPath.close();
+ }
- if (findItemByName != null)
- {
- findItemByName.close();
- }
+ if (findItemByName != null)
+ {
+ findItemByName.close();
+ }
- if (findChildPropertyByPath != null)
- {
- findChildPropertyByPath.close();
- }
+ if (findChildPropertyByPath != null)
+ {
+ findChildPropertyByPath.close();
+ }
- if (findPropertyByName != null)
- {
- findPropertyByName.close();
- }
+ if (findPropertyByName != null)
+ {
+ findPropertyByName.close();
+ }
- if (findDescendantNodes != null)
- {
- findDescendantNodes.close();
- }
+ if (findDescendantNodes != null)
+ {
+ findDescendantNodes.close();
+ }
- if (findDescendantProperties != null)
- {
- findDescendantProperties.close();
- }
+ if (findDescendantProperties != null)
+ {
+ findDescendantProperties.close();
+ }
- if (findReferences != null)
- {
- findReferences.close();
- }
+ if (findReferences != null)
+ {
+ findReferences.close();
+ }
- if (findValuesByPropertyId != null)
- {
- findValuesByPropertyId.close();
- }
+ if (findValuesByPropertyId != null)
+ {
+ findValuesByPropertyId.close();
+ }
- if (findValuesStorageDescriptorsByPropertyId != null)
- {
- findValuesStorageDescriptorsByPropertyId.close();
- }
+ if (findValuesStorageDescriptorsByPropertyId != null)
+ {
+ findValuesStorageDescriptorsByPropertyId.close();
+ }
- if (findValuesDataByPropertyId != null)
- {
- findValuesDataByPropertyId.close();
- }
+ if (findValuesDataByPropertyId != null)
+ {
+ findValuesDataByPropertyId.close();
+ }
- if (findValueByPropertyIdOrderNumber != null)
- {
- findValueByPropertyIdOrderNumber.close();
- }
+ if (findValueByPropertyIdOrderNumber != null)
+ {
+ findValueByPropertyIdOrderNumber.close();
+ }
- if (findNodesByParentId != null)
- {
- findNodesByParentId.close();
- }
+ if (findNodesByParentId != null)
+ {
+ findNodesByParentId.close();
+ }
- if (findNodesCountByParentId != null)
- {
- findNodesCountByParentId.close();
- }
+ if (findNodesCountByParentId != null)
+ {
+ findNodesCountByParentId.close();
+ }
- if (findPropertiesByParentId != null)
- {
- findPropertiesByParentId.close();
- }
+ if (findPropertiesByParentId != null)
+ {
+ findPropertiesByParentId.close();
+ }
- if (insertItem != null)
- {
- insertItem.close();
- }
+ if (insertItem != null)
+ {
+ insertItem.close();
+ }
- if (insertNode != null)
- {
- insertNode.close();
- }
+ if (insertNode != null)
+ {
+ insertNode.close();
+ }
- if (insertProperty != null)
- {
- insertProperty.close();
- }
+ if (insertProperty != null)
+ {
+ insertProperty.close();
+ }
- if (insertReference != null)
- {
- insertReference.close();
- }
+ if (insertReference != null)
+ {
+ insertReference.close();
+ }
- if (insertValue != null)
- {
- insertValue.close();
- }
+ if (insertValue != null)
+ {
+ insertValue.close();
+ }
- if (updateItem != null)
- {
- updateItem.close();
- }
+ if (updateItem != null)
+ {
+ updateItem.close();
+ }
- if (updateItemPath != null)
- {
- updateItemPath.close();
- }
+ if (updateItemPath != null)
+ {
+ updateItemPath.close();
+ }
- if (updateNode != null)
- {
- updateNode.close();
- }
+ if (updateNode != null)
+ {
+ updateNode.close();
+ }
- if (updateProperty != null)
- {
- updateProperty.close();
- }
+ if (updateProperty != null)
+ {
+ updateProperty.close();
+ }
- if (deleteItem != null)
- {
- deleteItem.close();
- }
+ if (deleteItem != null)
+ {
+ deleteItem.close();
+ }
- if (deleteNode != null)
- {
- deleteNode.close();
- }
+ if (deleteNode != null)
+ {
+ deleteNode.close();
+ }
- if (deleteProperty != null)
- {
- deleteProperty.close();
- }
+ if (deleteProperty != null)
+ {
+ deleteProperty.close();
+ }
- if (deleteReference != null)
- {
- deleteReference.close();
- }
+ if (deleteReference != null)
+ {
+ deleteReference.close();
+ }
- if (deleteValue != null)
- {
- deleteValue.close();
+ if (deleteValue != null)
+ {
+ deleteValue.close();
+ }
+
+ if (renameNode != null)
+ {
+ renameNode.close();
+ }
}
-
- if (renameNode != null)
+ catch (SQLException e)
{
- renameNode.close();
+ LOG.error("Can't close the statement: " + e);
}
}
@@ -547,6 +556,8 @@
checkIfOpened();
try
{
+ closeStatements();
+
if (!this.readOnly)
{
dbConnection.commit();
@@ -877,13 +888,27 @@
try
{
ResultSet node = findChildNodesByParentIdentifier(getInternalId(parent.getIdentifier()));
- List<NodeData> childrens = new ArrayList<NodeData>();
- while (node.next())
+ try
{
- childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
+ List<NodeData> childrens = new ArrayList<NodeData>();
+ while (node.next())
+ {
+ childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
+ }
+
+ return childrens;
}
-
- return childrens;
+ finally
+ {
+ try
+ {
+ node.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
catch (SQLException e)
{
@@ -904,13 +929,28 @@
try
{
ResultSet count = findChildNodesCountByParentIdentifier(getInternalId(parent.getIdentifier()));
- if (count.next())
+ try
{
- return count.getInt(1);
+ if (count.next())
+ {
+ return count.getInt(1);
+ }
+ else
+ {
+ throw new RepositoryException("FATAL No resulton childNodes count for "
+ + parent.getQPath().getAsString());
+ }
}
- else
+ finally
{
- throw new RepositoryException("FATAL No resulton childNodes count for " + parent.getQPath().getAsString());
+ try
+ {
+ count.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
catch (SQLException e)
@@ -928,11 +968,25 @@
try
{
ResultSet prop = findChildPropertiesByParentIdentifier(getInternalId(parent.getIdentifier()));
- List<PropertyData> children = new ArrayList<PropertyData>();
- while (prop.next())
- children.add((PropertyData)itemData(parent.getQPath(), prop, I_CLASS_PROPERTY, null));
+ try
+ {
+ List<PropertyData> children = new ArrayList<PropertyData>();
+ while (prop.next())
+ children.add((PropertyData)itemData(parent.getQPath(), prop, I_CLASS_PROPERTY, null));
- return children;
+ return children;
+ }
+ finally
+ {
+ try
+ {
+ prop.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
catch (SQLException e)
{
@@ -953,11 +1007,25 @@
try
{
ResultSet prop = findChildPropertiesByParentIdentifier(getInternalId(parent.getIdentifier()));
- List<PropertyData> children = new ArrayList<PropertyData>();
- while (prop.next())
- children.add(propertyData(parent.getQPath(), prop));
+ try
+ {
+ List<PropertyData> children = new ArrayList<PropertyData>();
+ while (prop.next())
+ children.add(propertyData(parent.getQPath(), prop));
- return children;
+ return children;
+ }
+ finally
+ {
+ try
+ {
+ prop.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
catch (SQLException e)
{
@@ -998,12 +1066,26 @@
try
{
ResultSet refProps = findReferences(getInternalId(nodeIdentifier));
- List<PropertyData> references = new ArrayList<PropertyData>();
- while (refProps.next())
+ try
{
- references.add((PropertyData)itemData(null, refProps, I_CLASS_PROPERTY, null));
+ List<PropertyData> references = new ArrayList<PropertyData>();
+ while (refProps.next())
+ {
+ references.add((PropertyData)itemData(null, refProps, I_CLASS_PROPERTY, null));
+ }
+ return references;
}
- return references;
+ finally
+ {
+ try
+ {
+ refProps.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
catch (SQLException e)
{
@@ -1038,13 +1120,20 @@
return valueRecord.wasNull() ? readValueData(cid, orderNumb, persistedVersion, valueRecord
.getBinaryStream(COLUMN_VDATA)) : readValueData(propertyId, orderNumb, storageId);
}
+
+ return null;
}
finally
{
- valueRecord.close();
+ try
+ {
+ valueRecord.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
-
- return null;
}
catch (SQLException e)
{
@@ -1072,15 +1161,28 @@
protected ItemData getItemByIdentifier(String cid) throws RepositoryException, IllegalStateException
{
checkIfOpened();
- ResultSet item = null;
try
{
- item = findItemByIdentifier(cid);
- if (item.next())
+ ResultSet item = findItemByIdentifier(cid);
+ try
{
- return itemData(null, item, item.getInt(COLUMN_CLASS), null);
+ if (item.next())
+ {
+ return itemData(null, item, item.getInt(COLUMN_CLASS), null);
+ }
+ return null;
}
- return null;
+ finally
+ {
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
catch (SQLException e)
{
@@ -1090,18 +1192,6 @@
{
throw new RepositoryException("getItemData() error", e);
}
- finally
- {
- try
- {
- if (item != null)
- item.close();
- }
- catch (SQLException e)
- {
- LOG.error("getItemData() Error close resultset " + e.getMessage());
- }
- }
}
/**
@@ -1123,13 +1213,26 @@
IllegalStateException
{
checkIfOpened();
- ResultSet item = null;
try
{
- item = findItemByName(parentId, name.getAsString(), name.getIndex());
- if (item.next())
- return itemData(parent.getQPath(), item, item.getInt(COLUMN_CLASS), parent.getACL());
- return null;
+ ResultSet item = findItemByName(parentId, name.getAsString(), name.getIndex());
+ try
+ {
+ if (item.next())
+ return itemData(parent.getQPath(), item, item.getInt(COLUMN_CLASS), parent.getACL());
+ return null;
+ }
+ finally
+ {
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
catch (SQLException e)
{
@@ -1139,18 +1242,6 @@
{
throw new RepositoryException(e);
}
- finally
- {
- try
- {
- if (item != null)
- item.close();
- }
- catch (SQLException e)
- {
- LOG.error("getItemData() Error close resultset " + e.getMessage());
- }
- }
}
/**
@@ -1183,10 +1274,9 @@
String caid = cpid; // container ancestor id
do
{
- ResultSet parent = null;
+ ResultSet parent = findItemByIdentifier(caid);
try
{
- parent = findItemByIdentifier(caid);
if (!parent.next())
throw new InvalidItemStateException("Parent not found, uuid: " + getIdentifier(caid));
@@ -1197,7 +1287,14 @@
}
finally
{
- parent.close();
+ try
+ {
+ parent.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
while (!caid.equals(Constants.ROOT_PARENT_UUID));
@@ -1296,7 +1393,14 @@
}
finally
{
- pidrs.close();
+ try
+ {
+ pidrs.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
@@ -1426,6 +1530,7 @@
{
List<QPathEntry> qrpath = new ArrayList<QPathEntry>(); // reverted path
PreparedStatement cstmt = null;
+ ResultSet parent = null;
try
{
cstmt =
@@ -1433,7 +1538,7 @@
.prepareStatement("select * from get_qpath(?) AS (id varchar, name varchar, parent_id varchar, i_index int)");
cstmt.setString(1, cpid);
// cstmt.setString(2, caid);
- ResultSet parent = cstmt.executeQuery();
+ parent = cstmt.executeQuery();
while (parent.next())
{
@@ -1445,9 +1550,22 @@
// parent = findItemByIdentifier(caid);
if (qrpath.size() <= 0)
throw new InvalidItemStateException("Parent not found, uuid: " + getIdentifier(cpid));
+
}
finally
{
+ if (parent != null)
+ {
+ try
+ {
+ parent.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+
if (cstmt != null)
cstmt.close();
}
@@ -1706,7 +1824,14 @@
}
finally
{
- mtrs.close();
+ try
+ {
+ mtrs.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
@@ -1745,7 +1870,14 @@
}
finally
{
- exoPerm.close();
+ try
+ {
+ exoPerm.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
@@ -1772,7 +1904,14 @@
}
finally
{
- exoOwner.close();
+ try
+ {
+ exoOwner.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
@@ -1833,10 +1972,10 @@
}
}
+ // PRIMARY
+ ResultSet ptProp = findPropertyByName(cid, Constants.JCR_PRIMARYTYPE.getAsString());
try
{
- // PRIMARY
- ResultSet ptProp = findPropertyByName(cid, Constants.JCR_PRIMARYTYPE.getAsString());
if (!ptProp.next())
throw new PrimaryTypeNotFoundException("FATAL ERROR primary type record not found. Node "
@@ -1914,6 +2053,17 @@
throw new RepositoryException("FATAL ERROR Node " + getIdentifier(cid) + " " + qpath.getAsString()
+ " has wrong formed ACL. ", e);
}
+ finally
+ {
+ try
+ {
+ ptProp.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
catch (IllegalNameException e)
{
@@ -2020,7 +2170,14 @@
}
finally
{
- valueRecords.close();
+ try
+ {
+ valueRecords.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
@@ -2062,7 +2219,14 @@
}
finally
{
- valueRecords.close();
+ try
+ {
+ valueRecords.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
return data;
@@ -2119,8 +2283,6 @@
throws SQLException, IOException
{
- ResultSet valueResultSet = null;
-
byte[] buffer = new byte[0];
byte[] spoolBuffer = new byte[ValueFileIOHelper.IOBUFFER_SIZE];
int read;
@@ -2170,8 +2332,6 @@
}
finally
{
- if (valueResultSet != null)
- valueResultSet.close();
if (out != null)
{
out.close();
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MySQLMultiDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MySQLMultiDbJDBCConnection.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MySQLMultiDbJDBCConnection.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -85,7 +85,14 @@
}
finally
{
- item.close();
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
return super.addNodeRecord(data);
@@ -108,7 +115,14 @@
}
finally
{
- item.close();
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
return super.addPropertyRecord(data);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MySQLSingleDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MySQLSingleDbJDBCConnection.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MySQLSingleDbJDBCConnection.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -85,7 +85,14 @@
}
finally
{
- item.close();
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
return super.addNodeRecord(data);
@@ -108,7 +115,14 @@
}
finally
{
- item.close();
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
return super.addPropertyRecord(data);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/init/IngresSQLDBInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/init/IngresSQLDBInitializer.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/init/IngresSQLDBInitializer.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -22,6 +22,7 @@
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
/**
* Created by The eXo Platform SAS
@@ -68,14 +69,16 @@
protected boolean isSequenceExists(Connection conn, String sequenceName) throws SQLException
{
String seqName = sequenceName.toUpperCase().toLowerCase();
+ ResultSet srs = null;
+ Statement st = null;
try
{
- ResultSet srs = conn.createStatement().executeQuery("SELECT NEXT VALUE FOR " + seqName);
+ st = conn.createStatement();
+ srs = st.executeQuery("SELECT NEXT VALUE FOR " + seqName);
if (srs.next())
{
return true;
}
- srs.close();
return false;
}
catch (final SQLException e)
@@ -85,7 +88,6 @@
return false;
throw new SQLException(e.getMessage())
{
-
/**
* {@inheritDoc}
*/
@@ -96,6 +98,32 @@
}
};
}
+ finally
+ {
+ if (srs != null)
+ {
+ try
+ {
+ srs.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+ }
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/init/OracleDBInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/init/OracleDBInitializer.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/init/OracleDBInitializer.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -22,6 +22,7 @@
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
/**
* Created by The eXo Platform SAS
@@ -46,14 +47,16 @@
@Override
protected boolean isSequenceExists(Connection conn, String sequenceName) throws SQLException
{
+ ResultSet srs = null;
+ Statement st = null;
try
{
- ResultSet srs = conn.createStatement().executeQuery("SELECT " + sequenceName + ".nextval FROM DUAL");
+ st = conn.createStatement();
+ srs = st.executeQuery("SELECT " + sequenceName + ".nextval FROM DUAL");
if (srs.next())
{
return true;
}
- srs.close();
return false;
}
catch (SQLException e)
@@ -63,25 +66,86 @@
return false;
throw e;
}
+ finally
+ {
+ if (srs != null)
+ {
+ try
+ {
+ srs.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+ }
}
@Override
protected boolean isTriggerExists(Connection conn, String triggerName) throws SQLException
{
String sql = "SELECT COUNT(trigger_name) FROM all_triggers WHERE trigger_name = '" + triggerName + "'";
- ResultSet r = conn.createStatement().executeQuery(sql);
- if (r.next())
- return r.getInt(1) > 0;
- else
- return false;
+ Statement st = null;
+ ResultSet r = null;
+ try
+ {
+ st = conn.createStatement();
+ r = st.executeQuery(sql);
+
+ if (r.next())
+ return r.getInt(1) > 0;
+ else
+ return false;
+ }
+ finally
+ {
+ if (r != null)
+ {
+ try
+ {
+ r.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+ }
}
@Override
protected boolean isTableExists(Connection conn, String tableName) throws SQLException
{
+ Statement st = null;
try
{
- conn.createStatement().executeUpdate("SELECT 1 FROM " + tableName);
+ st = conn.createStatement();
+ st.executeUpdate("SELECT 1 FROM " + tableName);
return true;
}
catch (SQLException e)
@@ -91,6 +155,20 @@
return false;
throw e;
}
+ finally
+ {
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+ }
}
@Override
@@ -98,10 +176,44 @@
{
// use of oracle system view
String sql = "SELECT COUNT(index_name) FROM all_indexes WHERE index_name='" + indexName + "'";
- ResultSet r = conn.createStatement().executeQuery(sql);
- if (r.next())
- return r.getInt(1) > 0;
- else
- return false;
+ Statement st = null;
+ ResultSet r = null;
+ try
+ {
+ st = conn.createStatement();
+ r = st.executeQuery(sql);
+
+ if (r.next())
+ return r.getInt(1) > 0;
+ else
+ return false;
+ }
+ finally
+ {
+ if (r != null)
+ {
+ try
+ {
+ r.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
+ }
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -248,7 +248,7 @@
}
catch (SQLException e)
{
- LOG.error(e.getMessage(), e);
+ LOG.error("Can't close the ResultSet: " + e);
}
}
}
@@ -348,7 +348,7 @@
}
catch (SQLException e)
{
- LOG.error(e.getMessage(), e);
+ LOG.error("Can't close the ResultSet: " + e);
}
}
}
@@ -409,20 +409,34 @@
int cversion, int cnordernumb, AccessControlList parentACL) throws RepositoryException, SQLException
{
ResultSet ptProp = findNodeMainPropertiesByParentIdentifierCQ(cid);
- Map<String, SortedSet<TempPropertyData>> properties = new HashMap<String, SortedSet<TempPropertyData>>();
- while (ptProp.next())
+ try
{
- String key = ptProp.getString(COLUMN_NAME);
- SortedSet<TempPropertyData> values = properties.get(key);
- if (values == null)
+ Map<String, SortedSet<TempPropertyData>> properties = new HashMap<String, SortedSet<TempPropertyData>>();
+ while (ptProp.next())
{
- values = new TreeSet<TempPropertyData>();
- properties.put(key, values);
+ String key = ptProp.getString(COLUMN_NAME);
+ SortedSet<TempPropertyData> values = properties.get(key);
+ if (values == null)
+ {
+ values = new TreeSet<TempPropertyData>();
+ properties.put(key, values);
+ }
+ values.add(new TempPropertyData(ptProp));
}
- values.add(new TempPropertyData(ptProp));
+
+ return loadNodeRecord(parentPath, cname, cid, cpid, cindex, cversion, cnordernumb, properties, parentACL);
}
-
- return loadNodeRecord(parentPath, cname, cid, cpid, cindex, cversion, cnordernumb, properties, parentACL);
+ finally
+ {
+ try
+ {
+ ptProp.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
/**
@@ -644,8 +658,19 @@
}
finally
{
- result.close();
+ if (result != null)
+ {
+ try
+ {
+ result.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
}
+
if (caid.equals(Constants.ROOT_PARENT_UUID) || (id = getIdentifier(caid)).equals(Constants.ROOT_UUID))
{
if (id.equals(Constants.ROOT_UUID))
@@ -670,28 +695,35 @@
* {@inheritDoc}
*/
@Override
- protected void closeStatements() throws SQLException
+ protected void closeStatements()
{
super.closeStatements();
- if (findNodesByParentIdCQ != null)
+ try
{
- findNodesByParentIdCQ.close();
- }
+ if (findNodesByParentIdCQ != null)
+ {
+ findNodesByParentIdCQ.close();
+ }
- if (findPropertiesByParentIdCQ != null)
- {
- findPropertiesByParentIdCQ.close();
- }
+ if (findPropertiesByParentIdCQ != null)
+ {
+ findPropertiesByParentIdCQ.close();
+ }
- if (findNodeMainPropertiesByParentIdentifierCQ != null)
- {
- findNodeMainPropertiesByParentIdentifierCQ.close();
+ if (findNodeMainPropertiesByParentIdentifierCQ != null)
+ {
+ findNodeMainPropertiesByParentIdentifierCQ.close();
+ }
+
+ if (findItemQPathByIdentifierCQ != null)
+ {
+ findItemQPathByIdentifierCQ.close();
+ }
}
-
- if (findItemQPathByIdentifierCQ != null)
+ catch (SQLException e)
{
- findItemQPathByIdentifierCQ.close();
+ LOG.error("Can't close the Statement: " + e);
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MySQLMultiDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MySQLMultiDbJDBCConnection.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MySQLMultiDbJDBCConnection.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -85,7 +85,14 @@
}
finally
{
- item.close();
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
return super.addNodeRecord(data);
@@ -108,7 +115,14 @@
}
finally
{
- item.close();
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
return super.addPropertyRecord(data);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MySQLSingleDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MySQLSingleDbJDBCConnection.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MySQLSingleDbJDBCConnection.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -85,7 +85,14 @@
}
finally
{
- item.close();
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
return super.addNodeRecord(data);
@@ -108,7 +115,14 @@
}
finally
{
- item.close();
+ try
+ {
+ item.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
}
}
return super.addPropertyRecord(data);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/update/StorageUpdateManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/update/StorageUpdateManager.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/update/StorageUpdateManager.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -30,6 +30,7 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
@@ -199,6 +200,7 @@
PreparedStatement insertVersion = connection.prepareStatement(SQL_UPDATE_VERSION);
insertVersion.setString(1, REQUIRED_STORAGE_VERSION);
insertVersion.executeUpdate();
+ insertVersion.close();
connection.commit();
}
@@ -368,9 +370,11 @@
private String currentVersion() throws SQLException
{
ResultSet version = null;
+ Statement st = null;
try
{
- version = connection.createStatement().executeQuery(SQL_SELECT_VERSION);
+ st = connection.createStatement();
+ version = st.executeQuery(SQL_SELECT_VERSION);
if (version.next())
return version.getString("VERSION");
}
@@ -381,12 +385,34 @@
finally
{
if (version != null)
- version.close();
+ {
+ try
+ {
+ version.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the ResultSet: " + e);
+ }
+ }
+
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the Statement: " + e);
+ }
+ }
}
PreparedStatement insertVersion = connection.prepareStatement(SQL_INSERT_VERSION);
insertVersion.setString(1, REQUIRED_STORAGE_VERSION);
insertVersion.executeUpdate();
+ insertVersion.close();
return REQUIRED_STORAGE_VERSION;
}
@@ -402,9 +428,11 @@
ResultSet refs = null;
PreparedStatement update = null;
+ Statement st = null;
try
{
- refs = conn.createStatement().executeQuery(SQL_SELECT_JCRUUID);
+ st = conn.createStatement();
+ refs = st.executeQuery(SQL_SELECT_JCRUUID);
update = conn.prepareStatement(SQL_UPDATE_JCRUUID);
while (refs.next())
{
@@ -453,9 +481,40 @@
finally
{
if (refs != null)
- refs.close();
+ {
+ try
+ {
+ refs.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the ResultSet: " + e);
+ }
+ }
+
if (update != null)
- update.close();
+ {
+ try
+ {
+ update.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the Statement: " + e);
+ }
+ }
+
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the Statement: " + e);
+ }
+ }
}
}
@@ -467,10 +526,12 @@
ResultSet refs = null;
PreparedStatement update = null;
+ Statement st = null;
try
{
String sql = SQL_SELECT_FROZENJCRUUID.replaceAll(FROZENJCRUUID, searchCriteria);
- refs = conn.createStatement().executeQuery(SQL_SELECT_FROZENJCRUUID);
+ st = conn.createStatement();
+ refs = st.executeQuery(SQL_SELECT_FROZENJCRUUID);
while (refs.next())
{
try
@@ -502,9 +563,40 @@
finally
{
if (refs != null)
- refs.close();
+ {
+ try
+ {
+ refs.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the ResultSet: " + e);
+ }
+ }
+
if (update != null)
- update.close();
+ {
+ try
+ {
+ update.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the Statement: " + e);
+ }
+ }
+
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the Statement: " + e);
+ }
+ }
}
}
@@ -518,9 +610,11 @@
ResultSet refs = null;
PreparedStatement update = null;
+ Statement st = null;
try
{
- refs = conn.createStatement().executeQuery(SQL_SELECT_REFERENCES);
+ st = conn.createStatement();
+ refs = st.executeQuery(SQL_SELECT_REFERENCES);
update = conn.prepareStatement(SQL_INSERT_REFERENCES);
while (refs.next())
{
@@ -562,9 +656,40 @@
finally
{
if (refs != null)
- refs.close();
+ {
+ try
+ {
+ refs.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the ResultSet: " + e);
+ }
+ }
+
if (update != null)
- update.close();
+ {
+ try
+ {
+ update.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the Statement: " + e);
+ }
+ }
+
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ log.error("Can't close the Statement: " + e);
+ }
+ }
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -29,6 +29,7 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
@@ -154,6 +155,7 @@
{
dataSource = (DataSource)new InitialContext().lookup(sn);
Connection conn = null;
+ Statement st = null;
try
{
conn = dataSource.getConnection();
@@ -216,15 +218,15 @@
// check if table already exists
if (!trs.next())
{
+ st = conn.createStatement();
+
// create table
- conn.createStatement().executeUpdate(
- "CREATE TABLE " + tableName
- + " (PROPERTY_ID VARCHAR(96) NOT NULL, ORDER_NUM INTEGER NOT NULL, CAS_ID VARCHAR(512) NOT NULL, "
- + "CONSTRAINT " + sqlConstraintPK + " PRIMARY KEY(PROPERTY_ID, ORDER_NUM))");
+ st.executeUpdate("CREATE TABLE " + tableName
+ + " (PROPERTY_ID VARCHAR(96) NOT NULL, ORDER_NUM INTEGER NOT NULL, CAS_ID VARCHAR(512) NOT NULL, "
+ + "CONSTRAINT " + sqlConstraintPK + " PRIMARY KEY(PROPERTY_ID, ORDER_NUM))");
// create index on hash (CAS_ID)
- conn.createStatement().executeUpdate(
- "CREATE INDEX " + sqlVCASIDX + " ON " + tableName + "(CAS_ID, PROPERTY_ID, ORDER_NUM)");
+ st.executeUpdate("CREATE INDEX " + sqlVCASIDX + " ON " + tableName + "(CAS_ID, PROPERTY_ID, ORDER_NUM)");
if (LOG.isDebugEnabled())
{
@@ -242,6 +244,18 @@
}
finally
{
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
if (conn != null)
{
try
@@ -422,12 +436,14 @@
try
{
Connection con = dataSource.getConnection();
+ ResultSet rs = null;
+ PreparedStatement ps = null;
try
{
- PreparedStatement ps = con.prepareStatement(sqlSelectRecord);
+ ps = con.prepareStatement(sqlSelectRecord);
ps.setString(1, propertyId);
ps.setInt(2, orderNum);
- ResultSet rs = ps.executeQuery();
+ rs = ps.executeQuery();
if (rs.next())
{
@@ -441,6 +457,30 @@
}
finally
{
+ if (rs != null)
+ {
+ try
+ {
+ rs.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+
+ if (ps != null)
+ {
+ try
+ {
+ ps.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
con.close();
}
}
@@ -458,16 +498,17 @@
try
{
Connection con = dataSource.getConnection();
+ PreparedStatement ps = null;
+ ResultSet rs = null;
try
{
List<String> ids = new ArrayList<String>();
- PreparedStatement ps;
if (ownOnly)
{
ps = con.prepareStatement(sqlSelectOwnRecords);
ps.setString(1, propertyId);
- ResultSet rs = ps.executeQuery();
+ rs = ps.executeQuery();
if (rs.next())
{
do
@@ -489,7 +530,7 @@
// TODO unused externaly feature (except tests)
ps = con.prepareStatement(sqlSelectRecords);
ps.setString(1, propertyId);
- ResultSet rs = ps.executeQuery();
+ rs = ps.executeQuery();
if (rs.next())
{
do
@@ -507,6 +548,30 @@
}
finally
{
+ if (rs != null)
+ {
+ try
+ {
+ rs.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the ResultSet: " + e);
+ }
+ }
+
+ if (ps != null)
+ {
+ try
+ {
+ ps.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
con.close();
}
}
@@ -524,14 +589,27 @@
try
{
Connection con = dataSource.getConnection();
+ PreparedStatement ps = null;
try
{
- PreparedStatement ps = con.prepareStatement(sqlSelectSharingProps);
+ ps = con.prepareStatement(sqlSelectSharingProps);
ps.setString(1, propertyId);
return ps.executeQuery().next();
}
finally
{
+ if (ps != null)
+ {
+ try
+ {
+ ps.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
con.close();
}
}
@@ -540,5 +618,4 @@
throw new VCASException("VCAS HAS SHARED IDs database error: " + e, e);
}
}
-
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializer.java 2010-06-09 13:07:35 UTC (rev 2525)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializer.java 2010-06-09 13:47:50 UTC (rev 2526)
@@ -28,6 +28,7 @@
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -324,8 +325,10 @@
}
String sql = null;
+ Statement st = null;
try
{
+ st = connection.createStatement();
connection.setAutoCommit(false);
for (String scr : scripts)
@@ -341,7 +344,7 @@
LOG.debug("Execute script: \n[" + sql + "]");
}
- connection.createStatement().executeUpdate(sql);
+ st.executeUpdate(sql);
}
}
@@ -377,6 +380,18 @@
}
finally
{
+ if (st != null)
+ {
+ try
+ {
+ st.close();
+ }
+ catch (SQLException e)
+ {
+ LOG.error("Can't close the Statement: " + e);
+ }
+ }
+
try
{
connection.close();
14 years, 1 month
exo-jcr SVN: r2525 - jcr/trunk/exo.jcr.component.core.
by do-not-reply@jboss.org
Author: nzamosenchuk
Date: 2010-06-09 09:07:35 -0400 (Wed, 09 Jun 2010)
New Revision: 2525
Modified:
jcr/trunk/exo.jcr.component.core/pom.xml
Log:
EXOJCR-764 : fix argline:)
Modified: jcr/trunk/exo.jcr.component.core/pom.xml
===================================================================
--- jcr/trunk/exo.jcr.component.core/pom.xml 2010-06-09 12:37:41 UTC (rev 2524)
+++ jcr/trunk/exo.jcr.component.core/pom.xml 2010-06-09 13:07:35 UTC (rev 2525)
@@ -374,7 +374,7 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
- <argLine>${env.MAVEN_OPTS}${env.MAVEN_OPTS} -Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/test.policy</argLine>
+ <argLine>${env.MAVEN_OPTS} -Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/test.policy</argLine>
<systemProperties>
<property>
<name>jcr.test.configuration.file</name>
14 years, 1 month
exo-jcr SVN: r2524 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache.
by do-not-reply@jboss.org
Author: sergiykarpenko
Date: 2010-06-09 08:37:41 -0400 (Wed, 09 Jun 2010)
New Revision: 2524
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
Log:
EXOJCR-392: Implemented - check all items in cache is it descendant of reordered node.
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2010-06-09 12:37:03 UTC (rev 2523)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/jbosscache/JBossCacheWorkspaceStorageCache.java 2010-06-09 12:37:41 UTC (rev 2524)
@@ -25,6 +25,7 @@
import org.exoplatform.services.jcr.dataflow.ItemState;
import org.exoplatform.services.jcr.dataflow.ItemStateChangesLog;
import org.exoplatform.services.jcr.dataflow.persistent.WorkspaceStorageCache;
+import org.exoplatform.services.jcr.datamodel.IllegalPathException;
import org.exoplatform.services.jcr.datamodel.InternalQName;
import org.exoplatform.services.jcr.datamodel.ItemData;
import org.exoplatform.services.jcr.datamodel.NodeData;
@@ -902,15 +903,9 @@
.getIdentifier());
// remove from CHILD_NODES as parent
- Fqn<String> parentFqn = makeChildListFqn(childNodes, item.getIdentifier());
- Node<Serializable, Object> parent = cache.getNode(parentFqn);
- if (parent != null && parent.isLeaf())
- {
- cache.removeNode(parentFqn);
- }
+ cache.removeNode(makeChildListFqn(childNodes, item.getIdentifier()));
// remove from CHILD_NODES_LIST as parent
-
cache.removeNode(makeChildListFqn(childNodesList, item.getIdentifier()));
// remove from CHILD_PROPS as parent
@@ -1014,11 +1009,87 @@
int prevNodeIndex = prevNode.getQPath().getEntries()[prevNode.getQPath().getEntries().length - 1].getIndex();
if (nodeIndex != prevNodeIndex)
{
- updateTreePath(node.getIdentifier(), node.getQPath(), null); // don't change ACL, it's same parent
+ // its a samename reordering
+ updateTreePath(prevNode.getQPath(), node.getQPath(), null); // don't change ACL, it's same parent
}
}
/**
+ * Check all items in cache - is it descendant of prevRootPath, and update path according newRootPath.
+ *
+ * @param prevRootPath
+ * @param newRootPath
+ * @param acl
+ */
+ protected void updateTreePath(final QPath prevRootPath, final QPath newRootPath, final AccessControlList acl)
+ {
+ boolean inheritACL = acl != null;
+
+ // check all ITEMS in cache
+ Node<Serializable, Object> items = cache.getNode(itemsRoot);
+ Set<Object> childrenNames = items.getChildrenNames();
+ Iterator<Object> namesIt = childrenNames.iterator();
+
+ while (namesIt.hasNext())
+ {
+ String id = (String)namesIt.next();
+ ItemData data = (ItemData)cache.get(makeItemFqn(id), ITEM_DATA);
+
+ // check is this descendant of prevRootPath
+ QPath nodeQPath = data.getQPath();
+ if (nodeQPath.isDescendantOf(prevRootPath))
+ {
+
+ //make relative path
+ QPathEntry[] relativePath = null;
+ try
+ {
+ relativePath = nodeQPath.getRelPath(nodeQPath.getDepth() - prevRootPath.getDepth());
+ }
+ catch (IllegalPathException e)
+ {
+ // Do nothing. Never happens.
+ }
+
+ // make new path - no matter node or property
+ QPath newPath = QPath.makeChildPath(newRootPath, relativePath);
+
+ if (data.isNode())
+ {
+ // update node
+
+ NodeData prevNode = (NodeData)data;
+
+ TransientNodeData newNode =
+ new TransientNodeData(newPath, prevNode.getIdentifier(), prevNode.getPersistedVersion(), prevNode
+ .getPrimaryTypeName(), prevNode.getMixinTypeNames(), prevNode.getOrderNumber(), prevNode
+ .getParentIdentifier(), inheritACL ? acl : prevNode.getACL()); // TODO check ACL
+ // update this node
+ cache.put(makeItemFqn(newNode.getIdentifier()), ITEM_DATA, newNode);
+ }
+ else
+ {
+ //update property
+
+ PropertyData prevProp = (PropertyData)data;
+
+ if (inheritACL
+ && (prevProp.getQPath().getName().equals(Constants.EXO_PERMISSIONS) || prevProp.getQPath().getName()
+ .equals(Constants.EXO_OWNER)))
+ {
+ inheritACL = false;
+ }
+
+ TransientPropertyData newProp =
+ new TransientPropertyData(newPath, prevProp.getIdentifier(), prevProp.getPersistedVersion(), prevProp
+ .getType(), prevProp.getParentIdentifier(), prevProp.isMultiValued(), prevProp.getValues());
+ cache.put(makeItemFqn(newProp.getIdentifier()), ITEM_DATA, newProp);
+ }
+ }
+ }
+ }
+
+ /**
* Update Nodes tree with new path.
*
* @param parentId String - root node id of JCR subtree.
14 years, 1 month
exo-jcr SVN: r2523 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr: impl/core and 1 other directory.
by do-not-reply@jboss.org
Author: sergiykarpenko
Date: 2010-06-09 08:37:03 -0400 (Wed, 09 Jun 2010)
New Revision: 2523
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/datamodel/QPath.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/datamodel/QPathEntry.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
Log:
EXOJCR-766: QPathEntry - equals() method added
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/datamodel/QPath.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/datamodel/QPath.java 2010-06-09 12:26:44 UTC (rev 2522)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/datamodel/QPath.java 2010-06-09 12:37:03 UTC (rev 2523)
@@ -37,7 +37,6 @@
public class QPath implements Comparable<QPath>
{
-
/**
* Logger.
*/
@@ -176,7 +175,7 @@
for (int i = 0; i < ancestorNames.length; i++)
{
- if (!ancestorNames[i].equals(names[i]))
+ if (!names[i].equals(ancestorNames[i]))
return false;
}
return true;
@@ -239,7 +238,7 @@
}
/**
- * @return last name of this path
+ * @return last QPathEntry of this path
*/
public InternalQName getName()
{
@@ -247,7 +246,7 @@
}
/**
- * @return index
+ * @return index of last QPathEntry of this paths
*/
public int getIndex()
{
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/datamodel/QPathEntry.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/datamodel/QPathEntry.java 2010-06-09 12:26:44 UTC (rev 2522)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/datamodel/QPathEntry.java 2010-06-09 12:37:03 UTC (rev 2523)
@@ -158,4 +158,18 @@
return getAsString(true);
}
+ @Override
+ public boolean equals(Object o)
+ {
+ boolean result = super.equals(o);
+
+ if (result == true && (o instanceof QPathEntry))
+ {
+ return result && (index == ((QPathEntry)o).getIndex());
+ }
+ else
+ {
+ return result;
+ }
+ }
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2010-06-09 12:26:44 UTC (rev 2522)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2010-06-09 12:37:03 UTC (rev 2523)
@@ -2393,18 +2393,14 @@
NodeData nodeData = siblings.get(i);
if (srcInd == -1)
{
- if (nodeData.getQPath().getName().equals(srcPath.getName())
- && (nodeData.getQPath().getIndex() == srcPath.getIndex() || srcPath.getIndex() == 0
- && nodeData.getQPath().getIndex() == 1))
+ if (nodeData.getQPath().getName().equals(srcPath.getName()))
{
srcInd = i;
}
}
if (destPath != null && destInd == -1)
{
- if (nodeData.getQPath().getName().equals(destPath.getName())
- && (nodeData.getQPath().getIndex() == destPath.getIndex() || destPath.getIndex() == 0
- && nodeData.getQPath().getIndex() == 1))
+ if (nodeData.getQPath().getName().equals(destPath.getName()))
{
destInd = i;
if (srcInd != -1)
@@ -2466,7 +2462,7 @@
NodeData sdata = siblings.get(j);
// calculating same name index
- if (sdata.getQPath().getName().equals(srcPath.getName()))
+ if (sdata.getQPath().getName().getAsString().equals(srcPath.getName().getAsString()))
++sameNameIndex;
// skeep unchanged
@@ -2475,7 +2471,8 @@
NodeData newData = sdata;
// change same name index
- if (sdata.getQPath().getName().equals(srcPath.getName()) && sdata.getQPath().getIndex() != sameNameIndex)
+ if (sdata.getQPath().getName().getAsString().equals(srcPath.getName().getAsString())
+ && sdata.getQPath().getIndex() != sameNameIndex)
{
// update with new index
QPath siblingPath =
14 years, 1 month
exo-jcr SVN: r2522 - jcr/trunk/exo.jcr.component.core.
by do-not-reply@jboss.org
Author: nzamosenchuk
Date: 2010-06-09 08:26:44 -0400 (Wed, 09 Jun 2010)
New Revision: 2522
Modified:
jcr/trunk/exo.jcr.component.core/pom.xml
Log:
EXOJCR-764 : added "${env.MAVEN_OPTS} -Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/test.policy" to pom.xml in build block
Modified: jcr/trunk/exo.jcr.component.core/pom.xml
===================================================================
--- jcr/trunk/exo.jcr.component.core/pom.xml 2010-06-09 11:50:54 UTC (rev 2521)
+++ jcr/trunk/exo.jcr.component.core/pom.xml 2010-06-09 12:26:44 UTC (rev 2522)
@@ -374,7 +374,7 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
- <argLine>${env.MAVEN_OPTS}</argLine>
+ <argLine>${env.MAVEN_OPTS}${env.MAVEN_OPTS} -Djava.security.manager -Djava.security.policy=${project.build.directory}/test-classes/test.policy</argLine>
<systemProperties>
<property>
<name>jcr.test.configuration.file</name>
14 years, 1 month
exo-jcr SVN: r2521 - jcr/trunk/exo.jcr.component.core and 4 other directories.
by do-not-reply@jboss.org
Author: nzamosenchuk
Date: 2010-06-09 07:50:54 -0400 (Wed, 09 Jun 2010)
New Revision: 2521
Added:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java
jcr/trunk/exo.jcr.component.core/src/test/resources/test.policy
Removed:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java
Modified:
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/ConversationState.java
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/Identity.java
jcr/trunk/exo.jcr.component.core/pom.xml
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/RepositoryImpl.java
Log:
EXOJCR-764 : merging from branch SEC into trunk
EXOJCR-767 : merging from branch SEC into trunk
EXOJCR-770 : merging from branch SEC into trunk
Modified: core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/ConversationState.java
===================================================================
--- core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/ConversationState.java 2010-06-09 09:48:49 UTC (rev 2520)
+++ core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/ConversationState.java 2010-06-09 11:50:54 UTC (rev 2521)
@@ -23,7 +23,7 @@
/**
* Created by The eXo Platform SAS .
- *
+ *
* @author Gennady Azarenkov
* @version $Id: $
*/
@@ -31,6 +31,8 @@
public class ConversationState
{
+ private static final RuntimePermission SET_CURRENT_STATE_PERMISSION = new RuntimePermission("setCurrentState");
+
/**
* "subject".
*/
@@ -67,11 +69,17 @@
/**
* Preset current ConversationState.
- *
+ *
* @param state ConversationState
*/
public static void setCurrent(ConversationState state)
{
+ SecurityManager security = System.getSecurityManager();
+ if (security != null)
+ {
+ security.checkPermission(SET_CURRENT_STATE_PERMISSION);
+ }
+
current.set(state);
}
@@ -85,12 +93,13 @@
/**
* sets attribute.
- *
+ *
* @param key
* @param value
*/
public void setAttribute(String name, Object value)
{
+ // TODO : need check is it allowed to set any attributes
this.attributes.put(name, value);
}
@@ -113,7 +122,7 @@
/**
* removes attribute.
- *
+ *
* @param key
*/
public void removeAttribute(String name)
Modified: core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/Identity.java
===================================================================
--- core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/Identity.java 2010-06-09 09:48:49 UTC (rev 2520)
+++ core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/Identity.java 2010-06-09 11:50:54 UTC (rev 2521)
@@ -20,15 +20,17 @@
import java.util.Collection;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.Set;
import javax.security.auth.Subject;
/**
- * Created by The eXo Platform SAS .<br/> User Session encapsulates user's
- * principals such as name, groups along with JAAS subject (useful in J2EE
- * environment) as well as other optional attributes
- *
+ * Created by The eXo Platform SAS .<br/>
+ * User Session encapsulates user's principals such as name, groups along with
+ * JAAS subject (useful in J2EE environment) as well as other optional
+ * attributes
+ *
* @author Gennady Azarenkov
* @version $Id: $
*/
@@ -36,6 +38,10 @@
public class Identity
{
+ private static final RuntimePermission SET_SUBJECT_PERMISSION = new RuntimePermission("setSubject");
+
+ private static final RuntimePermission MODIFY_IDENTITY_PERMISSION = new RuntimePermission("modifyIdentity");
+
/**
* User's identifier.
*/
@@ -84,8 +90,8 @@
public Identity(String userId, Collection<MembershipEntry> memberships, Collection<String> roles)
{
this.userId = userId;
- this.memberships = new HashSet<MembershipEntry>(memberships);
- this.roles = roles;
+ this.memberships = new SecureSet<MembershipEntry>(memberships);
+ this.roles = new SecureSet<String>(roles);
}
/**
@@ -118,7 +124,7 @@
/**
* Check is user member of group.
- *
+ *
* @param group the group.
* @return true if user has any membershipType for given group, false
* otherwise.
@@ -133,6 +139,7 @@
*/
public Set<String> getGroups()
{
+ // TODO : Need to protect group's set ??
Set<String> groups = new HashSet<String>();
for (MembershipEntry m : memberships)
{
@@ -146,7 +153,7 @@
*/
public void setMemberships(Collection<MembershipEntry> memberships)
{
- this.memberships = new HashSet<MembershipEntry>(memberships);
+ this.memberships = new SecureSet<MembershipEntry>(memberships);
}
/**
@@ -159,12 +166,12 @@
/**
* Sets the roles for J2EE environment using.
- *
+ *
* @param roles the roles.
*/
public void setRoles(Collection<String> roles)
{
- this.roles = roles;
+ this.roles = new SecureSet<String>(roles);
}
/**
@@ -188,12 +195,17 @@
*/
public void setSubject(Subject subject)
{
+ SecurityManager security = System.getSecurityManager();
+ if (security != null)
+ {
+ security.checkPermission(SET_SUBJECT_PERMISSION);
+ }
this.subject = subject;
}
/**
* Check is given {@link MembershipEntry} presents in user's memberships.
- *
+ *
* @param checkMe the MembershipEntry.
* @return true if presents false otherwise.
*/
@@ -202,4 +214,146 @@
return memberships.contains(checkMe);
}
+ private static class SecureSet<T> implements Set<T>
+ {
+
+ final Set<T> set;
+
+ SecureSet()
+ {
+ this.set = new HashSet<T>();
+ }
+
+ SecureSet(Collection<T> set)
+ {
+ this.set = new HashSet<T>(set);
+ }
+
+ public boolean add(T e)
+ {
+ checkPermission();
+ return set.add(e);
+ }
+
+ public boolean addAll(Collection<? extends T> elements)
+ {
+ if (elements == null)
+ {
+ throw new NullPointerException();
+ }
+ checkPermission();
+ return elements.size() > 0;
+ }
+
+ public void clear()
+ {
+ checkPermission();
+ set.clear();
+ }
+
+ public boolean contains(Object o)
+ {
+ return set.contains(o);
+ }
+
+ public boolean containsAll(Collection<?> coll)
+ {
+ return set.containsAll(coll);
+ }
+
+ public boolean equals(Object o)
+ {
+ return o == this || set.equals(o);
+ }
+
+ public int hashCode()
+ {
+ return set.hashCode();
+ }
+
+ public boolean isEmpty()
+ {
+ return set.isEmpty();
+ }
+
+ public Iterator<T> iterator()
+ {
+ return new Iterator<T>()
+ {
+ Iterator<? extends T> i = set.iterator();
+
+ public boolean hasNext()
+ {
+ return i.hasNext();
+ }
+
+ public T next()
+ {
+ return i.next();
+ }
+
+ public void remove()
+ {
+ checkPermission();
+ i.remove();
+ }
+ };
+ }
+
+ public boolean remove(Object o)
+ {
+ checkPermission();
+ return set.remove(o);
+ }
+
+ public boolean removeAll(Collection<?> pds)
+ {
+ if (pds == null)
+ {
+ throw new NullPointerException();
+ }
+ checkPermission();
+ return set.removeAll(pds);
+ }
+
+ public boolean retainAll(Collection<?> pds)
+ {
+ if (pds == null)
+ {
+ throw new NullPointerException();
+ }
+ checkPermission();
+ return set.retainAll(pds);
+ }
+
+ public int size()
+ {
+ return set.size();
+ }
+
+ public Object[] toArray()
+ {
+ return set.toArray();
+ }
+
+ public <T> T[] toArray(T[] a)
+ {
+ return set.toArray(a);
+ }
+
+ public String toString()
+ {
+ return set.toString();
+ }
+
+ protected void checkPermission()
+ {
+ SecurityManager security = System.getSecurityManager();
+ if (security != null)
+ {
+ security.checkPermission(MODIFY_IDENTITY_PERMISSION);
+ }
+ }
+ }
+
}
Modified: jcr/trunk/exo.jcr.component.core/pom.xml
===================================================================
--- jcr/trunk/exo.jcr.component.core/pom.xml 2010-06-09 09:48:49 UTC (rev 2520)
+++ jcr/trunk/exo.jcr.component.core/pom.xml 2010-06-09 11:50:54 UTC (rev 2521)
@@ -340,6 +340,7 @@
<include>**/*.tiff</include>
<include>**/*.pdf</include>
<include>**/*.dtd</include>
+ <include>**/*.policy</include>
</includes>
</testResource>
</testResources>
@@ -589,6 +590,7 @@
<exclude>org/apache/jackrabbit/test/api/TestAll.java</exclude>
<exclude>org/apache/jackrabbit/test/api/**/Abstract*.java</exclude>
<exclude>org/apache/jackrabbit/test/api/**/FrozenNodeTest.java</exclude>
+ <exclude>org/exoplatform/services/jcr/impl/core/security/Test*.java</exclude>
</excludes>
</configuration>
</plugin>
@@ -696,6 +698,8 @@
<exclude>org/apache/jackrabbit/test/api/TestAll.java</exclude>
<exclude>org/apache/jackrabbit/test/api/**/Abstract*.java</exclude>
<exclude>org/apache/jackrabbit/test/api/**/FrozenNodeTest.java</exclude>
+ <!-- security -->
+ <exclude>org/exoplatform/services/jcr/impl/core/security/Test*.java</exclude>
</excludes>
</configuration>
</plugin>
@@ -735,6 +739,9 @@
<include>**/**/TestSVNodeDataOptimization_.java</include>
<include>**/**/TestValueConstraints.java</include>
</includes>
+ <excludes>
+ <exclude>org/exoplatform/services/jcr/impl/core/security/Test*.java</exclude>
+ </excludes>
</configuration>
</plugin>
</plugins>
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/RepositoryImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/RepositoryImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/RepositoryImpl.java 2010-06-09 11:50:54 UTC (rev 2521)
@@ -60,13 +60,15 @@
/**
* Created by The eXo Platform SAS.<br/>
* Implementation of javax.jcr.Repository
- *
+ *
* @author <a href="mailto:geaz@users.sourceforge.net">Gennady Azarenkov </a>
* @version $Id: RepositoryImpl.java 14487 2008-05-20 07:08:40Z gazarenkov $
*/
public class RepositoryImpl implements ManageableRepository
{
+ private static final RuntimePermission GET_SYSTEM_SESSION_PERMISSION = new RuntimePermission("getJCRSystemSession");
+
/**
* Repository descriptors.
*/
@@ -134,7 +136,7 @@
/**
* RepositoryImpl constructor.
- *
+ *
* @param container Repository container
* @throws RepositoryException error of initialization
* @throws RepositoryConfigurationException error of configuration
@@ -215,13 +217,13 @@
/**
* Creation contains three steps. First
* <code>configWorkspace(WorkspaceEntry wsConfig)</code> - registration a new
- * configuration in RepositoryContainer and create WorkspaceContainer. Second,
- * the main step, is
+ * configuration in RepositoryContainer and create WorkspaceContainer.
+ * Second, the main step, is
* <code>initWorkspace(String workspaceName, String rootNodeType)</code> -
* initializing workspace by name and root nodetype. Third, final step,
* starting all components of workspace. Before creation workspace <b>must be
* configured</b>
- *
+ *
* @see org.exoplatform.services.jcr.core.RepositoryImpl#configWorkspace(org.exoplatform.services.jcr.config.WorkspaceEntry
* )
* @see org.exoplatform.services.jcr.core.RepositoryImpl#initWorkspace(java.lang.String,java.lang.String)
@@ -327,6 +329,13 @@
*/
public SessionImpl getSystemSession(String workspaceName) throws RepositoryException
{
+ // Need privileges to get system session.
+ SecurityManager security = System.getSecurityManager();
+ if (security != null)
+ {
+ security.checkPermission(GET_SYSTEM_SESSION_PERMISSION);
+ }
+
if (getState() == OFFLINE)
LOG.warn("Repository " + getName() + " is OFFLINE.");
@@ -410,7 +419,7 @@
/**
* Internal Remove Workspace.
- *
+ *
* @param workspaceName workspace name
* @throws RepositoryException error of remove
*/
@@ -498,7 +507,7 @@
/**
* Internal login.
- *
+ *
* @param state ConversationState
* @param workspaceName workspace name
* @return SessionImpl
@@ -580,7 +589,7 @@
/**
* Set all repository workspaces ReadOnly status.
- *
+ *
* @param wsStatus ReadOnly workspace status
*/
private void setAllWorkspacesReadOnly(boolean wsStatus)
Copied: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security (from rev 2493, jcr/branches/1.12-SEC/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security)
Deleted: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java
===================================================================
--- jcr/branches/1.12-SEC/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java 2010-06-04 13:47:36 UTC (rev 2493)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java 2010-06-09 11:50:54 UTC (rev 2521)
@@ -1,173 +0,0 @@
-/**
- * Copyright (C) 2010 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * 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.
- *
- * This software 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.exoplatform.services.jcr.impl.core.security;
-
-import org.exoplatform.services.jcr.BaseStandaloneTest;
-
-import java.net.URL;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.AllPermission;
-import java.security.CodeSource;
-import java.security.Permission;
-import java.security.PermissionCollection;
-import java.security.Permissions;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.ProtectionDomain;
-import java.util.Enumeration;
-
-/**
- * @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a>
- * @version $Id$
- */
-public abstract class BaseSecurityTest extends BaseStandaloneTest
-{
-
- public void setUp() throws Exception
- {
- super.setUp();
- SecurityManager security = System.getSecurityManager();
- assertNotNull("SecurityManager must be ON.", security);
- }
-
- public String getRepositoryName()
- {
- return "db1";
- }
-
- /**
- * Run privileged action with specified privileges.
- */
- protected <T> T doPrivilegedAction(PrivilegedExceptionAction<T> action, ProtectionDomain[] protectionDomains)
- throws Throwable
- {
- try
- {
- return AccessController.doPrivileged(action, new AccessControlContext(protectionDomains));
- }
- catch (PrivilegedActionException pae)
- {
- throw pae.getCause();
- }
- }
-
- /**
- * Run privileged action without any privileges.
- */
- protected <T> T doPrivilegedAction(PrivilegedExceptionAction<T> action) throws Throwable
- {
- ProtectionDomain[] protectionDomains =
- new ProtectionDomain[]{new ProtectionDomain(new CodeSource(getCodeSource(),
- (java.security.cert.Certificate[])null), new Permissions())};
- try
- {
- return AccessController.doPrivileged(action, new AccessControlContext(protectionDomains));
- }
- catch (PrivilegedActionException pae)
- {
- throw pae.getCause();
- }
- }
-
- /**
- * Run privileged action with static permissions only.
- */
- protected <T> T doPrivilegedActionStaticPermissions(PrivilegedExceptionAction<T> action) throws Throwable
- {
- try
- {
- return AccessController.doPrivileged(action);
- }
- catch (PrivilegedActionException pae)
- {
- throw pae.getCause();
- }
- }
-
- /**
- * Run privileged action with specified privileges.
- */
- protected <T> T doPrivilegedAction(PrivilegedAction<T> action, ProtectionDomain[] protectionDomains)
- {
- return AccessController.doPrivileged(action, new AccessControlContext(protectionDomains));
- }
-
- /**
- * Run privileged action without any privileges.
- */
- protected <T> T doPrivilegedAction(PrivilegedAction<T> action)
- {
- ProtectionDomain[] protectionDomains =
- new ProtectionDomain[]{new ProtectionDomain(new CodeSource(getCodeSource(),
- (java.security.cert.Certificate[])null), new Permissions())};
- return AccessController.doPrivileged(action, new AccessControlContext(protectionDomains));
- }
-
- /**
- * Run privileged action with static permissions only.
- */
- protected <T> T doPrivilegedActionStaticPermissions(PrivilegedAction<T> action)
- {
- return AccessController.doPrivileged(action);
- }
-
- /**
- * Get code-source of class.
- */
- protected URL getCodeSource()
- {
- return getClass().getProtectionDomain().getCodeSource().getLocation();
- }
-
- protected static final PermissionCollection ALL = new PermissionCollection()
- {
-
- public boolean implies(Permission permission)
- {
- return true;
- }
-
- public Enumeration<Permission> elements()
- {
- return new Enumeration<Permission>()
- {
- private boolean hasMore = true;
-
- public boolean hasMoreElements()
- {
- return hasMore;
- }
-
- public Permission nextElement()
- {
- hasMore = false;
- return new AllPermission();
- }
- };
- }
-
- public void add(Permission permission)
- {
- }
- };
-
-}
Copied: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java (from rev 2493, jcr/branches/1.12-SEC/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java)
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java (rev 0)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/BaseSecurityTest.java 2010-06-09 11:50:54 UTC (rev 2521)
@@ -0,0 +1,173 @@
+/**
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * 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.
+ *
+ * This software 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.exoplatform.services.jcr.impl.core.security;
+
+import org.exoplatform.services.jcr.BaseStandaloneTest;
+
+import java.net.URL;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.AllPermission;
+import java.security.CodeSource;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.security.ProtectionDomain;
+import java.util.Enumeration;
+
+/**
+ * @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a>
+ * @version $Id$
+ */
+public abstract class BaseSecurityTest extends BaseStandaloneTest
+{
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ SecurityManager security = System.getSecurityManager();
+ assertNotNull("SecurityManager must be ON.", security);
+ }
+
+ public String getRepositoryName()
+ {
+ return "db1";
+ }
+
+ /**
+ * Run privileged action with specified privileges.
+ */
+ protected <T> T doPrivilegedAction(PrivilegedExceptionAction<T> action, ProtectionDomain[] protectionDomains)
+ throws Throwable
+ {
+ try
+ {
+ return AccessController.doPrivileged(action, new AccessControlContext(protectionDomains));
+ }
+ catch (PrivilegedActionException pae)
+ {
+ throw pae.getCause();
+ }
+ }
+
+ /**
+ * Run privileged action without any privileges.
+ */
+ protected <T> T doPrivilegedAction(PrivilegedExceptionAction<T> action) throws Throwable
+ {
+ ProtectionDomain[] protectionDomains =
+ new ProtectionDomain[]{new ProtectionDomain(new CodeSource(getCodeSource(),
+ (java.security.cert.Certificate[])null), new Permissions())};
+ try
+ {
+ return AccessController.doPrivileged(action, new AccessControlContext(protectionDomains));
+ }
+ catch (PrivilegedActionException pae)
+ {
+ throw pae.getCause();
+ }
+ }
+
+ /**
+ * Run privileged action with static permissions only.
+ */
+ protected <T> T doPrivilegedActionStaticPermissions(PrivilegedExceptionAction<T> action) throws Throwable
+ {
+ try
+ {
+ return AccessController.doPrivileged(action);
+ }
+ catch (PrivilegedActionException pae)
+ {
+ throw pae.getCause();
+ }
+ }
+
+ /**
+ * Run privileged action with specified privileges.
+ */
+ protected <T> T doPrivilegedAction(PrivilegedAction<T> action, ProtectionDomain[] protectionDomains)
+ {
+ return AccessController.doPrivileged(action, new AccessControlContext(protectionDomains));
+ }
+
+ /**
+ * Run privileged action without any privileges.
+ */
+ protected <T> T doPrivilegedAction(PrivilegedAction<T> action)
+ {
+ ProtectionDomain[] protectionDomains =
+ new ProtectionDomain[]{new ProtectionDomain(new CodeSource(getCodeSource(),
+ (java.security.cert.Certificate[])null), new Permissions())};
+ return AccessController.doPrivileged(action, new AccessControlContext(protectionDomains));
+ }
+
+ /**
+ * Run privileged action with static permissions only.
+ */
+ protected <T> T doPrivilegedActionStaticPermissions(PrivilegedAction<T> action)
+ {
+ return AccessController.doPrivileged(action);
+ }
+
+ /**
+ * Get code-source of class.
+ */
+ protected URL getCodeSource()
+ {
+ return getClass().getProtectionDomain().getCodeSource().getLocation();
+ }
+
+ protected static final PermissionCollection ALL = new PermissionCollection()
+ {
+
+ public boolean implies(Permission permission)
+ {
+ return true;
+ }
+
+ public Enumeration<Permission> elements()
+ {
+ return new Enumeration<Permission>()
+ {
+ private boolean hasMore = true;
+
+ public boolean hasMoreElements()
+ {
+ return hasMore;
+ }
+
+ public Permission nextElement()
+ {
+ hasMore = false;
+ return new AllPermission();
+ }
+ };
+ }
+
+ public void add(Permission permission)
+ {
+ }
+ };
+
+}
Deleted: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java
===================================================================
--- jcr/branches/1.12-SEC/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java 2010-06-04 13:47:36 UTC (rev 2493)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java 2010-06-09 11:50:54 UTC (rev 2521)
@@ -1,83 +0,0 @@
-/**
- * Copyright (C) 2010 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * 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.
- *
- * This software 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.exoplatform.services.jcr.impl.core.security;
-
-import java.security.AccessControlException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a>
- * @version $Id$
- */
-public class TestGetSystemSession extends BaseSecurityTest
-{
- public void testGetSystemSessionSuccess()
- {
- PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- repository.getSystemSession();
- return null;
- }
-
- };
- try
- {
- doPrivilegedActionStaticPermissions(action);
- }
- catch (AccessControlException ace)
- {
- fail("Must be able get system session. We are under static permissions");
- }
- catch (Throwable t)
- {
- t.printStackTrace();
- fail();
- }
- }
-
- public void testGetSystemSessionFail()
- {
- PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- repository.getSystemSession();
- return null;
- }
-
- };
- try
- {
- doPrivilegedAction(action);
- fail("Must not be able get system session.");
- }
- catch (AccessControlException ace)
- {
- // OK
- }
- catch (Throwable t)
- {
- t.printStackTrace();
- fail();
- }
- }
-}
Copied: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java (from rev 2493, jcr/branches/1.12-SEC/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java)
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java (rev 0)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/security/TestGetSystemSession.java 2010-06-09 11:50:54 UTC (rev 2521)
@@ -0,0 +1,83 @@
+/**
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * 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.
+ *
+ * This software 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.exoplatform.services.jcr.impl.core.security;
+
+import java.security.AccessControlException;
+import java.security.PrivilegedExceptionAction;
+
+/**
+ * @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a>
+ * @version $Id$
+ */
+public class TestGetSystemSession extends BaseSecurityTest
+{
+ public void testGetSystemSessionSuccess()
+ {
+ PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
+ {
+ public Object run() throws Exception
+ {
+ repository.getSystemSession();
+ return null;
+ }
+
+ };
+ try
+ {
+ doPrivilegedActionStaticPermissions(action);
+ }
+ catch (AccessControlException ace)
+ {
+ fail("Must be able get system session. We are under static permissions");
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace();
+ fail();
+ }
+ }
+
+ public void testGetSystemSessionFail()
+ {
+ PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
+ {
+ public Object run() throws Exception
+ {
+ repository.getSystemSession();
+ return null;
+ }
+
+ };
+ try
+ {
+ doPrivilegedAction(action);
+ fail("Must not be able get system session.");
+ }
+ catch (AccessControlException ace)
+ {
+ // OK
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace();
+ fail();
+ }
+ }
+}
Copied: jcr/trunk/exo.jcr.component.core/src/test/resources/test.policy (from rev 2493, jcr/branches/1.12-SEC/exo.jcr.component.core/src/test/resources/test.policy)
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/resources/test.policy (rev 0)
+++ jcr/trunk/exo.jcr.component.core/src/test/resources/test.policy 2010-06-09 11:50:54 UTC (rev 2521)
@@ -0,0 +1,5 @@
+// configure static permissions here
+grant {
+ permission java.security.AllPermission;
+};
+
\ No newline at end of file
14 years, 1 month
exo-jcr SVN: r2520 - in core/trunk: exo.core.component.database and 13 other directories.
by do-not-reply@jboss.org
Author: dkatayev
Date: 2010-06-09 05:48:49 -0400 (Wed, 09 Jun 2010)
New Revision: 2520
Added:
core/trunk/exo.core.component.database/src/test/resources/dbcreator/
core/trunk/exo.core.component.database/src/test/resources/dbcreator/test.sql
core/trunk/exo.core.component.document/src/test/resources/testCDATA.xml
core/trunk/exo.core.component.document/src/test/resources/testUTF8.xml
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/GroupEventListenerHandler.java
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipEventListenerHandler.java
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserEventListenerHandler.java
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserProfileEventListenerHandler.java
Removed:
core/trunk/exo.core.component.database/src/test/resources/dbcreator/test.sql
Modified:
core/trunk/exo.core.component.database/pom.xml
core/trunk/exo.core.component.database/src/main/java/org/exoplatform/services/database/ObjectQuery.java
core/trunk/exo.core.component.database/src/test/resources/conf/standalone/test-configuration.xml
core/trunk/exo.core.component.document/pom.xml
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSExcelDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PDFDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/XMLDocumentReader.java
core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/TestXMLDocumentReader.java
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/GroupDAOImpl.java
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/UserDAOImpl.java
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/UserProfileDAOImpl.java
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/GroupDAOImpl.java
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserDAOImpl.java
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserProfileDAOImpl.java
core/trunk/exo.core.component.script.groovy/src/main/java/org/exoplatform/services/script/groovy/GroovyScriptInstantiator.java
core/trunk/packaging/module/src/main/javascript/core.packaging.module.js
core/trunk/pom.xml
Log:
EXOJCR-751 epare maintenance branch for jcr 1.12: EXOJCR-694, EXOJCR-700, EXOJCR-705, EXOJCR-721, EXOJCR-640, EXOJCR-573, EXOJCR-738, EXOJCR-765 ported from 1.14.x
Modified: core/trunk/exo.core.component.database/pom.xml
===================================================================
--- core/trunk/exo.core.component.database/pom.xml 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.database/pom.xml 2010-06-09 09:48:49 UTC (rev 2520)
@@ -102,7 +102,22 @@
</exclusion>
</exclusions>
</dependency>
- </dependencies>
+
+ <dependency>
+ <groupId>commons-dbcp</groupId>
+ <artifactId>commons-dbcp</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-pool</groupId>
+ <artifactId>commons-pool</artifactId>
+ </dependency>
+ </dependencies>
<build>
<pluginManagement>
@@ -113,7 +128,6 @@
<configuration>
<excludes>
<exclude>**/DBCreatorTest.java</exclude>
- <exclude>**/TestDBCreator.java</exclude>
</excludes>
</configuration>
</plugin>
Modified: core/trunk/exo.core.component.database/src/main/java/org/exoplatform/services/database/ObjectQuery.java
===================================================================
--- core/trunk/exo.core.component.database/src/main/java/org/exoplatform/services/database/ObjectQuery.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.database/src/main/java/org/exoplatform/services/database/ObjectQuery.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -151,7 +151,14 @@
Parameter p = parameters_.get(i);
if (p.value_ instanceof String)
{
- b.append(" o.").append(p.field_).append(p.op_).append("'").append(p.value_).append("'");
+ if (p.field_.startsWith("UPPER") || p.field_.startsWith("LOWER"))
+ {
+ b.append(p.field_).append(p.op_).append("'").append(p.value_).append("'");
+ }
+ else
+ {
+ b.append(" o.").append(p.field_).append(p.op_).append("'").append(p.value_).append("'");
+ }
}
else if (p.value_ instanceof Date)
{
@@ -251,7 +258,14 @@
Parameter p = parameters_.get(i);
if (p.value_ instanceof String)
{
- b.append(" o.").append(p.field_).append(p.op_).append("'").append(p.value_).append("'");
+ if (p.field_.startsWith("UPPER") || p.field_.startsWith("LOWER"))
+ {
+ b.append(p.field_).append(p.op_).append("'").append(p.value_).append("'");
+ }
+ else
+ {
+ b.append(" o.").append(p.field_).append(p.op_).append("'").append(p.value_).append("'");
+ }
}
else if (p.value_ instanceof Date)
{
Modified: core/trunk/exo.core.component.database/src/test/resources/conf/standalone/test-configuration.xml
===================================================================
--- core/trunk/exo.core.component.database/src/test/resources/conf/standalone/test-configuration.xml 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.database/src/test/resources/conf/standalone/test-configuration.xml 2010-06-09 09:48:49 UTC (rev 2520)
@@ -19,10 +19,45 @@
02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
-<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd http://www.exoplaform.org/xml/ns/kernel_1_0.xsd"
+<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd http://www.exoplaform.org/xml/ns/kernel_1_0.xsd"
xmlns="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd">
<component>
+ <key>org.exoplatform.services.log.LogConfigurationInitializer</key>
+ <type>org.exoplatform.services.log.LogConfigurationInitializer</type>
+ <init-params>
+ <value-param>
+ <name>logger</name>
+ <value>org.exoplatform.services.log.impl.BufferedLog4JLogger</value>
+ </value-param>
+ <value-param>
+ <name>configurator</name>
+ <value>org.exoplatform.services.log.impl.Log4JConfigurator</value>
+ </value-param>
+ <properties-param>
+ <name>properties</name>
+ <description>Log4J properties</description>
+ <property name="log4j.rootLogger" value="INFO, stdout, file" />
+
+ <property name="log4j.appender.stdout" value="org.apache.log4j.ConsoleAppender" />
+ <property name="log4j.appender.stdout.threshold" value="DEBUG" />
+
+ <property name="log4j.appender.stdout.layout" value="org.apache.log4j.PatternLayout" />
+ <property name="log4j.appender.stdout.layout.ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L) %n" />
+
+ <property name="log4j.appender.file" value="org.apache.log4j.FileAppender" />
+ <property name="log4j.appender.file.File" value="target/jcr.log" />
+
+ <property name="log4j.appender.file.layout" value="org.apache.log4j.PatternLayout" />
+ <property name="log4j.appender.file.layout.ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L) %n" />
+
+ <property name="log4j.category.exo.kernel.component.common.InitialContextInitializer" value="DEBUG" />
+ </properties-param>
+ </init-params>
+ </component>
+
+ <component>
<key>org.exoplatform.services.database.jdbc.DBSchemaCreator</key>
<type>org.exoplatform.services.database.jdbc.DBSchemaCreator</type>
<component-plugins>
@@ -50,27 +85,27 @@
</component-plugins>
</component>
- <component>
+ <component>
<key>org.exoplatform.services.database.creator.DBCreator</key>
<type>org.exoplatform.services.database.creator.DBCreator</type>
<init-params>
<properties-param>
<name>db-connection</name>
<description>database connection properties</description>
- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
- <property name="url" value="jdbc:mysql://localhost/" />
- <property name="username" value="root" />
- <property name="password" value="admin" />
+ <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
+ <property name="url" value="jdbc:hsqldb:file:target/temp/data/dbcreator1" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
<properties-param>
<name>db-creation</name>
<description>database creation properties</description>
- <property name="scriptPath" value="test.sql" />
- <property name="username" value="testuser" />
- <property name="password" value="testpwd" />
- </properties-param>
- </init-params>
- </component>
+ <property name="scriptPath" value="src/test/resources/dbcreator/test.sql" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
+ </properties-param>
+ </init-params>
+ </component>
<component>
<key>org.exoplatform.services.naming.InitialContextInitializer</key>
Copied: core/trunk/exo.core.component.database/src/test/resources/dbcreator (from rev 2428, core/trunk/exo.core.component.database/src/test/resources/dbcreator)
Deleted: core/trunk/exo.core.component.database/src/test/resources/dbcreator/test.sql
===================================================================
Copied: core/trunk/exo.core.component.database/src/test/resources/dbcreator/test.sql (from rev 2428, core/trunk/exo.core.component.database/src/test/resources/dbcreator/test.sql)
===================================================================
Modified: core/trunk/exo.core.component.document/pom.xml
===================================================================
--- core/trunk/exo.core.component.document/pom.xml 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.document/pom.xml 2010-06-09 09:48:49 UTC (rev 2520)
@@ -50,7 +50,7 @@
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
- <groupId>pdfbox</groupId>
+ <groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
</dependency>
<dependency>
@@ -106,4 +106,4 @@
</testResource>
</testResources>
</build>
-</project>
\ No newline at end of file
+</project>
Modified: core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSExcelDocumentReader.java
===================================================================
--- core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSExcelDocumentReader.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSExcelDocumentReader.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -67,7 +67,7 @@
throw new NullPointerException("InputStream is null.");
}
- String text = "";
+ StringBuilder builder = new StringBuilder("");
try
{
@@ -78,7 +78,7 @@
}
catch (IOException e)
{
- return text;
+ return builder.toString();
}
for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++)
{
@@ -105,25 +105,25 @@
{
Date date = HSSFDateUtil.getJavaDate(d);
String cellText = this.DATE_FORMAT.format(date);
- text = text + cellText + " ";
+ builder.append(cellText).append(" ");
}
else
{
- text = text + d + " ";
+ builder.append(d).append(" ");
}
break;
}
case HSSFCell.CELL_TYPE_FORMULA :
- text = text + cell.getCellFormula().toString() + " ";
+ builder.append(cell.getCellFormula().toString()).append(" ");
break;
case HSSFCell.CELL_TYPE_BOOLEAN :
- text = text + cell.getBooleanCellValue() + " ";
+ builder.append(cell.getBooleanCellValue()).append(" ");
break;
case HSSFCell.CELL_TYPE_ERROR :
- text = text + cell.getErrorCellValue() + " ";
+ builder.append(cell.getErrorCellValue()).append(" ");
break;
case HSSFCell.CELL_TYPE_STRING :
- text = text + cell.getStringCellValue().toString() + " ";
+ builder.append(cell.getStringCellValue().toString()).append(" ");
break;
default :
break;
@@ -148,7 +148,7 @@
}
}
}
- return text;
+ return builder.toString();
}
public String getContentAsText(InputStream is, String encoding) throws IOException, DocumentReadException
Modified: core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PDFDocumentReader.java
===================================================================
--- core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PDFDocumentReader.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PDFDocumentReader.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -26,8 +26,8 @@
import org.exoplatform.services.document.DocumentReadException;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
-import org.pdfbox.pdmodel.PDDocument;
-import org.pdfbox.util.PDFTextStripper;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.util.PDFTextStripper;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
Modified: core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/XMLDocumentReader.java
===================================================================
--- core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/XMLDocumentReader.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/XMLDocumentReader.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -19,15 +19,19 @@
package org.exoplatform.services.document.impl;
import org.exoplatform.services.document.DocumentReadException;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.StringWriter;
+import java.io.Writer;
import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
/**
* Created by The eXo Platform SAS A parser of XML files.
*
@@ -61,14 +65,15 @@
}
try
{
- byte[] buffer = new byte[2048];
- int len;
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- while ((len = is.read(buffer)) > 0)
- bos.write(buffer, 0, len);
- bos.close();
- String xml = new String(bos.toByteArray());
- return delete(xml);
+
+ // byte[] buffer = new byte[2048];
+ // int len;
+ // ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ // while ((len = is.read(buffer)) > 0)
+ // bos.write(buffer, 0, len);
+ // bos.close();
+ // String xml = new String(bos.toByteArray());
+ return parse(is);
}
finally
{
@@ -113,27 +118,74 @@
* @param str the string which contain a text with user's tags.
* @return The string cleaned from user's tags and their bodies.
*/
- private String delete(String str)
+ private String parse(InputStream is)
{
+ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+ // saxParserFactory.setNamespaceAware(true);
+ // saxParserFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+ SAXParser saxParser;
+ StringWriter writer = new StringWriter();
+
+ DefaultHandler dh = new WriteOutContentHandler(writer);
try
{
- StringBuffer input = new StringBuffer(str);
- String patternString = "<+[^>]*>+";
- Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE + Pattern.DOTALL);
- Matcher matcher = pattern.matcher(input);
- while (matcher.find())
+ saxParser = saxParserFactory.newSAXParser();
+ saxParser.parse(is, dh);
+ }
+ catch (SAXException e)
+ {
+ return "";
+ }
+ catch (IOException e)
+ {
+ return "";
+ }
+ catch (ParserConfigurationException e)
+ {
+ return "";
+ }
+
+ return writer.toString();
+
+ }
+
+ class WriteOutContentHandler extends DefaultHandler
+ {
+ private final Writer writer;
+
+ public WriteOutContentHandler(Writer writer)
+ {
+ this.writer = writer;
+ }
+
+ /**
+ * Writes the given characters to the given character stream.
+ */
+ @Override
+ public void characters(char[] ch, int start, int length) throws SAXException
+ {
+ try
{
- int start = matcher.start();
- int end = matcher.end();
- input.delete(start, end);
- matcher = pattern.matcher(input);
+ writer.write(ch, start, length);
}
- return input.substring(0, input.length());
+ catch (IOException e)
+ {
+ throw new SAXException(e.getMessage(), e);
+ }
}
- catch (PatternSyntaxException e)
+
+ @Override
+ public void endDocument() throws SAXException
{
+ try
+ {
+ writer.flush();
+ }
+ catch (IOException e)
+ {
+ throw new SAXException(e.getMessage(), e);
+ }
}
- return "";
}
}
Modified: core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/TestXMLDocumentReader.java
===================================================================
--- core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/TestXMLDocumentReader.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/TestXMLDocumentReader.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -45,7 +45,26 @@
{
InputStream is = TestXMLDocumentReader.class.getResourceAsStream("/test.xml");
String text = service_.getDocumentReader("text/xml").getContentAsText(is);
- String etalon = "\n\n John\n" + " Alice\n" + " Reminder\n" + " Don't forget it this weekend!\n\n";
- assertEquals("Wrong string returned", etalon, text);
+ String expected = "John\n" + " Alice\n" + " Reminder\n" + " Don't forget it this weekend!";
+ assertEquals("Wrong string returned", expected, text.trim());
}
+
+ public void testCDATAGetContentAsString() throws Exception
+ {
+ InputStream is = TestXMLDocumentReader.class.getResourceAsStream("/testCDATA.xml");
+ String text = service_.getDocumentReader("text/xml").getContentAsText(is);
+ String expected = "This is a text inside CDATA.";
+ assertEquals("Wrong string returned", expected, text.trim());
+ }
+
+ public void testI18ngetContentAsString() throws Exception
+ {
+ InputStream is = TestXMLDocumentReader.class.getResourceAsStream("/testUTF8.xml");
+ String text = service_.getDocumentReader("text/xml").getContentAsText(is);
+ final String expected =
+ "\u0426\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u0438\u0439 \u0442\u0435\u043a\u0441\u0442.\n"
+ + "Archim\u00E8de et Lius \u00E0 Ch\u00E2teauneuf testing chars en \u00E9t\u00E9";
+ assertEquals("Wrong string returned", expected, text.trim());
+ }
+
}
Copied: core/trunk/exo.core.component.document/src/test/resources/testCDATA.xml (from rev 2432, core/trunk/exo.core.component.document/src/test/resources/testCDATA.xml)
===================================================================
--- core/trunk/exo.core.component.document/src/test/resources/testCDATA.xml (rev 0)
+++ core/trunk/exo.core.component.document/src/test/resources/testCDATA.xml 2010-06-09 09:48:49 UTC (rev 2520)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<Module>
+ <ModulePrefs title="Hello World! title" />
+ <Content type="html">
+<![CDATA[This is a text inside CDATA.]]></Content>
+</Module>
\ No newline at end of file
Copied: core/trunk/exo.core.component.document/src/test/resources/testUTF8.xml (from rev 2432, core/trunk/exo.core.component.document/src/test/resources/testUTF8.xml)
===================================================================
--- core/trunk/exo.core.component.document/src/test/resources/testUTF8.xml (rev 0)
+++ core/trunk/exo.core.component.document/src/test/resources/testUTF8.xml 2010-06-09 09:48:49 UTC (rev 2520)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<Module>
+ <ModulePrefs title="Hello World! title" />
+ <Content type="html">
+ <Title>Це тестовий текст.</Title>
+<![CDATA[Archimède et Lius à Châteauneuf testing chars en été]]></Content>
+</Module>
\ No newline at end of file
Copied: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/GroupEventListenerHandler.java (from rev 2334, core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/GroupEventListenerHandler.java)
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/GroupEventListenerHandler.java (rev 0)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/GroupEventListenerHandler.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * 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.
+ *
+ * This software 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.exoplatform.services.organization;
+
+import java.util.List;
+
+/**
+ * @author <a href="anatoliy.bazko(a)exoplatform.org">Anatoliy Bazko</a>
+ * @version $Id: GroupEventListenerHandler.java 111 2010-11-11 11:11:11Z tolusha $
+ *
+ */
+public interface GroupEventListenerHandler
+{
+
+ /**
+ * Return list of GroupEventListener. List should be unmodifiable to prevent modification outside of GroupHandler.
+ *
+ * @return list of GroupEventListener
+ */
+ public List<GroupEventListener> getGroupListeners();
+}
Copied: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipEventListenerHandler.java (from rev 2334, core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipEventListenerHandler.java)
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipEventListenerHandler.java (rev 0)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipEventListenerHandler.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * 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.
+ *
+ * This software 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.exoplatform.services.organization;
+
+import java.util.List;
+
+/**
+ * @author <a href="anatoliy.bazko(a)exoplatform.org">Anatoliy Bazko</a>
+ * @version $Id: MembershipEventListenerHandler.java 111 2010-11-11 11:11:11Z tolusha $
+ *
+ */
+public interface MembershipEventListenerHandler
+{
+
+ /**
+ * Return list of MembershipEventListener. List should be unmodifiable to prevent modification outside of MembershipHandler.
+ *
+ * @return list of MembershipEventListener
+ */
+ public List<MembershipEventListener> getMembershipListeners();
+
+}
Copied: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserEventListenerHandler.java (from rev 2334, core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserEventListenerHandler.java)
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserEventListenerHandler.java (rev 0)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserEventListenerHandler.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * 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.
+ *
+ * This software 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.exoplatform.services.organization;
+
+import java.util.List;
+
+/**
+ * @author <a href="anatoliy.bazko(a)exoplatform.org">Anatoliy Bazko</a>
+ * @version $Id: UserEventListenerHandler.java 111 2010-11-11 11:11:11Z tolusha
+ * $
+ */
+public interface UserEventListenerHandler {
+
+ /**
+ * Return list of UserEventListener. List should be unmodifiable to prevent
+ * modification outside of UserHandler.
+ *
+ * @return list of UserEventListener
+ */
+ public List<UserEventListener> getUserListeners();
+
+}
Copied: core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserProfileEventListenerHandler.java (from rev 2334, core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserProfileEventListenerHandler.java)
===================================================================
--- core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserProfileEventListenerHandler.java (rev 0)
+++ core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/UserProfileEventListenerHandler.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * 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.
+ *
+ * This software 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.exoplatform.services.organization;
+
+import java.util.List;
+
+/**
+ * @author <a href="anatoliy.bazko(a)exoplatform.org">Anatoliy Bazko</a>
+ * @version $Id: UserProfileEventListenerHandler.java 111 2010-11-11 11:11:11Z
+ * tolusha $
+ */
+public interface UserProfileEventListenerHandler {
+
+ /**
+ * Return list of UserProfileEventListener. List should be unmodifiable to
+ * prevent modification outside of UserProfileHandler.
+ *
+ * @return list of UserProfileEventListener
+ */
+ public List<UserProfileEventListener> getUserProfileListeners();
+}
Modified: core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/GroupDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/GroupDAOImpl.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/GroupDAOImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -22,6 +22,7 @@
import org.exoplatform.services.database.HibernateService;
import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.GroupEventListener;
+import org.exoplatform.services.organization.GroupEventListenerHandler;
import org.exoplatform.services.organization.GroupHandler;
import org.exoplatform.services.organization.impl.GroupImpl;
import org.hibernate.Query;
@@ -29,6 +30,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
/**
@@ -36,7 +38,7 @@
* benjmestrallet(a)users.sourceforge.net Author : Tuan Nguyen
* tuan08(a)users.sourceforge.net Date: Aug 22, 2003 Time: 4:51:21 PM
*/
-public class GroupDAOImpl implements GroupHandler
+public class GroupDAOImpl implements GroupHandler, GroupEventListenerHandler
{
public static final String queryFindGroupByName =
"from g in class org.exoplatform.services.organization.impl.GroupImpl " + "where g.groupName = ? ";
@@ -227,4 +229,12 @@
for (GroupEventListener listener : listeners_)
listener.postDelete(group);
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<GroupEventListener> getGroupListeners()
+ {
+ return Collections.unmodifiableList(listeners_);
+ }
}
Modified: core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -24,6 +24,7 @@
import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.Membership;
import org.exoplatform.services.organization.MembershipEventListener;
+import org.exoplatform.services.organization.MembershipEventListenerHandler;
import org.exoplatform.services.organization.MembershipHandler;
import org.exoplatform.services.organization.MembershipType;
import org.exoplatform.services.organization.User;
@@ -31,6 +32,7 @@
import org.hibernate.Session;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -40,7 +42,7 @@
* Created by The eXo Platform SAS Author : Mestrallet Benjamin benjmestrallet(a)users.sourceforge.net
* Author : Tuan Nguyen tuan08(a)users.sourceforge.net Date: Aug 22, 2003 Time: 4:51:21 PM
*/
-public class MembershipDAOImpl implements MembershipHandler
+public class MembershipDAOImpl implements MembershipHandler, MembershipEventListenerHandler
{
private static final String queryFindMembershipByUserGroupAndType =
@@ -318,4 +320,12 @@
listener.postDelete(membership);
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<MembershipEventListener> getMembershipListeners()
+ {
+ return Collections.unmodifiableList(listeners_);
+ }
}
Modified: core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/UserDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/UserDAOImpl.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/UserDAOImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -32,13 +32,14 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
/**
* Created by The eXo Platform SAS Author : Mestrallet Benjamin benjmestrallet(a)users.sourceforge.net
* Author : Tuan Nguyen tuan08(a)users.sourceforge.net Date: Aug 22, 2003 Time: 4:51:21 PM
*/
-public class UserDAOImpl implements UserHandler
+public class UserDAOImpl implements UserHandler, UserEventListenerHandler
{
public static final String queryFindUserByName =
"from u in class org.exoplatform.services.organization.impl.UserImpl " + "where u.userName = ?";
@@ -255,4 +256,12 @@
for (UserEventListener listener : listeners_)
listener.postDelete(user);
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<UserEventListener> getUserListeners()
+ {
+ return Collections.unmodifiableList(listeners_);
+ }
}
Modified: core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/UserProfileDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/UserProfileDAOImpl.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/UserProfileDAOImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -23,6 +23,7 @@
import org.exoplatform.services.database.HibernateService;
import org.exoplatform.services.organization.UserProfile;
import org.exoplatform.services.organization.UserProfileEventListener;
+import org.exoplatform.services.organization.UserProfileEventListenerHandler;
import org.exoplatform.services.organization.UserProfileHandler;
import org.exoplatform.services.organization.impl.UserProfileData;
import org.exoplatform.services.organization.impl.UserProfileImpl;
@@ -30,6 +31,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
/**
@@ -37,7 +39,7 @@
* benjmestrallet(a)users.sourceforge.net Author : Tuan Nguyen
* tuan08(a)users.sourceforge.net Date: Aug 22, 2003 Time: 4:51:21 PM
*/
-public class UserProfileDAOImpl implements UserProfileHandler
+public class UserProfileDAOImpl implements UserProfileHandler, UserProfileEventListenerHandler
{
static private UserProfile NOT_FOUND = new UserProfileImpl();
@@ -199,4 +201,12 @@
listener.postDelete(profile);
}
+ /**
+ * {@inheritDoc}
+ */
+ public List<UserProfileEventListener> getUserProfileListeners()
+ {
+ return Collections.unmodifiableList(listeners_);
+ }
+
}
Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/GroupDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/GroupDAOImpl.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/GroupDAOImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -23,11 +23,13 @@
import org.exoplatform.services.log.Log;
import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.GroupEventListener;
+import org.exoplatform.services.organization.GroupEventListenerHandler;
import org.exoplatform.services.organization.GroupHandler;
import org.exoplatform.services.organization.impl.GroupImpl;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import javax.naming.CompositeName;
@@ -50,7 +52,7 @@
*
* @version andrew00x $
*/
-public class GroupDAOImpl extends BaseDAO implements GroupHandler
+public class GroupDAOImpl extends BaseDAO implements GroupHandler, GroupEventListenerHandler
{
/**
@@ -751,4 +753,12 @@
group.setId(parent.getId() + "/" + group.getGroupName());
group.setParentId(parent.getId());
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<GroupEventListener> getGroupListeners()
+ {
+ return Collections.unmodifiableList(listeners);
+ }
}
Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -24,6 +24,7 @@
import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.Membership;
import org.exoplatform.services.organization.MembershipEventListener;
+import org.exoplatform.services.organization.MembershipEventListenerHandler;
import org.exoplatform.services.organization.MembershipHandler;
import org.exoplatform.services.organization.MembershipType;
import org.exoplatform.services.organization.User;
@@ -31,6 +32,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import javax.naming.InvalidNameException;
@@ -50,7 +52,7 @@
* Created by The eXo Platform SAS Author : Tuan Nguyen tuan08(a)users.sourceforge.net Oct 14, 2005. @version
* andrew00x $
*/
-public class MembershipDAOImpl extends BaseDAO implements MembershipHandler
+public class MembershipDAOImpl extends BaseDAO implements MembershipHandler, MembershipEventListenerHandler
{
/**
@@ -720,4 +722,11 @@
listener.preSave(membership, isNew);
}
+ /**
+ * {@inheritDoc}
+ */
+ public List<MembershipEventListener> getMembershipListeners()
+ {
+ return Collections.unmodifiableList(listeners);
+ }
}
Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserDAOImpl.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserDAOImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -25,6 +25,7 @@
import org.exoplatform.services.organization.impl.UserImpl;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import javax.naming.NamingException;
@@ -38,7 +39,7 @@
* Created by The eXo Platform SAS Author : Tuan Nguyen
* tuan08(a)users.sourceforge.net Oct 14, 2005. @version andrew00x $
*/
-public class UserDAOImpl extends BaseDAO implements UserHandler
+public class UserDAOImpl extends BaseDAO implements UserHandler, UserEventListenerHandler
{
/**
@@ -561,4 +562,12 @@
for (UserEventListener listener : listeners)
listener.postDelete(user);
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<UserEventListener> getUserListeners()
+ {
+ return Collections.unmodifiableList(listeners);
+ }
}
Modified: core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserProfileDAOImpl.java
===================================================================
--- core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserProfileDAOImpl.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/UserProfileDAOImpl.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -23,12 +23,14 @@
import org.exoplatform.services.log.Log;
import org.exoplatform.services.organization.UserProfile;
import org.exoplatform.services.organization.UserProfileEventListener;
+import org.exoplatform.services.organization.UserProfileEventListenerHandler;
import org.exoplatform.services.organization.UserProfileHandler;
import org.exoplatform.services.organization.impl.UserProfileData;
import org.exoplatform.services.organization.impl.UserProfileImpl;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import javax.naming.NameNotFoundException;
@@ -44,7 +46,7 @@
* Created by The eXo Platform SAS Author : Tuan Nguyen
* tuan08(a)users.sourceforge.net Oct 14, 2005. @version andrew00x $
*/
-public class UserProfileDAOImpl extends BaseDAO implements UserProfileHandler
+public class UserProfileDAOImpl extends BaseDAO implements UserProfileHandler, UserProfileEventListenerHandler
{
/**
@@ -264,4 +266,12 @@
listeners.add(listener);
}
+ /**
+ * {@inheritDoc}
+ */
+ public List<UserProfileEventListener> getUserProfileListeners()
+ {
+ return Collections.unmodifiableList(listeners);
+ }
+
}
Modified: core/trunk/exo.core.component.script.groovy/src/main/java/org/exoplatform/services/script/groovy/GroovyScriptInstantiator.java
===================================================================
--- core/trunk/exo.core.component.script.groovy/src/main/java/org/exoplatform/services/script/groovy/GroovyScriptInstantiator.java 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/exo.core.component.script.groovy/src/main/java/org/exoplatform/services/script/groovy/GroovyScriptInstantiator.java 2010-06-09 09:48:49 UTC (rev 2520)
@@ -19,6 +19,7 @@
package org.exoplatform.services.script.groovy;
import groovy.lang.GroovyClassLoader;
+import groovy.lang.GroovyCodeSource;
import org.codehaus.groovy.control.CompilationFailedException;
import org.exoplatform.container.ExoContainer;
@@ -50,7 +51,7 @@
{
/** Our logger. */
- private static final Log LOG = ExoLogger.getLogger("exo.core.component.script.groovy.GroovyScriptInstantiator");
+ private static final Log LOG = ExoLogger.getLogger(GroovyScriptInstantiator.class);
/**
* eXo Container.
@@ -71,11 +72,11 @@
/**
* Load script from given address.
- *
+ *
* @param spec the resource's address.
* @return the object created from groovy script.
* @throws MalformedURLException if parameter <code>url</code> have wrong
- * format.
+ * format.
* @throws IOException if can't load script from given <code>url</code>.
* @see GroovyScriptInstantiator#instantiateScript(URL)
* @see GroovyScriptInstantiator#instantiateScript(InputStream)
@@ -87,7 +88,7 @@
/**
* Load script from given address.
- *
+ *
* @param url the resource's address.
* @return the object created from groovy script.
* @throws IOException if can't load script from given <code>url</code>.
@@ -101,10 +102,11 @@
/**
* Parse given stream, the stream must represents groovy script.
- *
+ *
* @param stream the stream represented groovy script.
* @return the object created from groovy script.
- * @throws IOException if stream can't be parsed or object can't be created.
+ * @throws IOException if stream can't be parsed or object can't be created
+ * cause to illegal content of stream
*/
public Object instantiateScript(InputStream stream) throws IOException
{
@@ -113,12 +115,13 @@
/**
* Parse given stream, the stream must represents groovy script.
- *
+ *
* @param stream the stream represented groovy script.
* @param name script name is null or empty string that groovy completer will
- * use default name
+ * use default name
* @return the object created from groovy script.
- * @throws IOException if stream can't be parsed or object can't be created.
+ * @throws IOException if stream can't be parsed or object can't be created
+ * cause to illegal content of stream
*/
public Object instantiateScript(InputStream stream, String name) throws IOException
{
@@ -133,13 +136,39 @@
{
loader = new GroovyClassLoader();
}
+ return instantiateScript(stream, name, loader);
+ }
+
+ /**
+ * Parse given stream, the stream must represents groovy script and use given
+ * class-loader. If <code>loader == null</code> then
+ * {@link groovy.lang.GroovyClassLoader} will be is use.
+ *
+ * @param stream the stream represented groovy script.
+ * @param name script name is null or empty string that groovy completer will
+ * use default name
+ * @param loader GroovyClassLoader or <code>null</code>
+ * @return the object created from groovy script.
+ * @throws IOException if stream can't be parsed or object can't be created
+ * cause to illegal content of stream
+ */
+ public Object instantiateScript(InputStream stream, String name, GroovyClassLoader loader) throws IOException
+ {
+ if (loader == null)
+ {
+ loader = new GroovyClassLoader();
+ }
Class<?> clazz = null;
try
{
if (name != null && name.length() > 0)
+ {
clazz = loader.parseClass(stream, name);
+ }
else
+ {
clazz = loader.parseClass(stream);
+ }
}
catch (CompilationFailedException e)
{
@@ -160,9 +189,36 @@
}
/**
+ * Instantiate script from give {@link GroovyCodeSource} and use given
+ * class-loader. If <code>loader == null</code> then
+ * {@link groovy.lang.GroovyClassLoader} will be is use.
+ *
+ * @param codeSource code source
+ * @param loader
+ * @return
+ */
+ public Object instantiateScript(GroovyCodeSource codeSource, GroovyClassLoader loader)
+ {
+ if (loader == null)
+ {
+ loader = new GroovyClassLoader();
+ }
+ Class<?> clazz = null;
+ clazz = loader.parseClass(codeSource);
+ try
+ {
+ return createObject(clazz);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Can't instantiate groovy script: " + e.getMessage(), e);
+ }
+ }
+
+ /**
* Created object from given class, if class has parameters in constructor,
* then this parameters will be searched in container.
- *
+ *
* @param clazz java-groovy class
*/
private Object createObject(Class<?> clazz) throws Exception
@@ -180,7 +236,9 @@
{
Class<?>[] parameterTypes = c.getParameterTypes();
if (parameterTypes.length == 0)
+ {
return c.newInstance();
+ }
List<Object> parameters = new ArrayList<Object>(parameterTypes.length);
@@ -188,7 +246,9 @@
{
Object param = container.getComponentInstanceOfType(parameterType);
if (param == null)
+ {
continue l;
+ }
parameters.add(param);
}
@@ -214,9 +274,13 @@
int c1 = constructor1.getParameterTypes().length;
int c2 = constructor2.getParameterTypes().length;
if (c1 < c2)
+ {
return 1;
+ }
if (c1 > c2)
+ {
return -1;
+ }
return 0;
}
@@ -227,7 +291,10 @@
if (plugin instanceof GroovyScriptJarJarPlugin)
{
GroovyScriptJarJarPlugin jarjarPlugin = (GroovyScriptJarJarPlugin)plugin;
- LOG.debug("Add mapping to groovy instantiator:" + jarjarPlugin.getMapping());
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug("Add mapping to groovy instantiator:" + jarjarPlugin.getMapping());
+ }
mapping.putAll(jarjarPlugin.getMapping());
}
}
Modified: core/trunk/packaging/module/src/main/javascript/core.packaging.module.js
===================================================================
--- core/trunk/packaging/module/src/main/javascript/core.packaging.module.js 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/packaging/module/src/main/javascript/core.packaging.module.js 2010-06-09 09:48:49 UTC (rev 2520)
@@ -38,7 +38,7 @@
module.component.documents =
new Project("org.exoplatform.core", "exo.core.component.document", "jar", module.version).
- addDependency(new Project("pdfbox", "pdfbox", "jar", "0.7.3")).
+ addDependency(new Project("org.apache.pdfbox", "pdfbox", "jar", "1.1.0")).
addDependency(new Project("com.lowagie", "itext", "jar", "2.1.0")).
addDependency(new Project("bouncycastle", "bcmail-jdk14", "jar", "136")).
addDependency(new Project("bouncycastle", "bcprov-jdk14", "jar", "136")).
Modified: core/trunk/pom.xml
===================================================================
--- core/trunk/pom.xml 2010-06-09 08:26:14 UTC (rev 2519)
+++ core/trunk/pom.xml 2010-06-09 09:48:49 UTC (rev 2520)
@@ -267,9 +267,9 @@
</dependency>
<dependency>
- <groupId>pdfbox</groupId>
+ <groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
- <version>0.7.3</version>
+ <version>1.1.0</version>
</dependency>
<dependency>
@@ -334,6 +334,24 @@
<version>1.7</version>
</dependency>
+ <dependency>
+ <groupId>commons-dbcp</groupId>
+ <artifactId>commons-dbcp</artifactId>
+ <version>1.2.2</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-pool</groupId>
+ <artifactId>commons-pool</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-pool</groupId>
+ <artifactId>commons-pool</artifactId>
+ <version>1.5.4</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
14 years, 1 month
exo-jcr SVN: r2519 - jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl.
by do-not-reply@jboss.org
Author: dkatayev
Date: 2010-06-09 04:26:14 -0400 (Wed, 09 Jun 2010)
New Revision: 2519
Modified:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/PendingChangesLog.java
Log:
EXOJCR-751 EXOJCR-732 ported to trunk from 1.14.branch
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/PendingChangesLog.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/PendingChangesLog.java 2010-06-08 15:32:15 UTC (rev 2518)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/PendingChangesLog.java 2010-06-09 08:26:14 UTC (rev 2519)
@@ -18,31 +18,29 @@
*/
package org.exoplatform.services.jcr.ext.backup.impl;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.RandomAccessFile;
-import java.util.ArrayList;
-import java.util.List;
-
import org.exoplatform.services.jcr.dataflow.ItemState;
import org.exoplatform.services.jcr.dataflow.TransactionChangesLog;
import org.exoplatform.services.jcr.dataflow.persistent.PersistedPropertyData;
import org.exoplatform.services.jcr.datamodel.ItemData;
-import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.ext.replication.FixupStream;
import org.exoplatform.services.jcr.impl.dataflow.TransientValueData;
-import org.exoplatform.services.jcr.impl.dataflow.persistent.StreamPersistedValueData;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
import org.exoplatform.services.jcr.impl.util.io.SpoolFile;
import org.exoplatform.services.jcr.util.IdGenerator;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.RandomAccessFile;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Created by The eXo Platform SAS.
*
@@ -483,7 +481,7 @@
public void restore() throws IOException
{
// TODO same code as in BackupWorkspaceInitializer?
-
+
List<ItemState> listItemState = itemDataChangesLog.getAllStates();
for (int i = 0; i < this.listFixupStream.size(); i++)
{
@@ -491,12 +489,12 @@
ItemData itemData = itemState.getData();
PersistedPropertyData propertyData = (PersistedPropertyData)itemData;
- ValueData tvd =
- (ValueData)(propertyData.getValues().get(listFixupStream.get(i).getValueDataId()));
+ TransientValueData tvd =
+ (TransientValueData)(propertyData.getValues().get(listFixupStream.get(i).getValueDataId()));
// re-init the value
- propertyData.getValues().set(listFixupStream.get(i).getValueDataId(),
- new StreamPersistedValueData(tvd.getOrderNumber(), listFile.get(i)));
+ tvd.delegate(new TransientValueData(tvd.getOrderNumber(), null, null, new SpoolFile(listFile.get(i)
+ .getAbsolutePath()), fileCleaner, -1, null, true));
}
if (listRandomAccessFile != null)
@@ -508,4 +506,4 @@
}
-}
+}
\ No newline at end of file
14 years, 1 month
exo-jcr SVN: r2518 - in jcr/trunk/exo.jcr.component.core: src/main/java/org/exoplatform/services/jcr/impl and 5 other directories.
by do-not-reply@jboss.org
Author: dkatayev
Date: 2010-06-08 11:32:15 -0400 (Tue, 08 Jun 2010)
New Revision: 2518
Added:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/AddNamespacePluginHolder.java
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.h2.sql
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.h2.sql
Modified:
jcr/trunk/exo.jcr.component.core/pom.xml
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryContainer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryServiceImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ItemImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceRegistryImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SysViewWorkspaceInitializer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/WorkspaceImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/EditableValueData.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/TransientValueData.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/FilePersistedValueData.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java
Log:
EXOJCR-751 Prepare maintenance branch for jcr 1.12: EXOJCR-570, EXOJCR-626, EXOJCR-420, EXOJCR-635, EXOJCR-732, EXOJCR-542 ported from 1.14.x
Modified: jcr/trunk/exo.jcr.component.core/pom.xml
===================================================================
--- jcr/trunk/exo.jcr.component.core/pom.xml 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/pom.xml 2010-06-08 15:32:15 UTC (rev 2518)
@@ -295,9 +295,8 @@
<!-- dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
- <version>1.0.74</version>
- <scope>test</scope>
- </dependency -->
+ <version>1.2.132</version>
+ </dependency-->
<!-- Ingres Database (local repository) -->
<!-- dependency>
<groupId>com.ingres.jdbc</groupId>
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryContainer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryContainer.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryContainer.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -19,6 +19,7 @@
package org.exoplatform.services.jcr.impl;
import org.exoplatform.container.ExoContainer;
+import org.exoplatform.container.component.ComponentPlugin;
import org.exoplatform.container.jmx.MX4JComponentAdapterFactory;
import org.exoplatform.management.annotations.Managed;
import org.exoplatform.management.annotations.ManagedDescription;
@@ -31,6 +32,7 @@
import org.exoplatform.services.jcr.config.WorkspaceEntry;
import org.exoplatform.services.jcr.core.nodetype.ExtendedNodeTypeManager;
import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
+import org.exoplatform.services.jcr.impl.core.AddNamespacePluginHolder;
import org.exoplatform.services.jcr.impl.core.LocationFactory;
import org.exoplatform.services.jcr.impl.core.NamespaceDataPersister;
import org.exoplatform.services.jcr.impl.core.NamespaceRegistryImpl;
@@ -101,17 +103,52 @@
private final Log log = ExoLogger.getLogger("exo.jcr.component.core.RepositoryContainer");
/**
+ * List of AddNamespacePlugin.
+ */
+ private List<ComponentPlugin> addNamespacePlugins;
+
+ /**
* RepositoryContainer constructor.
*
* @param parent
* container
* @param config
* Repository configuration
+ * @param addNamespacePlugins
+ * list of addNamespacePlugin
* @throws RepositoryException
* container initialization error
* @throws RepositoryConfigurationException
* configuration error
*/
+ public RepositoryContainer(ExoContainer parent, RepositoryEntry config, List<ComponentPlugin> addNamespacePlugins)
+ throws RepositoryException, RepositoryConfigurationException
+ {
+
+ super(new MX4JComponentAdapterFactory(), parent);
+
+ // Defaults:
+ if (config.getAccessControl() == null)
+ config.setAccessControl(AccessControlPolicy.OPTIONAL);
+
+ this.config = config;
+ this.addNamespacePlugins = addNamespacePlugins;
+
+ registerComponents();
+ }
+
+ /**
+ * RepositoryContainer constructor.
+ *
+ * @param parent
+ * container
+ * @param config
+ * Repository configuration
+ * @throws RepositoryException
+ * container initialization error
+ * @throws RepositoryConfigurationException
+ * configuration error
+ */
public RepositoryContainer(ExoContainer parent, RepositoryEntry config) throws RepositoryException,
RepositoryConfigurationException
{
@@ -487,7 +524,6 @@
private void registerRepositoryComponents() throws RepositoryConfigurationException, RepositoryException
{
-
registerComponentImplementation(IdGenerator.class);
registerComponentImplementation(RepositoryIndexSearcherHolder.class);
@@ -496,6 +532,8 @@
registerComponentImplementation(LocationFactory.class);
registerComponentImplementation(ValueFactoryImpl.class);
+ registerComponentInstance(new AddNamespacePluginHolder(addNamespacePlugins));
+
registerComponentImplementation(JCRNodeTypeDataPersister.class);
registerComponentImplementation(NamespaceDataPersister.class);
registerComponentImplementation(NamespaceRegistryImpl.class);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryServiceImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryServiceImpl.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryServiceImpl.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -31,6 +31,7 @@
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.jcr.core.nodetype.ExtendedNodeTypeManager;
import org.exoplatform.services.jcr.dataflow.persistent.ItemsPersistenceListener;
+import org.exoplatform.services.jcr.impl.core.AddNamespacePluginHolder;
import org.exoplatform.services.jcr.impl.core.RepositoryImpl;
import org.exoplatform.services.jcr.impl.core.SessionRegistry;
import org.exoplatform.services.log.ExoLogger;
@@ -149,7 +150,7 @@
throw new RepositoryConfigurationException("Repository container " + rEntry.getName() + " already started");
}
- RepositoryContainer repositoryContainer = new RepositoryContainer(parentContainer, rEntry);
+ RepositoryContainer repositoryContainer = new RepositoryContainer(parentContainer, rEntry, addNamespacesPlugins);
// Storing and starting the repository container under
// key=repository_name
@@ -157,6 +158,7 @@
{
repositoryContainers.put(rEntry.getName(), repositoryContainer);
managerStartChanges.registerListeners(repositoryContainer);
+
repositoryContainer.start();
}
catch (Throwable t)
@@ -174,7 +176,6 @@
config.getRepositoryConfigurations().add(rEntry);
}
- addNamespaces(rEntry.getName());
registerNodeTypes(rEntry.getName());
// turn on Repository ONLINE
@@ -302,53 +303,6 @@
managerStartChanges.cleanup();
}
- private void addNamespaces() throws RepositoryException
- {
-
- for (RepositoryEntry repoConfig : config.getRepositoryConfigurations())
- {
- addNamespaces(repoConfig.getName());
- }
- }
-
- private void addNamespaces(String repositoryName) throws RepositoryException
- {
-
- ManageableRepository repository = getRepository(repositoryName);
- NamespaceRegistry nsRegistry = repository.getNamespaceRegistry();
-
- for (int j = 0; j < addNamespacesPlugins.size(); j++)
- {
- AddNamespacesPlugin plugin = (AddNamespacesPlugin)addNamespacesPlugins.get(j);
- Map<String, String> namespaces = plugin.getNamespaces();
- try
- {
- for (Map.Entry<String, String> namespace : namespaces.entrySet())
- {
-
- String prefix = namespace.getKey();
- String uri = namespace.getValue();
-
- // register namespace if not found
- try
- {
- nsRegistry.getURI(prefix);
- }
- catch (NamespaceException e)
- {
- nsRegistry.registerNamespace(prefix, uri);
- }
- if (log.isDebugEnabled())
- log.debug("Namespace is registered " + prefix + " = " + uri);
- }
- }
- catch (Exception e)
- {
- log.error("Error load namespaces ", e);
- }
- }
- }
-
private void init(ExoContainer container) throws RepositoryConfigurationException, RepositoryException
{
this.parentContainer = container;
Copied: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/AddNamespacePluginHolder.java (from rev 2344, jcr/branches/1.14.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/AddNamespacePluginHolder.java)
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/AddNamespacePluginHolder.java (rev 0)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/AddNamespacePluginHolder.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * 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.
+ *
+ * This software 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.exoplatform.services.jcr.impl.core;
+
+import org.exoplatform.container.component.ComponentPlugin;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * AddNamespacePluginHolder is used in NamespaceRegistryImpl for registration
+ * namespaces from xml-configuration after repository start.
+ *
+ * @author <a href="anatoliy.bazko(a)exoplatform.org">Anatoliy Bazko</a>
+ * @version $Id: AddNamespacePluginHolder.java 111 2010-11-11 11:11:11Z tolusha $
+ */
+public class AddNamespacePluginHolder
+{
+ private final List<ComponentPlugin> addNamespacesPlugins;
+
+ /**
+ * AddNamespacePluginHolder constructor.
+ *
+ * @param componentPlugins
+ * list of AddNamespacesPlugins
+ */
+ public AddNamespacePluginHolder(List<ComponentPlugin> componentPlugins)
+ {
+ this.addNamespacesPlugins = new ArrayList<ComponentPlugin>(componentPlugins);
+ }
+
+ /**
+ * @return unmodifiable list of AddNamespacesPlugins
+ */
+ public List<ComponentPlugin> getAddNamespacesPlugins()
+ {
+ return Collections.unmodifiableList(addNamespacesPlugins);
+ }
+}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/BackupWorkspaceInitializer.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -448,12 +448,12 @@
ItemData itemData = itemState.getData();
PersistedPropertyData propertyData = (PersistedPropertyData)itemData;
- ValueData tvd =
- (ValueData)(propertyData.getValues().get(listFixupStream.get(i).getValueDataId()));
+ TransientValueData tvd =
+ (TransientValueData)(propertyData.getValues().get(listFixupStream.get(i).getValueDataId()));
// re-init the value
- propertyData.getValues().set(listFixupStream.get(i).getValueDataId(),
- new StreamPersistedValueData(tvd.getOrderNumber(), listFile.get(i)));
+ tvd.delegate(new TransientValueData(tvd.getOrderNumber(), null, null, new SpoolFile(listFile.get(i)
+ .getAbsolutePath()), fileCleaner, -1, null, true));
}
for (int i = 0; i < listFile.size(); i++)
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ItemImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ItemImpl.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ItemImpl.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -416,7 +416,9 @@
int version;
PropertyImpl prevProp;
PropertyDefinitionDatas defs;
- ItemImpl prevItem = dataManager.getItem(parentNode.nodeData(), new QPathEntry(propertyName, 0), true);
+ ItemImpl prevItem =
+ dataManager.getItem(parentNode.nodeData(), new QPathEntry(propertyName, 0), true, dataManager.isNew(parentNode
+ .getIdentifier()));
NodeTypeDataManager ntm = session.getWorkspace().getNodeTypesHolder();
NodeData parentData = (NodeData)parentNode.getData();
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceRegistryImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceRegistryImpl.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceRegistryImpl.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -18,8 +18,10 @@
*/
package org.exoplatform.services.jcr.impl.core;
+import org.exoplatform.container.component.ComponentPlugin;
import org.exoplatform.services.jcr.dataflow.DataManager;
import org.exoplatform.services.jcr.datamodel.ItemData;
+import org.exoplatform.services.jcr.impl.AddNamespacesPlugin;
import org.exoplatform.services.jcr.impl.core.query.RepositoryIndexSearcherHolder;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
@@ -99,6 +101,8 @@
private NamespaceDataPersister persister;
+ private AddNamespacePluginHolder addNamespacePluginHolder;
+
/**
* for tests.
*/
@@ -106,19 +110,35 @@
{
this.namespaces = new HashMap<String, String>(DEF_NAMESPACES);
this.prefixes = new HashMap<String, String>(DEF_PREFIXES);
+
this.dataManager = null;
this.indexSearcherHolder = null;
+ this.persister = null;
+ this.addNamespacePluginHolder = null;
}
public NamespaceRegistryImpl(NamespaceDataPersister persister, DataManager dataManager,
RepositoryIndexSearcherHolder indexSearcherHolder)
{
+ this.namespaces = new HashMap<String, String>(DEF_NAMESPACES);
+ this.prefixes = new HashMap<String, String>(DEF_PREFIXES);
this.dataManager = dataManager;
this.indexSearcherHolder = indexSearcherHolder;
+ this.persister = persister;
+ this.addNamespacePluginHolder = null;
+ }
+
+ public NamespaceRegistryImpl(NamespaceDataPersister persister, DataManager dataManager,
+ RepositoryIndexSearcherHolder indexSearcherHolder, AddNamespacePluginHolder addNamespacePluginHolder)
+ {
this.namespaces = new HashMap<String, String>(DEF_NAMESPACES);
this.prefixes = new HashMap<String, String>(DEF_PREFIXES);
+
+ this.dataManager = dataManager;
+ this.indexSearcherHolder = indexSearcherHolder;
this.persister = persister;
+ this.addNamespacePluginHolder = addNamespacePluginHolder;
}
/**
@@ -257,7 +277,6 @@
{
if (!started)
{
-
// save default
if (persister != null)
{
@@ -278,6 +297,12 @@
throw new RuntimeException(e.getLocalizedMessage(), e);
}
}
+
+ if (addNamespacePluginHolder != null)
+ {
+ addPendingNamespaces();
+ }
+
started = true;
}
}
@@ -370,4 +395,37 @@
}
+ private void addPendingNamespaces()
+ {
+ for (ComponentPlugin plugin : addNamespacePluginHolder.getAddNamespacesPlugins())
+ {
+ Map<String, String> namespaces = ((AddNamespacesPlugin)plugin).getNamespaces();
+ try
+ {
+ for (Map.Entry<String, String> namespace : namespaces.entrySet())
+ {
+
+ String prefix = namespace.getKey();
+ String uri = namespace.getValue();
+
+ // register namespace if not found
+ try
+ {
+ getURI(prefix);
+ }
+ catch (NamespaceException e)
+ {
+ registerNamespace(prefix, uri);
+ }
+ if (log.isDebugEnabled())
+ log.debug("Namespace is registered " + prefix + " = " + uri);
+ }
+ }
+ catch (Exception e)
+ {
+ log.error("Error load namespaces ", e);
+ }
+ }
+ }
+
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -47,6 +47,7 @@
import org.exoplatform.services.log.Log;
import java.io.IOException;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -199,6 +200,15 @@
*/
public ItemData getItemData(NodeData parent, QPathEntry name) throws RepositoryException
{
+ return getItemData(parent, name, false);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ private ItemData getItemData(NodeData parent, QPathEntry name, boolean skipCheckInPersistence)
+ throws RepositoryException
+ {
if (name.getName().equals(JCRPath.PARENT_RELPATH) && name.getNamespace().equals(Constants.NS_DEFAULT_URI))
{
if (parent.getIdentifier().equals(Constants.ROOT_UUID))
@@ -218,7 +228,10 @@
if (state == null)
{
// 2. Try from txdatamanager
- data = transactionableManager.getItemData(parent, name);
+ if (!(skipCheckInPersistence))
+ {
+ data = transactionableManager.getItemData(parent, name);
+ }
}
else if (!state.isDeleted())
{
@@ -289,6 +302,45 @@
}
/**
+ * Return Item by parent NodeDada and the name of searched item.
+ *
+ * @param parent
+ * - parent of the searched item
+ * @param name
+ * - item name
+ * @param pool
+ * - indicates does the item fall in pool
+ * @param skipCheckInPersistence
+ * - skip getting Item from persistence if need
+ * @return existed item or null if not found
+ * @throws RepositoryException
+ */
+ public ItemImpl getItem(NodeData parent, QPathEntry name, boolean pool, boolean skipCheckInPersistence)
+ throws RepositoryException
+ {
+ long start = System.currentTimeMillis();
+ if (log.isDebugEnabled())
+ {
+ log.debug("getItem(" + parent.getQPath().getAsString() + " + " + name.getAsString() + " ) >>>>>");
+ }
+
+ ItemImpl item = null;
+ try
+ {
+ return item = readItem(getItemData(parent, name, skipCheckInPersistence), pool);
+ }
+ finally
+ {
+ if (log.isDebugEnabled())
+ {
+ log.debug("getItem(" + parent.getQPath().getAsString() + " + " + name.getAsString() + ") --> "
+ + (item != null ? item.getPath() : "null") + " <<<<< " + ((System.currentTimeMillis() - start) / 1000d)
+ + "sec");
+ }
+ }
+ }
+
+ /**
* Return Item by parent NodeDada and array of QPathEntry which represent a relative path to the
* searched item
*
@@ -923,22 +975,25 @@
Collection<ItemImpl> pooledItems = itemsPool.getAll();
for (ItemImpl item : pooledItems)
{
- if (item.getInternalPath().isDescendantOf(fromItem.getQPath())
- || item.getInternalPath().equals(fromItem.getQPath()))
+ if (item != null)
{
- ItemData ri = getItemData(item.getInternalIdentifier());
- if (ri != null)
+ if (item.getInternalPath().isDescendantOf(fromItem.getQPath())
+ || item.getInternalPath().equals(fromItem.getQPath()))
{
- itemsPool.reload(ri);
+ ItemData ri = getItemData(item.getInternalIdentifier());
+ if (ri != null)
+ {
+ itemsPool.reload(ri);
+ }
+ else
+ {
+ // the item is invalid, case of version restore - the item from non
+ // current version
+ item.invalidate();
+ }
+
+ invalidated.add(item);
}
- else
- {
- // the item is invalid, case of version restore - the item from non
- // current version
- item.invalidate();
- }
-
- invalidated.add(item);
}
}
}
@@ -1958,25 +2013,31 @@
protected final class ItemReferencePool
{
- private WeakHashMap<String, ItemImpl> items;
+ private WeakHashMap<String, WeakReference<ItemImpl>> items;
- //private WeakHashMap<String, ItemData> datas;
-
ItemReferencePool()
{
- items = new WeakHashMap<String, ItemImpl>();
- //datas = new WeakHashMap<String, ItemData>();
+ items = new WeakHashMap<String, WeakReference<ItemImpl>>();
}
ItemImpl remove(String identifier)
{
- //datas.remove(identifier);
- return items.remove(identifier);
+ WeakReference<ItemImpl> weakItem = items.remove(identifier);
+ return weakItem != null ? weakItem.get() : null;
}
Collection<ItemImpl> getAll()
{
- return items.values();
+ List<ItemImpl> list = new ArrayList<ItemImpl>();
+ for (WeakReference<ItemImpl> weakItem : items.values())
+ {
+ if (weakItem != null)
+ {
+ list.add(weakItem.get());
+ }
+ }
+
+ return list;
}
int size()
@@ -2017,23 +2078,20 @@
ItemImpl get(final ItemData newData, final NodeData parent) throws RepositoryException
{
final String identifier = newData.getIdentifier();
- ItemImpl item = items.get(identifier);
+
+ WeakReference<ItemImpl> weakItem = items.get(identifier);
+ ItemImpl item = weakItem != null ? weakItem.get() : null;
+
if (item != null)
{
item.loadData(newData, parent);
}
else
{
- // ItemData preloaded = datas.remove(identifier);
- // item =
- // itemFactory.createItem(preloaded != null
- // && preloaded.getPersistedVersion() > newData.getPersistedVersion() ? preloaded : newData);
- //datas.remove(identifier);
-
// TODO if (changesLog.get) check if DELETED!!
item = itemFactory.createItem(newData, parent);
- items.put(item.getInternalIdentifier(), item);
+ items.put(item.getInternalIdentifier(), new WeakReference<ItemImpl>(item));
}
return item;
}
@@ -2053,16 +2111,14 @@
ItemImpl reload(String identifier, ItemData newItemData) throws RepositoryException
{
- ItemImpl item = items.get(identifier);
+ WeakReference<ItemImpl> weakItem = items.get(identifier);
+ ItemImpl item = weakItem != null ? weakItem.get() : null;
+
if (item != null)
{
item.loadData(newItemData);
return item;
}
- // else
- // {
- // datas.put(identifier, newItemData);
- // }
return null;
}
@@ -2080,10 +2136,13 @@
for (NodeImpl node : nodes)
{
String id = node.getInternalIdentifier();
- NodeImpl pooled = (NodeImpl)items.get(id);
+
+ WeakReference<ItemImpl> weakItem = items.get(id);
+ NodeImpl pooled = weakItem != null ? (NodeImpl)weakItem.get() : null;
+
if (pooled == null)
{
- items.put(id, node);
+ items.put(id, new WeakReference<ItemImpl>(node));
children.add(node);
}
else
@@ -2109,10 +2168,13 @@
for (PropertyImpl prop : props)
{
String id = prop.getInternalIdentifier();
- PropertyImpl pooled = (PropertyImpl)items.get(id);
+
+ WeakReference<ItemImpl> weakItem = items.get(id);
+ PropertyImpl pooled = weakItem != null ? (PropertyImpl)weakItem.get() : null;
+
if (pooled == null)
{
- items.put(id, prop);
+ items.put(id, new WeakReference<ItemImpl>(prop));
children.add(prop);
}
else
@@ -2134,12 +2196,15 @@
{
List<ItemImpl> desc = new ArrayList<ItemImpl>();
- Collection<ItemImpl> snapshort = items.values();
+ Collection<ItemImpl> snapshort = getAll();
for (ItemImpl pitem : snapshort)
{
- if (pitem.getData().getQPath().isDescendantOf(parentPath))
+ if (pitem != null)
{
- desc.add(pitem);
+ if (pitem.getData().getQPath().isDescendantOf(parentPath))
+ {
+ desc.add(pitem);
+ }
}
}
@@ -2151,11 +2216,14 @@
String str = "Items Pool: \n";
try
{
- for (ItemImpl item : items.values())
+ for (ItemImpl item : getAll())
{
- str +=
- (item.isNode() ? "Node\t\t" : "Property\t") + "\t" + item.isValid() + "\t" + item.isNew() + "\t"
- + item.getInternalIdentifier() + "\t" + item.getPath() + "\n";
+ if (item != null)
+ {
+ str +=
+ (item.isNode() ? "Node\t\t" : "Property\t") + "\t" + item.isValid() + "\t" + item.isNew() + "\t"
+ + item.getInternalIdentifier() + "\t" + item.getPath() + "\n";
+ }
}
}
catch (Exception e)
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SysViewWorkspaceInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SysViewWorkspaceInitializer.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SysViewWorkspaceInitializer.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -776,8 +776,8 @@
if (pfile != null)
{
vdata =
- new TransientValueData(currentProperty.getValues().size(), null, null, pfile,
- fileCleaner, maxBufferSize, null, true);
+ new TransientValueData(currentProperty.getValues().size(), null, null,
+ new SpoolFile(pfile.getAbsolutePath()), fileCleaner, maxBufferSize, null, true);
}
else
{
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/WorkspaceImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/WorkspaceImpl.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/WorkspaceImpl.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -294,7 +294,9 @@
public QueryManager getQueryManager() throws RepositoryException
{
if (queryManager == null)
- throw new RepositoryException("Query Manager Factory not found. Check configuration.");
+ throw new RepositoryException(
+ "Query Manager Factory not found. Check configuration of the query-handler for workspace " + getName()
+ + ".");
return queryManager;
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/EditableValueData.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/EditableValueData.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/EditableValueData.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -19,6 +19,7 @@
package org.exoplatform.services.jcr.impl.dataflow;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
+import org.exoplatform.services.jcr.impl.util.io.SpoolFile;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
@@ -59,7 +60,7 @@
}
// TODO use InputStream instead of spoolFile and use Channel.transferFrom.
- public NewEditableValueData(File spoolFile, int orderNumber, FileCleaner fileCleaner, int maxBufferSize,
+ public NewEditableValueData(SpoolFile spoolFile, int orderNumber, FileCleaner fileCleaner, int maxBufferSize,
File tempDirectory) throws IOException
{
@@ -68,11 +69,11 @@
this.maxIOBuffSize = calcMaxIOSize();
- File sf = null;
+ SpoolFile sf = null;
FileChannel sch = null;
try
{
- sf = File.createTempFile("jcrvdedit", null, tempDirectory);
+ sf = SpoolFile.createTempFile("jcrvdedit", null, tempDirectory);
sch = new RandomAccessFile(sf, "rw").getChannel();
@@ -123,7 +124,7 @@
this.maxIOBuffSize = calcMaxIOSize();
- File sf = File.createTempFile("jcrvdedit", null, tempDirectory);
+ SpoolFile sf = SpoolFile.createTempFile("jcrvdedit", null, tempDirectory);
OutputStream sfout = new FileOutputStream(sf);
try
{
@@ -177,44 +178,6 @@
return buffSize;
}
- // public TransientValueData createTransientCopy() throws RepositoryException
- // {
- // if (isByteArray())
- // {
- // // bytes, make a copy of real data
- // byte[] newBytes = new byte[data.length];
- // System.arraycopy(data, 0, newBytes, 0, newBytes.length);
- // return new TransientValueData(newBytes, orderNumber);
- // }
- // else
- // {
- // // stream, make a copy
- // try
- // {
- // // force changes made to the file
- // spoolChannel.force(false);
- //
- // InputStream thisStream = getAsStream();
- // try
- // {
- // TransientValueData copy =
- // new TransientValueData(orderNumber, null, thisStream, null, fileCleaner, maxBufferSize,
- // tempDirectory, true);
- // copy.spoolInputStream(); // force spool - read now, till the source isn't changed
- // return copy;
- // }
- // finally
- // {
- // thisStream.close();
- // }
- // }
- // catch (IOException e)
- // {
- // throw new RepositoryException("Create transient copy error. " + e, e);
- // }
- // }
- // }
-
/**
* Update with <code>length</code> bytes from the specified <code>stream</code> to this value data
* at <code>position</code>.
@@ -294,13 +257,13 @@
{
// switch from bytes to file/channel
- File chf = null;
+ SpoolFile chf = null;
FileChannel chch = null;
long newIndex = 0; // first pos to write
try
{
- chf = File.createTempFile("jcrvdedit", null, tempDirectory);
+ chf = SpoolFile.createTempFile("jcrvdedit", null, tempDirectory);
chch = new RandomAccessFile(chf, "rw").getChannel();
// allocate the space for whole file
@@ -397,11 +360,11 @@
else
{
// switch from bytes to file/channel
- File chf = null;
+ SpoolFile chf = null;
FileChannel chch = null;
try
{
- chf = File.createTempFile("jcrvdedit", null, tempDirectory);
+ chf = SpoolFile.createTempFile("jcrvdedit", null, tempDirectory);
chch = new RandomAccessFile(chf, "rw").getChannel();
ReadableByteChannel bch = Channels.newChannel(new ByteArrayInputStream(this.data));
@@ -504,7 +467,7 @@
this.delegate = new NewEditableValueData(bytes, orderNumber, fileCleaner, maxBufferSize, tempDirectory);
}
- public EditableValueData(File spoolFile, int orderNumber, FileCleaner fileCleaner, int maxBufferSize,
+ public EditableValueData(SpoolFile spoolFile, int orderNumber, FileCleaner fileCleaner, int maxBufferSize,
File tempDirectory) throws IOException
{
this.delegate = new NewEditableValueData(spoolFile, orderNumber, fileCleaner, maxBufferSize, tempDirectory);
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/TransientValueData.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/TransientValueData.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/TransientValueData.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -70,7 +70,7 @@
protected InputStream tmpStream;
- protected File spoolFile;
+ protected SpoolFile spoolFile;
protected final boolean closeTmpStream;
@@ -146,7 +146,7 @@
* @throws IOException
* if read error
*/
- protected NewValueData(int orderNumber, byte[] bytes, InputStream stream, File spoolFile,
+ protected NewValueData(int orderNumber, byte[] bytes, InputStream stream, SpoolFile spoolFile,
FileCleaner fileCleaner, int maxBufferSize, File tempDirectory, boolean deleteSpoolFile, boolean closeTmpStream)
throws IOException
{
@@ -163,10 +163,7 @@
if (spoolFile != null)
{
- if (spoolFile instanceof SpoolFile)
- {
- ((SpoolFile)spoolFile).acquire(this);
- }
+ spoolFile.acquire(this);
if (this.tmpStream != null)
{
@@ -744,7 +741,7 @@
* @throws IOException
* if read error
*/
- public TransientValueData(int orderNumber, byte[] bytes, InputStream stream, File spoolFile,
+ public TransientValueData(int orderNumber, byte[] bytes, InputStream stream, SpoolFile spoolFile,
FileCleaner fileCleaner, int maxBufferSize, File tempDirectory, boolean deleteSpoolFile, boolean closeTmpStream)
throws IOException
{
@@ -775,7 +772,7 @@
* @throws IOException
* if read error
*/
- public TransientValueData(int orderNumber, byte[] bytes, InputStream stream, File spoolFile,
+ public TransientValueData(int orderNumber, byte[] bytes, InputStream stream, SpoolFile spoolFile,
FileCleaner fileCleaner, int maxBufferSize, File tempDirectory, boolean deleteSpoolFile) throws IOException
{
this.delegate =
@@ -823,7 +820,7 @@
* @throws IOException
* if read error
*/
- public TransientValueData(int orderNumber, File spoolFile, FileCleaner fileCleaner, boolean deleteSpoolFile)
+ public TransientValueData(int orderNumber, SpoolFile spoolFile, FileCleaner fileCleaner, boolean deleteSpoolFile)
throws IOException
{
this.delegate =
@@ -1191,7 +1188,7 @@
*
* @return File temp file
*/
- public File getSpoolFile()
+ public SpoolFile getSpoolFile()
{
if (delegate instanceof NewValueData)
{
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/FilePersistedValueData.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/FilePersistedValueData.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/FilePersistedValueData.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -21,7 +21,6 @@
import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.impl.dataflow.AbstractPersistedValueData;
import org.exoplatform.services.jcr.impl.dataflow.TransientValueData;
-import org.exoplatform.services.jcr.impl.util.io.SwapFile;
import java.io.Externalizable;
import java.io.File;
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/StreamPersistedValueData.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -41,7 +41,7 @@
protected InputStream stream;
- protected File tempFile;
+ protected SpoolFile tempFile;
/**
* StreamPersistedValueData constructor for stream data.
@@ -61,7 +61,7 @@
* @param tempFile File
* @throws FileNotFoundException
*/
- public StreamPersistedValueData(int orderNumber, File tempFile) throws FileNotFoundException
+ public StreamPersistedValueData(int orderNumber, SpoolFile tempFile) throws FileNotFoundException
{
this(orderNumber, tempFile, null);
}
@@ -91,15 +91,15 @@
* @param tempFile File
* @throws FileNotFoundException
*/
- public StreamPersistedValueData(int orderNumber, File tempFile, File destFile) throws FileNotFoundException
+ public StreamPersistedValueData(int orderNumber, SpoolFile tempFile, File destFile) throws FileNotFoundException
{
super(orderNumber, destFile);
this.tempFile = tempFile;
this.stream = null;
- if (tempFile != null && tempFile instanceof SpoolFile)
+ if (tempFile != null)
{
- ((SpoolFile)tempFile).acquire(this);
+ tempFile.acquire(this);
}
}
@@ -129,7 +129,7 @@
*
* @return File temporary file or null
*/
- public File getTempFile()
+ public SpoolFile getTempFile()
{
return tempFile;
}
@@ -233,9 +233,9 @@
((SwapFile)file).release(this);
}
- if (tempFile != null && tempFile instanceof SpoolFile)
+ if (tempFile != null)
{
- ((SpoolFile)tempFile).release(this);
+ tempFile.release(this);
}
}
finally
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java 2010-06-08 13:54:09 UTC (rev 2517)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/cas/JDBCValueContentAddressStorageImpl.java 2010-06-08 15:32:15 UTC (rev 2518)
@@ -97,6 +97,18 @@
*/
private static final String DB2_PK_CONSTRAINT_DETECT_PATTERN =
"(.*DB2 SQL error+.*SQLCODE: -803+.*SQLSTATE: 23505+.*%s.*)+?";
+
+ /**
+ * MYSQL_PK_CONSTRAINT_DETECT_PATTERN.
+ */
+ private static final String H2_PK_CONSTRAINT_DETECT_PATTERN =
+ "(.*JdbcSQLException.*violation.*PRIMARY_KEY_.*)";
+
+ /**
+ * H2_PK_CONSTRAINT_DETECT.
+ */
+ private static final Pattern H2_PK_CONSTRAINT_DETECT =
+ Pattern.compile(H2_PK_CONSTRAINT_DETECT_PATTERN, Pattern.CASE_INSENSITIVE);
/**
* DB2_PK_CONSTRAINT_DETECT.
@@ -302,11 +314,14 @@
// HSQLDB 8.x - java.sql.SQLException: Violation of unique constraint $$: duplicate value(s) for
// column(s) $$:
// JCR_VCAS_PK in statement [INSERT INTO JCR_VCAS (PROPERTY_ID, ORDER_NUM, CAS_ID)
- // VALUES(?,?,?)]
+ // VALUES(?,?,?)] String H2_PK_CONSTRAINT_DETECT_PATTERN = "(.*JdbcSQLException.*violation.*PRIMARY_KEY_.*)";
// PostgreSQL 8.2.x - org.postgresql.util.PSQLException: ERROR: duplicate key violates unique
// constraint "jcr_vcas_pk"
// Oracle 9i x64 (on Fedora 7) - java.sql.SQLException: ORA-00001: unique constraint
// (EXOADMIN.JCR_VCAS_PK) violated
+ // H2 - org.h2.jdbc.JdbcSQLException: Unique index or primary key violation:
+ // "PRIMARY_KEY_4 ON PUBLIC.JCR_VCAS_TEST(PROPERTY_ID, ORDER_NUM)";
+ //
String err = e.toString();
if (DBConstants.DB_DIALECT_MYSQL.equalsIgnoreCase(dialect)
|| DBConstants.DB_DIALECT_MYSQL_UTF8.equalsIgnoreCase(dialect))
@@ -323,6 +338,10 @@
{
return DB2_PK_CONSTRAINT_DETECT.matcher(err).find();
}
+ else if (DBConstants.DB_DIALECT_H2.equalsIgnoreCase(dialect))
+ {
+ return H2_PK_CONSTRAINT_DETECT.matcher(err).find();
+ }
// NOTICE! As an additional check we may ask the database for property currently processed in
// VCAS
Copied: jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.h2.sql (from rev 2256, jcr/branches/1.14.x/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.h2.sql)
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.h2.sql (rev 0)
+++ jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.h2.sql 2010-06-08 15:32:15 UTC (rev 2518)
@@ -0,0 +1,35 @@
+CREATE TABLE JCR_MCONTAINER(
+ VERSION VARCHAR(96) NOT NULL,
+ CONSTRAINT JCR_PK_MCONTAINER PRIMARY KEY(VERSION)
+);
+CREATE TABLE JCR_MITEM(
+ ID VARCHAR(96) NOT NULL,
+ PARENT_ID VARCHAR(96) NOT NULL,
+ NAME VARCHAR(512) NOT NULL,
+ VERSION INTEGER NOT NULL,
+ I_CLASS INTEGER NOT NULL,
+ I_INDEX INTEGER NOT NULL,
+ N_ORDER_NUM INTEGER,
+ P_TYPE INTEGER,
+ P_MULTIVALUED BOOLEAN,
+ CONSTRAINT JCR_PK_MITEM PRIMARY KEY(ID),
+ CONSTRAINT JCR_FK_MITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_MITEM(ID)
+);
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT ON JCR_MITEM(PARENT_ID, NAME, I_INDEX, I_CLASS, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_NAME ON JCR_MITEM(I_CLASS, PARENT_ID, NAME, I_INDEX, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_ID ON JCR_MITEM(I_CLASS, PARENT_ID, ID, VERSION DESC);
+CREATE TABLE JCR_MVALUE(
+ DATA VARBINARY(65535),
+ ORDER_NUM INTEGER NOT NULL,
+ PROPERTY_ID VARCHAR(96) NOT NULL,
+ STORAGE_DESC VARCHAR(512),
+ CONSTRAINT JCR_FK_MVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_MITEM(ID)
+);
+CREATE UNIQUE INDEX JCR_IDX_MVALUE_PROPERTY ON JCR_MVALUE(PROPERTY_ID, ORDER_NUM);
+CREATE TABLE JCR_MREF(
+ NODE_ID VARCHAR(96) NOT NULL,
+ PROPERTY_ID VARCHAR(96) NOT NULL,
+ ORDER_NUM INTEGER NOT NULL,
+ CONSTRAINT JCR_PK_MREF PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)
+);
+CREATE UNIQUE INDEX JCR_IDX_MREF_PROPERTY ON JCR_MREF(PROPERTY_ID, ORDER_NUM);
\ No newline at end of file
Copied: jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.h2.sql (from rev 2256, jcr/branches/1.14.x/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.h2.sql)
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.h2.sql (rev 0)
+++ jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.h2.sql 2010-06-08 15:32:15 UTC (rev 2518)
@@ -0,0 +1,36 @@
+CREATE TABLE JCR_SCONTAINER(
+ VERSION VARCHAR(96) NOT NULL,
+ CONSTRAINT JCR_PK_SCONTAINER PRIMARY KEY(VERSION)
+);
+CREATE TABLE JCR_SITEM(
+ ID VARCHAR(96) NOT NULL,
+ PARENT_ID VARCHAR(96) NOT NULL,
+ NAME VARCHAR(512) NOT NULL,
+ VERSION INTEGER NOT NULL,
+ CONTAINER_NAME VARCHAR(96) NOT NULL,
+ I_CLASS INTEGER NOT NULL,
+ I_INDEX INTEGER NOT NULL,
+ N_ORDER_NUM INTEGER,
+ P_TYPE INTEGER,
+ P_MULTIVALUED INTEGER,
+ CONSTRAINT JCR_PK_SITEM PRIMARY KEY(ID),
+ CONSTRAINT JCR_FK_SITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_SITEM(ID)
+);
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT ON JCR_SITEM(CONTAINER_NAME, PARENT_ID, NAME, I_INDEX, I_CLASS, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_NAME ON JCR_SITEM(I_CLASS, CONTAINER_NAME, PARENT_ID, NAME, I_INDEX, VERSION DESC);
+CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_ID ON JCR_SITEM(I_CLASS, CONTAINER_NAME, PARENT_ID, ID, VERSION DESC);
+CREATE TABLE JCR_SVALUE(
+ DATA VARBINARY(65535),
+ ORDER_NUM INTEGER NOT NULL,
+ PROPERTY_ID VARCHAR(96) NOT NULL,
+ STORAGE_DESC VARCHAR(512),
+ CONSTRAINT JCR_FK_SVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_SITEM(ID)
+);
+CREATE UNIQUE INDEX JCR_IDX_SVALUE_PROPERTY ON JCR_SVALUE(PROPERTY_ID, ORDER_NUM);
+CREATE TABLE JCR_SREF(
+ NODE_ID VARCHAR(96) NOT NULL,
+ PROPERTY_ID VARCHAR(96) NOT NULL,
+ ORDER_NUM INTEGER NOT NULL,
+ CONSTRAINT JCR_PK_SREF PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)
+);
+CREATE UNIQUE INDEX JCR_IDX_SREF_PROPERTY ON JCR_SREF(PROPERTY_ID, ORDER_NUM);
\ No newline at end of file
14 years, 1 month
exo-jcr SVN: r2517 - kernel/trunk.
by do-not-reply@jboss.org
Author: dkatayev
Date: 2010-06-08 09:54:09 -0400 (Tue, 08 Jun 2010)
New Revision: 2517
Modified:
kernel/trunk/pom.xml
Log:
EXOJCR-751 specification version updated
Modified: kernel/trunk/pom.xml
===================================================================
--- kernel/trunk/pom.xml 2010-06-08 13:50:25 UTC (rev 2516)
+++ kernel/trunk/pom.xml 2010-06-08 13:54:09 UTC (rev 2517)
@@ -37,7 +37,7 @@
<properties>
<exo.product.name>exo-kernel</exo.product.name>
- <exo.product.specification>2.2</exo.product.specification>
+ <exo.product.specification>2.3</exo.product.specification>
<org.exoplatform.framework.junit.version>1.2.1-GA</org.exoplatform.framework.junit.version>
<forkMode>always</forkMode>
</properties>
14 years, 1 month