exo-jcr SVN: r638 - jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2009-11-13 08:27:09 -0500 (Fri, 13 Nov 2009)
New Revision: 638
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
Log:
EXOJCR-201 : The JDBCCacheLoaderTest was changed.
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 13:18:46 UTC (rev 637)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 13:27:09 UTC (rev 638)
@@ -636,7 +636,7 @@
conn.commit();
// tests it
- Map<Object, Object> attrebutes = loader.get(Fqn.fromString("/"+JBossCacheStorage.NODES + "/" + nodeId + "/" + "[]node:1"));
+ Map<Object, Object> attrebutes = loader.get(Fqn.fromElements(JBossCacheStorage.NODES, Constants.ROOT_UUID, "[]node:1"));
assertNotNull(attrebutes);
@@ -659,7 +659,7 @@
// tests it
Map<Object, Object> attrebutes =
- loader.get(Fqn.fromString("/" + JBossCacheStorage.PROPS + "/" + propData.getIdentifier()));
+ loader.get(Fqn.fromElements(JBossCacheStorage.PROPS, propData.getIdentifier()));
assertNotNull(attrebutes);
16 years, 8 months
exo-jcr SVN: r637 - jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2009-11-13 08:18:46 -0500 (Fri, 13 Nov 2009)
New Revision: 637
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
Log:
EXOJCR-201 : The JDBCCacheLoaderTest was changed.
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 12:36:49 UTC (rev 636)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 13:18:46 UTC (rev 637)
@@ -636,7 +636,7 @@
conn.commit();
// tests it
- Map<Object, Object> attrebutes = loader.get(Fqn.fromString("/"+JBossCacheStorage.NODES + "/" + Constants.ROOT_UUID + "/" + "[]node:1"));
+ Map<Object, Object> attrebutes = loader.get(Fqn.fromString("/"+JBossCacheStorage.NODES + "/" + nodeId + "/" + "[]node:1"));
assertNotNull(attrebutes);
16 years, 8 months
exo-jcr SVN: r636 - in jcr/branches/1.12.0-OPT: applications and 16 other directories.
by do-not-reply@jboss.org
Author: pnedonosko
Date: 2009-11-13 07:36:49 -0500 (Fri, 13 Nov 2009)
New Revision: 636
Modified:
jcr/branches/1.12.0-OPT/applications/exo.jcr.applications.config/pom.xml
jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/bin/jcrbackup.cmd
jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/bin/jcrbackup.sh
jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/pom.xml
jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.browser/pom.xml
jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.fckeditor/pom.xml
jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.rest/pom.xml
jcr/branches/1.12.0-OPT/applications/java/exo.jcr.ear/pom.xml
jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-jboss-ear.xml
jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-jonas-ear.xml
jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-tomcat6.xml
jcr/branches/1.12.0-OPT/exo.jcr.component.core/pom.xml
jcr/branches/1.12.0-OPT/exo.jcr.component.ext/pom.xml
jcr/branches/1.12.0-OPT/exo.jcr.component.ftp/pom.xml
jcr/branches/1.12.0-OPT/exo.jcr.component.webdav/pom.xml
jcr/branches/1.12.0-OPT/exo.jcr.connectors.localadapter/pom.xml
jcr/branches/1.12.0-OPT/exo.jcr.framework.command/pom.xml
jcr/branches/1.12.0-OPT/exo.jcr.framework.ftpclient/pom.xml
jcr/branches/1.12.0-OPT/exo.jcr.framework.web/pom.xml
jcr/branches/1.12.0-OPT/packaging/module/pom.xml
jcr/branches/1.12.0-OPT/pom.xml
Log:
version 1.12.0-OPT-SNAPSHOT
Modified: jcr/branches/1.12.0-OPT/applications/exo.jcr.applications.config/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/exo.jcr.applications.config/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/exo.jcr.applications.config/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.applications.config</artifactId>
Modified: jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/bin/jcrbackup.cmd
===================================================================
--- jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/bin/jcrbackup.cmd 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/bin/jcrbackup.cmd 2009-11-13 12:36:49 UTC (rev 636)
@@ -1 +1 @@
-java -jar exo.jcr.applications.backupconsole-1.12.0-Beta03-SNAPSHOT.jar %*
+java -jar exo.jcr.applications.backupconsole-1.12.0-OPT-SNAPSHOT.jar %*
Modified: jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/bin/jcrbackup.sh
===================================================================
--- jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/bin/jcrbackup.sh 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/bin/jcrbackup.sh 2009-11-13 12:36:49 UTC (rev 636)
@@ -1,3 +1,3 @@
#!/bin/sh
-java -jar exo.jcr.applications.backupconsole-1.12.0-Beta03-SNAPSHOT.jar $*
+java -jar exo.jcr.applications.backupconsole-1.12.0-OPT-SNAPSHOT.jar $*
Modified: jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.backupconsole/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.applications.backupconsole</artifactId>
Modified: jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.browser/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.browser/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.browser/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.applications.browser</artifactId>
Modified: jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.fckeditor/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.fckeditor/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.fckeditor/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.applications.fckeditor</artifactId>
Modified: jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.rest/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.rest/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/java/exo.jcr.applications.rest/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.applications.rest</artifactId>
Modified: jcr/branches/1.12.0-OPT/applications/java/exo.jcr.ear/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/java/exo.jcr.ear/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/java/exo.jcr.ear/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.ear</artifactId>
Modified: jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-jboss-ear.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-jboss-ear.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-jboss-ear.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -22,7 +22,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>exo.jcr.applications.config</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -36,7 +36,7 @@
<dependency>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>exo.jcr.ear</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
<type>ear</type>
<scope>runtime</scope>
</dependency>
Modified: jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-jonas-ear.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-jonas-ear.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-jonas-ear.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -22,7 +22,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>exo.jcr.applications.config</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -36,7 +36,7 @@
<dependency>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>exo.jcr.ear</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
<type>ear</type>
<scope>runtime</scope>
</dependency>
Modified: jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-tomcat6.xml
===================================================================
--- jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-tomcat6.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/applications/product-exo-jcr-as-tomcat6.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -22,7 +22,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>exo.jcr.applications.config</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.component.core</artifactId>
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.ext/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.ext/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.ext/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.component.ext</artifactId>
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.ftp/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.ftp/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.ftp/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.component.ftp</artifactId>
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.webdav/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.webdav/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.webdav/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.component.webdav</artifactId>
Modified: jcr/branches/1.12.0-OPT/exo.jcr.connectors.localadapter/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.connectors.localadapter/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/exo.jcr.connectors.localadapter/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.connectors.localadapter</artifactId>
Modified: jcr/branches/1.12.0-OPT/exo.jcr.framework.command/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.framework.command/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/exo.jcr.framework.command/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.framework.command</artifactId>
Modified: jcr/branches/1.12.0-OPT/exo.jcr.framework.ftpclient/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.framework.ftpclient/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/exo.jcr.framework.ftpclient/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.framework.ftpclient</artifactId>
Modified: jcr/branches/1.12.0-OPT/exo.jcr.framework.web/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.framework.web/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/exo.jcr.framework.web/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -25,7 +25,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<artifactId>exo.jcr.framework.web</artifactId>
Modified: jcr/branches/1.12.0-OPT/packaging/module/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/packaging/module/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/packaging/module/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -2,7 +2,7 @@
<parent>
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
Modified: jcr/branches/1.12.0-OPT/pom.xml
===================================================================
--- jcr/branches/1.12.0-OPT/pom.xml 2009-11-13 11:43:48 UTC (rev 635)
+++ jcr/branches/1.12.0-OPT/pom.xml 2009-11-13 12:36:49 UTC (rev 636)
@@ -30,7 +30,7 @@
<groupId>org.exoplatform.jcr</groupId>
<artifactId>jcr-parent</artifactId>
- <version>1.12.0-Beta03-SNAPSHOT</version>
+ <version>1.12.0-OPT-SNAPSHOT</version>
<packaging>pom</packaging>
<name>eXo JCR</name>
16 years, 8 months
exo-jcr SVN: r635 - jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2009-11-13 06:43:48 -0500 (Fri, 13 Nov 2009)
New Revision: 635
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/AbstractCacheLoaderTest.java
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
Log:
EXOJCR-201 : The JDBCCacheLoaderTest and AbstractCacheLoaderTest was changed.
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/AbstractCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/AbstractCacheLoaderTest.java 2009-11-13 11:16:31 UTC (rev 634)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/AbstractCacheLoaderTest.java 2009-11-13 11:43:48 UTC (rev 635)
@@ -24,11 +24,16 @@
import org.exoplatform.services.jcr.datamodel.PropertyData;
import org.jboss.cache.Fqn;
import org.jboss.cache.Modification;
+import org.jboss.cache.Node;
import org.jboss.cache.Modification.ModificationType;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.RepositoryException;
+
/**
* This abstract class contains only methods for creating a fake {@link Modification} instances. It doesn't use real cache.
*
@@ -157,7 +162,33 @@
list.add(modification);
return list;
}
+
+ /**
+ * Returns {@link Modification} like as node update.
+ *
+ * PUT_KEY_VALUE /$NODES/ParentNodeId/ChildNodeName.Item_Id
+ * PUT_KEY_VALUE /$NODES/NodeId.Item_data
+ *
+ * @param data
+ * @return
+ */
+ public List<Modification> updateNode(NodeData data) {
+ List<Modification> list = new ArrayList<Modification>();
+ Fqn fqn = Fqn.fromElements(JBossCacheStorage.NODES, data.getParentIdentifier(), data.getQPath().getEntries()[data.getQPath().getEntries().length - 1].getAsString(true));
+
+ Modification modification =
+ new Modification(ModificationType.PUT_KEY_VALUE, fqn, JBossCacheStorage.ITEM_ID, data.getIdentifier());
+ list.add(modification);
+
+ fqn = Fqn.fromElements(JBossCacheStorage.NODES, data.getIdentifier());
+ modification = new Modification(ModificationType.PUT_KEY_VALUE, fqn, JBossCacheStorage.ITEM_DATA, data);
+ modification.setOldValue(data);
+ list.add(modification);
+
+ return list;
+ }
+
/**
* Returns {@link Modification} like as property removed. But it is thought, that list is already modified by JDBC loader,
* so {@link Modification} instance contains additional data: Key=ITEM_DATA, value=PropertyData - data of already removed
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 11:16:31 UTC (rev 634)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 11:43:48 UTC (rev 635)
@@ -538,11 +538,17 @@
List<Modification> modifications = new ArrayList<Modification>();
-// modifications.addAll(updateNode(nodeData));
+ modifications.addAll(updateNode(nodeData));
+
+ loader.put(modifications);
// tests it
+ conn = persistentContainer.openConnection();
-
+ NodeData destNodeData = (NodeData) conn.getItemData(nodeId);
+
+ assertNotNull(destNodeData);
+ assertEquals(2, destNodeData.getOrderNumber());
}
public void testUpdateProperty() throws Exception
16 years, 8 months
exo-jcr SVN: r634 - in kernel/branches/mc-int-branch: exo.kernel.container and 27 other directories.
by do-not-reply@jboss.org
Author: mstruk
Date: 2009-11-13 06:16:31 -0500 (Fri, 13 Nov 2009)
New Revision: 634
Added:
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/GenericWrapperUtil.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/InterceptMC.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/JavassistAOPClassLoader.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentAdapter.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentInfo.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCIntegration.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCIntegrationContainer.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCInterceptProxy.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/RootContainerVDFDecoratorInjector.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/WrapperMethodComposer.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/util/EnvSpecific.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/util/JBossEnv.java
kernel/branches/mc-int-branch/exo.kernel.demos/
kernel/branches/mc-int-branch/exo.kernel.demos/custom-pojo/
kernel/branches/mc-int-branch/exo.kernel.demos/custom-pojo/pom.xml
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/pom.xml
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectedBean.java
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectingBean.java
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/META-INF/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/META-INF/jboss-beans.xml
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/conf/
kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/conf/configuration.xml
kernel/branches/mc-int-branch/exo.kernel.demos/pom.xml
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/pom.xml
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/jboss/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/jboss/dependency/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/jboss/dependency/plugins/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/jboss/dependency/plugins/helpers/
kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/jboss/dependency/plugins/helpers/StatelessController.java
Modified:
kernel/branches/mc-int-branch/exo.kernel.container/pom.xml
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/CachingContainer.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/web/PortalContainerConfigOwner.java
kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/web/PortalContainerCreator.java
kernel/branches/mc-int-branch/pom.xml
Log:
MC integration - initial commit
Modified: kernel/branches/mc-int-branch/exo.kernel.container/pom.xml
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/pom.xml 2009-11-13 10:51:33 UTC (rev 633)
+++ kernel/branches/mc-int-branch/exo.kernel.container/pom.xml 2009-11-13 11:16:31 UTC (rev 634)
@@ -1,122 +1,148 @@
-<!--
-
- Copyright (C) 2009 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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.exoplatform.kernel</groupId>
- <artifactId>kernel-parent</artifactId>
- <version>2.2.0-Beta03-SNAPSHOT</version>
- </parent>
-
- <artifactId>exo.kernel.container</artifactId>
-
- <name>eXo Kernel :: Container</name>
- <description>eXo Kernel Container</description>
-
- <dependencies>
- <dependency>
- <groupId>org.exoplatform.kernel</groupId>
- <artifactId>exo.kernel.commons</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.exoplatform.tool</groupId>
- <artifactId>exo.tool.framework.junit</artifactId>
- <scope>compile</scope>
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- </dependency>
-
- <dependency>
- <groupId>picocontainer</groupId>
- <artifactId>picocontainer</artifactId>
- </dependency>
-
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.jibx</groupId>
- <artifactId>jibx-run</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.codehaus.woodstox</groupId>
- <artifactId>wstx-asl</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.jibx</groupId>
- <artifactId>jibx-bind</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.codehaus.woodstox</groupId>
- <artifactId>wstx-asl</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.jibx</groupId>
- <artifactId>jibx-extras</artifactId>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.jibx</groupId>
- <artifactId>maven-jibx-plugin</artifactId>
- <configuration>
- <directory>src/main/resources</directory>
- <includes>
- <includes>binding.xml</includes>
- </includes>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>bind</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
- <!--
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>apt-maven-plugin</artifactId>
- <configuration>
- <factory>org.exoplatform.management.apt.ManagementAPF</factory>
- </configuration>
- </plugin>
- -->
- </plugins>
- </build>
-</project>
+<!--
+
+ Copyright (C) 2009 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.exoplatform.kernel</groupId>
+ <artifactId>kernel-parent</artifactId>
+ <version>2.2.0-Beta03-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>exo.kernel.container</artifactId>
+
+ <name>eXo Kernel :: Container</name>
+ <description>eXo Kernel Container</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.exoplatform.kernel</groupId>
+ <artifactId>exo.kernel.commons</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.exoplatform.tool</groupId>
+ <artifactId>exo.tool.framework.junit</artifactId>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>picocontainer</groupId>
+ <artifactId>picocontainer</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jibx</groupId>
+ <artifactId>jibx-run</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jibx</groupId>
+ <artifactId>jibx-bind</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jibx</groupId>
+ <artifactId>jibx-extras</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-aop-mc-int</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.mc-int</groupId>
+ <artifactId>jboss-mc-int-common</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.mc-int</groupId>
+ <artifactId>jboss-mc-int-servlet</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.cl</groupId>
+ <artifactId>jboss-classloader</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.exoplatform.kernel</groupId>
+ <artifactId>mc-kernel-extras</artifactId>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.jibx</groupId>
+ <artifactId>maven-jibx-plugin</artifactId>
+ <configuration>
+ <directory>src/main/resources</directory>
+ <includes>
+ <includes>binding.xml</includes>
+ </includes>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>bind</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <!--
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>apt-maven-plugin</artifactId>
+ <configuration>
+ <factory>org.exoplatform.management.apt.ManagementAPF</factory>
+ </configuration>
+ </plugin>
+ -->
+ </plugins>
+ </build>
+</project>
Modified: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/CachingContainer.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/CachingContainer.java 2009-11-13 10:51:33 UTC (rev 633)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/CachingContainer.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -18,6 +18,7 @@
*/
package org.exoplatform.container;
+import org.exoplatform.container.mc.MCIntegrationContainer;
import org.picocontainer.ComponentAdapter;
import org.picocontainer.Parameter;
import org.picocontainer.PicoContainer;
@@ -26,7 +27,6 @@
import org.picocontainer.PicoVisitor;
import org.picocontainer.defaults.AbstractPicoVisitor;
import org.picocontainer.defaults.ComponentAdapterFactory;
-import org.picocontainer.defaults.DefaultPicoContainer;
import org.picocontainer.defaults.DuplicateComponentKeyRegistrationException;
import java.util.List;
@@ -37,7 +37,7 @@
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
-public class CachingContainer extends DefaultPicoContainer
+public class CachingContainer extends MCIntegrationContainer
{
private final ConcurrentMap<Class, ComponentAdapter> adapterByType =
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/GenericWrapperUtil.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/GenericWrapperUtil.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/GenericWrapperUtil.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,165 @@
+package org.exoplatform.container.mc;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtConstructor;
+import javassist.CtMethod;
+import javassist.CtNewMethod;
+import javassist.LoaderClassPath;
+import javassist.Modifier;
+import javassist.NotFoundException;
+import javassist.bytecode.AnnotationsAttribute;
+import javassist.bytecode.ClassFile;
+import javassist.bytecode.ConstPool;
+import javassist.bytecode.MethodInfo;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.deployers.vfs.plugins.structure.AbstractVFSDeploymentUnit;
+import org.jboss.mc.common.ThreadLocalUtils;
+import org.jboss.virtual.MemoryFileFactory;
+import org.jboss.virtual.VirtualFile;
+
+import java.net.URL;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @author <a href="mailto:ajustin@redhat.com">Ales Justin</a>
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+final class GenericWrapperUtil
+{
+ private static AtomicInteger counter = new AtomicInteger(0);
+
+ static MCComponentInfo generateAndInstallWrapper(Object instance) throws Exception
+ {
+ ClassPool pool = ClassPool.getDefault();
+ pool.insertClassPath(new LoaderClassPath(Thread.currentThread().getContextClassLoader()));
+
+ CtClass cc = pool.get(MCInterceptProxy.class.getName());
+ CtClass pc = pool.get(instance.getClass().getName());
+
+ zeroArgConstructorCheck(pc, instance);
+
+ cc.setSuperclass(pc);
+ cc.setName(getPackage(cc.getName()) + ".MCInterceptProxy$" + counter.getAndIncrement());
+ WrapperMethodComposer composer = new WrapperMethodComposer(MCInterceptProxy.DELEGATE, pc.getName());
+
+ ClassFile cf = cc.getClassFile();
+ AnnotationsAttribute attr = setAnnotations(pc.getClassFile().getAttributes(), cf.getConstPool());
+ if (attr != null)
+ cf.addAttribute(attr);
+ cf.setVersionToJava5();
+
+ for (CtMethod m : pc.getMethods())
+ {
+ if (isMethodOverridable(m))
+ {
+ CtMethod method = CtNewMethod.make(composer.composeMethod(m), cc);
+ MethodInfo minf = method.getMethodInfo();
+ attr = setAnnotations(m.getMethodInfo().getAttributes(), minf.getConstPool());
+ if (attr != null)
+ minf.addAttribute(attr);
+ cc.addMethod(method);
+ }
+ }
+
+ installWrapper(cc);
+
+ MCComponentInfo mcinf = new MCComponentInfo(cc.getName(),
+ new JavassistAOPClassLoader(Thread.currentThread().getContextClassLoader(), cc.getClassPool()));
+ Thread.currentThread().setContextClassLoader(mcinf.getClassLoader()); // TODO: ensure symetry - reset old CL when done
+ return mcinf;
+ }
+
+ private static AnnotationsAttribute setAnnotations(List attrs, ConstPool cpool)
+ {
+ AnnotationsAttribute attr = new AnnotationsAttribute(cpool, AnnotationsAttribute.visibleTag);
+ for (Object a : attrs)
+ {
+ if (a instanceof AnnotationsAttribute)
+ {
+ AnnotationsAttribute aa = (AnnotationsAttribute) a;
+ if (AnnotationsAttribute.visibleTag.equals(aa.getName()) == false)
+ continue;
+ attr.setAnnotations(aa.getAnnotations());
+ return attr;
+ }
+ }
+ return null;
+ }
+
+ private static String getPackage(String name)
+ {
+ return name.substring(0, name.lastIndexOf("."));
+ }
+
+ private static void installWrapper(CtClass cc) throws Exception
+ {
+ // This is to make classloading work with jboss-aop and mc-classloading
+ // - third-party (Tomcat) can be enabled through context classloader
+ DeploymentUnit unit = ThreadLocalUtils.getUnit();
+ String host = getVFSMemoryHost(unit);
+ if (host != null)
+ {
+ URL vfsUrl = new URL("vfsmemory://" + host + "/" + getResourcePath(cc.getName()));
+ MemoryFileFactory.putFile(vfsUrl, cc.toBytecode());
+ return;
+ }
+ }
+
+ static void postInstallCleanup()
+ {
+ // TODO: symmetry not 100% assured here
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl instanceof JavassistAOPClassLoader)
+ Thread.currentThread().setContextClassLoader(cl.getParent());
+ }
+
+ private static String getResourcePath(String name)
+ {
+ return name.replace(".", "/") + ".class";
+ }
+
+ private static String getVFSMemoryHost(DeploymentUnit unit) throws Exception
+ {
+ if (unit instanceof AbstractVFSDeploymentUnit)
+ {
+ List<VirtualFile> classPath = ((AbstractVFSDeploymentUnit) unit).getClassPath();
+ for (VirtualFile vf : classPath)
+ {
+ URL url = vf.toURL();
+ if ("vfsmemory".equals(url.getProtocol()))
+ {
+ return url.getHost();
+ }
+ }
+ return getVFSMemoryHost(unit.getParent());
+ }
+
+ return null;
+ }
+
+ private static boolean isMethodOverridable(CtMethod m)
+ {
+ return (m.getModifiers() & Modifier.FINAL) == 0
+ && !"clone".equals(m.getName())
+ && !"finalize".equals(m.getName());
+ }
+
+ private static void zeroArgConstructorCheck(CtClass pc, Object c)
+ throws NotFoundException
+ {
+ CtConstructor[] ctors = pc.getConstructors();
+ boolean found = false;
+ for (CtConstructor cons : ctors)
+ {
+ if (cons.getParameterTypes().length == 0)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ throw new RuntimeException("Class can not be AOP instrumented - it has no zero-arguments public constructor: " + c.getClass());
+ }
+}
\ No newline at end of file
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/InterceptMC.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/InterceptMC.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/InterceptMC.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,24 @@
+package org.exoplatform.container.mc;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marks Gatein MC enabled component.
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ * @author <a href="mailto:ales.justin@redhat.com">Ales Justin</a>
+ */
+(a)Retention(RetentionPolicy.RUNTIME)
+(a)Target({ElementType.TYPE})
+public @interface InterceptMC
+{
+ /**
+ * Do we enable AOP for this component.
+ *
+ * @return true if we should enable AOP, false otherwise
+ */
+ boolean enableAOP() default false;
+}
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/JavassistAOPClassLoader.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/JavassistAOPClassLoader.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/JavassistAOPClassLoader.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,61 @@
+package org.exoplatform.container.mc;
+
+import javassist.Loader;
+import javassist.ClassPool;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class JavassistAOPClassLoader extends Loader
+{
+ public JavassistAOPClassLoader()
+ {
+ }
+
+ public JavassistAOPClassLoader(ClassPool cp)
+ {
+ super(cp);
+ }
+
+ public JavassistAOPClassLoader(ClassLoader parent, ClassPool cp)
+ {
+ super(parent, cp);
+ }
+
+ @Override
+ protected Class loadClassByDelegation(String name) throws ClassNotFoundException
+ {
+ if (name.startsWith("org.jboss.aop."))
+ return delegateToParent(name);
+
+ return super.loadClassByDelegation(name);
+ }
+
+ protected Class loadClass(String name, boolean resolve)
+ throws ClassFormatError, ClassNotFoundException
+ {
+ name = name.intern();
+ synchronized (name)
+ {
+ Class c = findLoadedClass(name);
+ if (c == null)
+ {
+ try
+ {
+ c = delegateToParent(name);
+ }
+ catch (ClassNotFoundException ignored)
+ {
+ }
+ }
+
+ if (c == null)
+ c = findClass(name);
+
+ if (resolve)
+ resolveClass(c);
+
+ return c;
+ }
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentAdapter.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentAdapter.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentAdapter.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,125 @@
+package org.exoplatform.container.mc;
+
+import java.lang.ref.WeakReference;
+
+import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
+import org.jboss.dependency.plugins.helpers.StatelessController;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.plugins.dependency.AbstractKernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.picocontainer.ComponentAdapter;
+import org.picocontainer.PicoContainer;
+import org.picocontainer.PicoInitializationException;
+import org.picocontainer.PicoIntrospectionException;
+import org.picocontainer.PicoVisitor;
+
+/**
+ * @author <a href="mailto:ajustin@redhat.com">Ales Justin</a>
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class MCComponentAdapter implements ComponentAdapter
+{
+ private KernelController controller;
+ private ComponentAdapter delegate;
+ private InterceptMC interceptMC;
+ private WeakReference<Object> lastComponentInstance;
+
+ public MCComponentAdapter(KernelController controller, ComponentAdapter delegate, InterceptMC interceptMC)
+ {
+ if (controller == null)
+ throw new IllegalArgumentException("Null controller");
+ if (delegate == null)
+ throw new IllegalArgumentException("Null delegate");
+
+ if (controller instanceof StatelessController)
+ throw new IllegalArgumentException("controller is instanceof StatelessController");
+
+ this.controller = controller;
+ this.delegate = delegate;
+ this.interceptMC = interceptMC;
+ }
+
+ public Object getComponentKey()
+ {
+ return delegate.getComponentKey();
+ }
+
+ public Class getComponentImplementation()
+ {
+ return delegate.getComponentImplementation();
+ }
+
+ public Object getComponentInstance(PicoContainer container) throws PicoInitializationException, PicoIntrospectionException
+ {
+ Object target = getTargetFromRef();
+ if (target != null)
+ return target;
+
+ try
+ {
+ String key = delegate.getComponentKey().toString();
+ Object instance = delegate.getComponentInstance(container);
+ BeanMetaDataBuilder builder;
+ if (interceptMC != null && interceptMC.enableAOP())
+ {
+ MCComponentInfo mcinfo = GenericWrapperUtil.generateAndInstallWrapper(instance);
+ builder = BeanMetaDataBuilder.createBuilder(key, mcinfo.getWrapperClassName());
+ builder.addConstructorParameter(Object.class.getName(), instance);
+ }
+ else
+ {
+ builder = BeanMetaDataBuilder.createBuilder(key, instance.getClass().getName());
+ builder.setConstructorValue(instance);
+ }
+ builder.ignoreCreate();
+ builder.ignoreStart();
+ builder.ignoreStop();
+ builder.ignoreDestroy();
+
+ KernelControllerContext ctx = new AbstractKernelControllerContext(null, builder.getBeanMetaData(), null);
+ try
+ {
+ StatelessController ctrl = new StatelessController(controller);
+ ctrl.install(ctx);
+ if (ctx.getError() != null)
+ throw ctx.getError();
+ if (ctrl.getStates().isBeforeState(ctx.getState(), ControllerState.INSTALLED))
+ throw new IllegalArgumentException("Missing some dependency: " + ctx.getDependencyInfo().getUnresolvedDependencies(null));
+
+ target = ctx.getTarget();
+ lastComponentInstance = new WeakReference<Object>(target);
+ return target;
+ }
+ finally
+ {
+ GenericWrapperUtil.postInstallCleanup();
+ }
+ }
+ catch (Throwable ex)
+ {
+ throw new RuntimeException("Failed to perform MC interception on component: " + delegate.getComponentImplementation(), ex);
+ }
+ }
+
+ public void verify(PicoContainer container) throws PicoIntrospectionException
+ {
+ delegate.verify(container);
+ }
+
+ public void accept(PicoVisitor visitor)
+ {
+ delegate.accept(visitor);
+ }
+
+ private Object getTargetFromRef()
+ {
+ if (lastComponentInstance == null)
+ return null;
+
+ Object target = lastComponentInstance.get();
+ if (target == null)
+ return null;
+ return target;
+ }
+}
\ No newline at end of file
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentInfo.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentInfo.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCComponentInfo.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,26 @@
+package org.exoplatform.container.mc;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class MCComponentInfo
+{
+ private String name;
+ private ClassLoader classLoader;
+
+ public MCComponentInfo(String wrapperClassName, ClassLoader classLoader)
+ {
+ this.name = wrapperClassName;
+ this.classLoader = classLoader;
+ }
+
+ public String getWrapperClassName()
+ {
+ return name;
+ }
+
+ public ClassLoader getClassLoader()
+ {
+ return classLoader;
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCIntegration.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCIntegration.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCIntegration.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,95 @@
+package org.exoplatform.container.mc;
+
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.plugins.dependency.AbstractKernelController;
+import org.jboss.kernel.plugins.deployment.xml.BasicXMLDeployer;
+import org.jboss.kernel.spi.deployment.KernelDeployment;
+import org.jboss.mc.common.ThreadLocalUtils;
+import org.picocontainer.ComponentAdapter;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class MCIntegration
+{
+ private static Log log = ExoLogger.getLogger(MCIntegration.class);
+ private static MCIntegration mcint;
+
+ private AbstractKernelController rootController;
+ private List<KernelDeployment> deployments = new LinkedList<KernelDeployment>();
+
+ public synchronized static MCIntegration getInstance()
+ {
+ if (mcint == null)
+ mcint = new MCIntegration();
+ return mcint;
+ }
+
+ public synchronized AbstractKernelController getRootController()
+ {
+ if (rootController == null)
+ {
+ Kernel kernel = ThreadLocalUtils.getKernel();
+ if (kernel != null)
+ {
+ rootController = (AbstractKernelController) kernel.getController();
+ }
+ else
+ {
+ log.warn("GateIn - MC integration not available");
+ return null;
+ }
+ processDeployments();
+ }
+ return rootController;
+ }
+
+ private void processDeployments()
+ {
+ // Now deploy any AOP configuration - instantiates lifecycle callbacks
+ BasicXMLDeployer deployer = new BasicXMLDeployer(rootController.getKernel());
+ Enumeration<URL> urls = null;
+ try
+ {
+ urls = Thread.currentThread().getContextClassLoader().getResources("conf/mc-beans.xml");
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException("Failed to load resources: conf/mc-beans.xml", e);
+ }
+
+ while (urls.hasMoreElements())
+ {
+ URL confUrl = urls.nextElement();
+ try
+ {
+ deployments.add(deployer.deploy(confUrl));
+ }
+ catch (Throwable ex)
+ {
+ throw new RuntimeException("Failed to deploy: " + confUrl, ex);
+ }
+ }
+
+ if (deployments.size() == 0)
+ {
+ log.debug("No conf/mc-beans.xml found. MC integration disabled.");
+ }
+ }
+
+ public ComponentAdapter getMCAdapter(ComponentAdapter adapter, InterceptMC interceptAnnotation)
+ {
+ AbstractKernelController controller = getRootController();
+ if (controller != null)
+ adapter = new MCComponentAdapter(controller, adapter, interceptAnnotation);
+ return adapter;
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCIntegrationContainer.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCIntegrationContainer.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCIntegrationContainer.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,95 @@
+package org.exoplatform.container.mc;
+
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.picocontainer.ComponentAdapter;
+import org.picocontainer.PicoContainer;
+import org.picocontainer.defaults.ComponentAdapterFactory;
+import org.picocontainer.defaults.DefaultPicoContainer;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class MCIntegrationContainer extends DefaultPicoContainer
+{
+ private static Log log = ExoLogger.getLogger(MCIntegrationContainer.class);
+
+ public MCIntegrationContainer(ComponentAdapterFactory componentAdapterFactory, PicoContainer parent)
+ {
+ super(componentAdapterFactory, parent);
+ }
+
+ public MCIntegrationContainer(PicoContainer parent)
+ {
+ super(parent);
+ }
+
+ public MCIntegrationContainer(ComponentAdapterFactory componentAdapterFactory)
+ {
+ super(componentAdapterFactory);
+ }
+
+ public MCIntegrationContainer()
+ {
+ }
+
+ public ComponentAdapter registerComponent(ComponentAdapter componentAdapter)
+ {
+ Class<?> clazz = componentAdapter.getComponentImplementation();
+ InterceptMC interceptAnnotation = clazz.getAnnotation(InterceptMC.class);
+
+ ComponentAdapter adapter = componentAdapter;
+ if (interceptAnnotation != null)
+ {
+ if (hasMCKernel(componentAdapter))
+ {
+ adapter = MCIntegration.getInstance().getMCAdapter(componentAdapter, interceptAnnotation);
+ }
+ }
+ super.registerComponent(adapter);
+ return adapter;
+ }
+
+ public static boolean hasMCKernel(ComponentAdapter componentAdapter)
+ {
+ try
+ {
+ Class tlu = null;
+ String name = "org.jboss.mc.common.ThreadLocalUtils";
+ try
+ {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl != null)
+ tlu = cl.loadClass(name);
+ }
+ catch (ClassNotFoundException ignored)
+ {
+ tlu = Class.forName(name);
+ }
+
+ Method m = tlu.getMethod("getKernel");
+ Object ret = m.invoke(null);
+ return ret != null;
+ }
+ catch (ClassNotFoundException ignored)
+ {
+ log.warn("@InterceptMC not supported in this environment (component: " + componentAdapter.getComponentKey() + ") - necessary classes are missing: ", ignored);
+ return false;
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (InvocationTargetException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCInterceptProxy.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCInterceptProxy.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/MCInterceptProxy.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,16 @@
+package org.exoplatform.container.mc;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class MCInterceptProxy
+{
+ public static final String DELEGATE = "__delegate";
+ private Object __delegate;
+
+ public MCInterceptProxy(Object delegate)
+ {
+ this.__delegate = delegate;
+ System.out.println("MCInterceptProxy<init> - CL: " + delegate.getClass().getClassLoader());
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/RootContainerVDFDecoratorInjector.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/RootContainerVDFDecoratorInjector.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/RootContainerVDFDecoratorInjector.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,71 @@
+package org.exoplatform.container.mc;
+
+import java.security.ProtectionDomain;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtMethod;
+import javassist.LoaderClassPath;
+import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants;
+import org.jboss.util.loading.Translator;
+import org.jboss.mc.common.ThreadLocalUtils;
+
+public class RootContainerVDFDecoratorInjector implements Translator
+{
+ @SuppressWarnings({"UnusedDeclaration"})
+ private Kernel kernel;
+ private ClassLoaderSystem system;
+
+ private static final String RC_CLASSNAME = "org.exoplatform.container.RootContainer";
+ private boolean found;
+
+ public void start()
+ {
+ system.addTranslator(this);
+ }
+
+ public void stop()
+ {
+ system.removeTranslator(this);
+ }
+
+ protected byte[] decorate() throws Exception
+ {
+ ClassPool pool = ClassPool.getDefault();
+ pool.insertClassPath(new LoaderClassPath(Thread.currentThread().getContextClassLoader()));
+ CtClass cc = pool.get(RC_CLASSNAME);
+ CtMethod m = cc.getDeclaredMethod("getInstance");
+ m.insertBefore(ThreadLocalUtils.class.getName() + ".putKernel(kernel);\ntry {\n");
+ m.insertAfter("\n } finally { \n" + ThreadLocalUtils.class.getName() + ".removeKernel();\n }");
+ return cc.toBytecode();
+ }
+
+ public byte[] transform(ClassLoader classLoader, String s, Class<?> aClass, ProtectionDomain protectionDomain, byte[] bytes) throws Exception
+ {
+ if (found == false && RC_CLASSNAME.equals(s))
+ {
+ found = true;
+ return decorate();
+ }
+ return bytes;
+ }
+
+ public void unregisterClassLoader(ClassLoader classLoader)
+ {
+ }
+
+ @Inject(bean = KernelConstants.KERNEL_NAME)
+ public void setKernel(Kernel kernel)
+ {
+ this.kernel = kernel;
+ }
+
+ @Inject
+ public void setSystem(ClassLoaderSystem system)
+ {
+ this.system = system;
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/WrapperMethodComposer.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/WrapperMethodComposer.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/mc/WrapperMethodComposer.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,126 @@
+package org.exoplatform.container.mc;
+
+import javassist.CtClass;
+import javassist.CtMethod;
+import javassist.NotFoundException;
+import javassist.bytecode.AccessFlag;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class WrapperMethodComposer
+{
+ private String delegate;
+ private String type;
+
+ public WrapperMethodComposer(String delegateFldName, String type)
+ {
+ delegate = delegateFldName;
+ this.type = type;
+ }
+
+ public String composeMethod(CtMethod method) throws NotFoundException
+ {
+ StringBuilder sb = new StringBuilder();
+
+ String next = addModifiers(method.getModifiers());
+ sb.append(next);
+ if (next.length() > 0)
+ sb.append(" ");
+
+ CtClass ret = method.getReturnType();
+ next = addReturnType(ret);
+ sb.append(next).append(" ");
+
+ sb.append(method.getName()).append("(");
+ next = addParams(method.getParameterTypes());
+ sb.append(next);
+ sb.append(") ");
+
+ next = addExceptions(method.getExceptionTypes());
+ sb.append(next);
+ if (next.length() > 0)
+ sb.append(" ");
+
+ sb.append("{ ");
+ sb.append(delegateCall(method.getName(), method.getParameterTypes(), method.getReturnType()));
+ sb.append("}");
+
+ return sb.toString();
+ }
+
+ private String delegateCall(String name, CtClass[] parameterTypes, CtClass returnType)
+ {
+ StringBuilder sb = new StringBuilder();
+ if (returnType != null)
+ sb.append("return ");
+ sb.append("((").append(type).append(")");
+ sb.append(delegate).append(")").append(".").append(name).append("(");
+ for (int i = 0; i < parameterTypes.length; i++)
+ {
+ if (i > 0)
+ sb.append(",");
+ sb.append("a").append(i);
+ }
+ sb.append(");");
+
+ if (returnType == null)
+ sb.append("return;");
+
+ return sb.toString();
+ }
+
+
+ private String addParams(CtClass[] parameterTypes)
+ {
+ if (parameterTypes == null || parameterTypes.length == 0)
+ return "";
+
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < parameterTypes.length; i++)
+ {
+ if (i > 0)
+ sb.append(",");
+ sb.append(parameterTypes[i].getName()).append(" a").append(i);
+ }
+ return sb.toString();
+ }
+
+ private String addExceptions(CtClass[] exceptionTypes)
+ {
+ StringBuilder ret = new StringBuilder();
+ if (exceptionTypes == null || exceptionTypes.length == 0)
+ return "";
+
+ ret.append("throws ");
+ for (int i = 0; i < exceptionTypes.length; i++)
+ {
+ if (i > 0)
+ ret.append(",");
+ ret.append(exceptionTypes[i].getName());
+ }
+ return ret.toString();
+ }
+
+ private String addReturnType(CtClass ret)
+ {
+ if (ret == null)
+ return "void";
+ else
+ return ret.getName();
+ }
+
+ private String addModifiers(int modifiers)
+ {
+ if (AccessFlag.isPackage(modifiers))
+ return "";
+ else if (AccessFlag.isPrivate(modifiers))
+ return "private";
+ else if (AccessFlag.isPublic(modifiers))
+ return "public";
+ else if (AccessFlag.isProtected(modifiers))
+ return "protected";
+ else
+ throw new RuntimeException("Invalid modifiers: " + modifiers);
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/util/EnvSpecific.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/util/EnvSpecific.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/util/EnvSpecific.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,31 @@
+package org.exoplatform.container.util;
+
+import javax.servlet.ServletContext;
+
+/**
+ * This class makes env specific thread context inits when GateIn runs inside JBossAS or MC
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class EnvSpecific {
+
+ /**
+ * Perform environment specific thread context initialization
+ *
+ * @param ctx ServletContext
+ */
+ public static void initThreadEnv(ServletContext ctx) {
+ if (JBossEnv.isAvailable(ctx))
+ JBossEnv.initThreadEnv(ctx);
+ }
+
+ /**
+ * Perform environment specific thread context cleanup
+ *
+ * @param ctx ServletContext
+ */
+ public static void cleanupThreadEnv(ServletContext ctx) {
+ if (JBossEnv.isAvailable(ctx))
+ JBossEnv.cleanupThreadEnv(ctx);
+ }
+}
\ No newline at end of file
Added: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/util/JBossEnv.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/util/JBossEnv.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/util/JBossEnv.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,45 @@
+package org.exoplatform.container.util;
+
+import javax.servlet.ServletContext;
+
+import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants;
+import org.jboss.mc.servlet.vdf.api.VDFThreadLocalUtils;
+
+/**
+ * This class makes env specific thread context inits when GateIn runs inside JBossAS or MC
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class JBossEnv
+{
+ /**
+ * Check if MC Kernel is available
+ *
+ * @param ctx ServletContext
+ * @return true if we're running within JBoss environment
+ */
+ public static boolean isAvailable(ServletContext ctx)
+ {
+ return ctx.getAttribute(KernelConstants.KERNEL_NAME) != null;
+ }
+
+ /**
+ * Use VDF to grab relevant information from ServletContext and store it in thread context
+ *
+ * @param ctx ServletContext
+ */
+ public static void initThreadEnv(ServletContext ctx)
+ {
+ org.jboss.mc.servlet.vdf.api.VDFThreadLocalUtils.init(ctx);
+ }
+
+ /**
+ * Perform thread context cleanup
+ *
+ * @param ctx ServletContext
+ */
+ public static void cleanupThreadEnv(ServletContext ctx)
+ {
+ org.jboss.mc.servlet.vdf.api.VDFThreadLocalUtils.reset();
+ }
+}
\ No newline at end of file
Modified: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/web/PortalContainerConfigOwner.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/web/PortalContainerConfigOwner.java 2009-11-13 10:51:33 UTC (rev 633)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/web/PortalContainerConfigOwner.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -19,6 +19,7 @@
import org.exoplatform.container.PortalContainer;
import org.exoplatform.container.RootContainer.PortalContainerPostInitTask;
import org.exoplatform.container.RootContainer.PortalContainerPreInitTask;
+import org.exoplatform.container.util.EnvSpecific;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
@@ -46,7 +47,17 @@
portalContainer.registerContext(context);
}
};
- PortalContainer.addInitTask(event.getServletContext(), task);
+
+ ServletContext ctx = event.getServletContext();
+ try
+ {
+ EnvSpecific.initThreadEnv(ctx);
+ PortalContainer.addInitTask(ctx, task);
+ }
+ finally
+ {
+ EnvSpecific.cleanupThreadEnv(ctx);
+ }
}
public void contextDestroyed(ServletContextEvent event)
Modified: kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/web/PortalContainerCreator.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/web/PortalContainerCreator.java 2009-11-13 10:51:33 UTC (rev 633)
+++ kernel/branches/mc-int-branch/exo.kernel.container/src/main/java/org/exoplatform/container/web/PortalContainerCreator.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -17,7 +17,9 @@
package org.exoplatform.container.web;
import org.exoplatform.container.RootContainer;
+import org.exoplatform.container.util.EnvSpecific;
+import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
@@ -45,7 +47,16 @@
*/
public void contextInitialized(ServletContextEvent event)
{
- RootContainer rootContainer = RootContainer.getInstance();
- rootContainer.createPortalContainers();
+ ServletContext ctx = event.getServletContext();
+ try
+ {
+ EnvSpecific.initThreadEnv(ctx);
+ RootContainer rootContainer = RootContainer.getInstance();
+ rootContainer.createPortalContainers();
+ }
+ finally
+ {
+ EnvSpecific.cleanupThreadEnv(ctx);
+ }
}
}
Added: kernel/branches/mc-int-branch/exo.kernel.demos/custom-pojo/pom.xml
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.demos/custom-pojo/pom.xml (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.demos/custom-pojo/pom.xml 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,16 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.exoplatform.kernel.demos</groupId>
+ <artifactId>exo.kernel.demos</artifactId>
+ <version>2.2.0-Beta03-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>exo.mc-int.custom-pojo</artifactId>
+
+ <name>eXo Kernel Demo - Custom POJO</name>
+ <description>MC Integration Demo - MC Injection of Custom POJO</description>
+
+</project>
Added: kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/pom.xml
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/pom.xml (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/pom.xml 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,27 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.exoplatform.kernel.demos</groupId>
+ <artifactId>exo.kernel.demos</artifactId>
+ <version>2.2.0-Beta03-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>exo.mc-int.mc-injection</artifactId>
+
+ <name>eXo Kernel Demo - MC Injection</name>
+ <description>MC Integration Demo - MC Injection</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.exoplatform.kernel</groupId>
+ <artifactId>exo.kernel.container</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
Added: kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectedBean.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectedBean.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectedBean.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,31 @@
+package org.exoplatform.kernel.demos.mc;
+
+import org.jboss.logging.Logger;
+
+/**
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+public class InjectedBean
+{
+ private static final Logger log = Logger.getLogger(InjectedBean.class);
+
+ //static
+ //{
+ // System.out.println("InjectedBean class loaded !!!");
+ //}
+
+ public InjectedBean()
+ {
+ log.info("InjectedBean instantiated :: " + this);
+ }
+
+ public String getSomeString()
+ {
+ return "[This is some property value]";
+ }
+
+ public void start()
+ {
+ log.info("Method start() called on InjectedBean");
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectingBean.java
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectingBean.java (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/java/org/exoplatform/kernel/demos/mc/InjectingBean.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,102 @@
+package org.exoplatform.kernel.demos.mc;
+
+import org.exoplatform.container.mc.InterceptMC;
+import org.jboss.beans.metadata.api.annotations.EntryValue;
+import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.beans.metadata.api.annotations.MapValue;
+import org.jboss.beans.metadata.api.annotations.StringValue;
+import org.jboss.beans.metadata.api.annotations.Value;
+import org.jboss.kernel.plugins.bootstrap.basic.KernelConstants;
+import org.jboss.kernel.spi.config.KernelConfigurator;
+import org.jboss.logging.Logger;
+
+import java.util.Map;
+
+/**
+ * If we want our class to be instantiated at deploy time,
+ * it has to implement org.picocontainer.Startable, otherwise it will only
+ * be registered, but not instantiated. MC integration takes place
+ * at instantiation time.
+ *
+ * @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
+ */
+@InterceptMC
+public class InjectingBean implements org.picocontainer.Startable
+{
+ private static final Logger log = Logger.getLogger(InjectingBean.class);
+
+ private InjectedBean bean1;
+ private KernelConfigurator configurator;
+
+ @Inject(bean = "InjectedBean")
+ private InjectedBean injectedBean;
+
+
+ public InjectingBean()
+ {
+ log.info("Injecting bean instantiated");
+ }
+
+ @Inject
+ public void setBean(InjectedBean bean)
+ {
+ this.bean1 = bean;
+ log.info("Received InjectedBean: " + bean);
+ }
+
+ @Inject(bean = KernelConstants.KERNEL_CONFIGURATOR_NAME)
+ public void setConfigurator(KernelConfigurator configurator)
+ {
+ this.configurator = configurator;
+ log.info("InjectingBean Received KernelConfigurator: " + configurator);
+ }
+
+ @MapValue(
+ value = {
+ @EntryValue(
+ key = @Value(type = Class.class, string = @StringValue(value = "org.jboss.dependency.spi.Controller", type = Class.class)),
+ value = @Value(inject = @Inject(bean = KernelConstants.KERNEL_CONTROLLER_NAME))
+ ),
+ @EntryValue(
+ key = @Value(type = Class.class, string = @StringValue(value = "org.jboss.kernel.Kernel", type = Class.class)),
+ value = @Value(inject = @Inject(bean = KernelConstants.KERNEL_NAME))
+ ),
+ @EntryValue(
+ key = @Value(type = Class.class, string = @StringValue(value = "org.jboss.kernel.spi.dependency.KernelController", type = Class.class)),
+ value = @Value(inject = @Inject(bean = KernelConstants.KERNEL_CONTROLLER_NAME))
+ ),
+ @EntryValue(
+ key = @Value(type = Class.class, string = @StringValue(value = "org.jboss.kernel.spi.registry.KernelBus", type = Class.class)),
+ value = @Value(inject = @Inject(bean = KernelConstants.KERNEL_BUS_NAME))
+ ),
+ @EntryValue(
+ key = @Value(type = Class.class, string = @StringValue(value = "org.jboss.kernel.spi.registry.KernelRegistry", type = Class.class)),
+ value = @Value(inject = @Inject(bean = KernelConstants.KERNEL_REGISTRY_NAME))
+ ),
+ @EntryValue(
+ key = @Value(type = Class.class, string = @StringValue(value = "org.jboss.kernel.spi.config.KernelConfigurator", type = Class.class)),
+ value = @Value(inject = @Inject(bean = KernelConstants.KERNEL_CONFIGURATOR_NAME))
+ )
+ }
+ )
+ public void setBindings(Map<Class<?>, Object> bindings)
+ {
+ log.info("Received a map with bindings: " + bindings);
+ }
+
+ @Inject(bean = "InjectedBean", property = "someString")
+ public void setSomeStringProperty(String value)
+ {
+ log.info("Received SomeStringProperty value: " + value);
+ }
+
+ public void start()
+ {
+ log.warn("start() called (injectedBean is set to: " + injectedBean + ")");
+ }
+
+ public void stop()
+ {
+ log.info("stop() called");
+ }
+}
Added: kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/META-INF/jboss-beans.xml
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/META-INF/jboss-beans.xml (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/META-INF/jboss-beans.xml 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,3 @@
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+ <bean name="InjectedBean" class="org.exoplatform.kernel.demos.mc.InjectedBean" />
+</deployment>
\ No newline at end of file
Added: kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/conf/configuration.xml
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/conf/configuration.xml (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.demos/mc-injection/src/main/resources/conf/configuration.xml 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<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>InjectingBean</key>
+ <type>org.exoplatform.kernel.demos.mc.InjectingBean</type>
+ </component>
+
+</configuration>
Added: kernel/branches/mc-int-branch/exo.kernel.demos/pom.xml
===================================================================
--- kernel/branches/mc-int-branch/exo.kernel.demos/pom.xml (rev 0)
+++ kernel/branches/mc-int-branch/exo.kernel.demos/pom.xml 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,21 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.exoplatform.kernel</groupId>
+ <artifactId>kernel-parent</artifactId>
+ <version>2.2.0-Beta03-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.exoplatform.kernel.demos</groupId>
+ <artifactId>exo.kernel.demos</artifactId>
+ <packaging>pom</packaging>
+
+ <name>eXo Kernel Demos</name>
+
+ <modules>
+ <module>mc-injection</module>
+ </modules>
+
+</project>
Added: kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/pom.xml
===================================================================
--- kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/pom.xml (rev 0)
+++ kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/pom.xml 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,58 @@
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.exoplatform.kernel</groupId>
+ <artifactId>kernel-parent</artifactId>
+ <version>2.2.0-Beta03-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>mc-kernel-extras</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+
+ <name>MC Kernel 2.2.0 Selected Classes</name>
+ <description>MC integration classes that aren't available in mc-kernel 2.0.6.GA</description>
+
+ <!--build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ <showDeprecation>true</showDeprecation>
+ <showWarnings>true</showWarnings>
+ <optimize>true</optimize>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.1</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar-no-fork</goal>
+ </goals>
+ </execution>
+ </executions>
+ <inherited>true</inherited>
+ <configuration>
+ <includePom>true</includePom>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build-->
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ </dependency>
+ </dependencies>
+</project>
Added: kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/jboss/dependency/plugins/helpers/StatelessController.java
===================================================================
--- kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/jboss/dependency/plugins/helpers/StatelessController.java (rev 0)
+++ kernel/branches/mc-int-branch/org.jboss.mc-kernel-extras/src/main/java/org/jboss/dependency/plugins/helpers/StatelessController.java 2009-11-13 11:16:31 UTC (rev 634)
@@ -0,0 +1,167 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* 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.jboss.dependency.plugins.helpers;
+
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.plugins.AbstractController;
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.event.KernelEvent;
+import org.jboss.kernel.spi.event.KernelEventFilter;
+import org.jboss.kernel.spi.event.KernelEventListener;
+
+import java.util.Set;
+
+/**
+ * Stateless controller.
+ *
+ * @author <a href="ales.justin(a)jboss.com">Ales Justin</a>
+ */
+public class StatelessController extends AbstractController implements KernelController
+{
+ private KernelController controller;
+
+ public StatelessController(KernelController controller)
+ {
+ if (controller == null)
+ throw new IllegalArgumentException("Null controller");
+
+ this.controller = controller;
+ for (ControllerState state : controller.getStates())
+ addState(state, null);
+ }
+
+ public void enableOnDemand(ControllerContext context) throws Throwable
+ {
+ // ignore
+ }
+
+ @Override
+ protected void registerControllerContext(ControllerContext context)
+ {
+ // do nothing
+ }
+
+ @Override
+ public void install(ControllerContext context) throws Throwable
+ {
+ super.install(context);
+ }
+
+ public ControllerContext uninstall(Object name)
+ {
+ return null;
+ }
+
+ public ControllerContext getContext(Object name, ControllerState state)
+ {
+ return controller.getContext(name, state);
+ }
+
+ public ControllerContext getInstalledContext(Object name)
+ {
+ return controller.getInstalledContext(name);
+ }
+
+ public boolean isShutdown()
+ {
+ return controller.isShutdown();
+ }
+
+ public void shutdown()
+ {
+ }
+
+ public Kernel getKernel()
+ {
+ return controller.getKernel();
+ }
+
+ public void setKernel(Kernel kernel) throws Throwable
+ {
+ controller.setKernel(kernel);
+ }
+
+ public KernelControllerContext install(BeanMetaData metaData) throws Throwable
+ {
+ return controller.install(metaData);
+ }
+
+ public KernelControllerContext install(BeanMetaData metaData, Object target) throws Throwable
+ {
+ return controller.install(metaData, target);
+ }
+
+ public void addSupplies(KernelControllerContext context)
+ {
+ controller.addSupplies(context);
+ }
+
+ public void removeSupplies(KernelControllerContext context)
+ {
+ controller.removeSupplies(context);
+ }
+
+ public Set<KernelControllerContext> getInstantiatedContexts(Class<?> clazz)
+ {
+ return controller.getInstantiatedContexts(clazz);
+ }
+
+ public Set<KernelControllerContext> getContexts(Class<?> clazz, ControllerState state)
+ {
+ return controller.getContexts(clazz, state);
+ }
+
+ public KernelControllerContext getContextByClass(Class<?> clazz)
+ {
+ return controller.getContextByClass(clazz);
+ }
+
+ public void addInstantiatedContext(KernelControllerContext context)
+ {
+ controller.addInstantiatedContext(context);
+ }
+
+ public void removeInstantiatedContext(KernelControllerContext context)
+ {
+ controller.removeInstantiatedContext(context);
+ }
+
+ public void registerListener(KernelEventListener listener, KernelEventFilter filter, Object handback) throws Throwable
+ {
+ controller.registerListener(listener, filter, handback);
+ }
+
+ public void unregisterListener(KernelEventListener listener, KernelEventFilter filter, Object handback) throws Throwable
+ {
+ controller.unregisterListener(listener, filter, handback);
+ }
+
+ public void fireKernelEvent(KernelEvent event)
+ {
+ controller.fireKernelEvent(event);
+ }
+}
\ No newline at end of file
Modified: kernel/branches/mc-int-branch/pom.xml
===================================================================
--- kernel/branches/mc-int-branch/pom.xml 2009-11-13 10:51:33 UTC (rev 633)
+++ kernel/branches/mc-int-branch/pom.xml 2009-11-13 11:16:31 UTC (rev 634)
@@ -38,6 +38,9 @@
<properties>
<exo.product.name>exo-kernel</exo.product.name>
<exo.product.specification>2.2</exo.product.specification>
+ <org.jboss.mc>2.0.6.GA</org.jboss.mc>
+ <org.jboss.mc-int>2.2.0-SNAPSHOT</org.jboss.mc-int>
+ <version.jboss.classloader>2.0.7.GA</version.jboss.classloader>
<forkMode>always</forkMode>
</properties>
@@ -54,6 +57,8 @@
<module>exo.kernel.component.remote</module>
<module>exo.kernel.component.cache</module>
<module>exo.kernel.component.command</module>
+ <module>exo.kernel.demos</module>
+ <module>org.jboss.mc-kernel-extras</module>
<module>packaging/module</module>
</modules>
@@ -85,6 +90,12 @@
</dependency>
<dependency>
+ <groupId>org.exoplatform.kernel</groupId>
+ <artifactId>mc-kernel-extras</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
<groupId>org.exoplatform.tool</groupId>
<artifactId>exo.tool.framework.junit</artifactId>
<version>1.2.0</version>
@@ -210,6 +221,43 @@
<artifactId>jta</artifactId>
<version>1.0.1B</version>
</dependency>
+
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-dependency</artifactId>
+ <version>${org.jboss.mc}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-kernel</artifactId>
+ <version>${org.jboss.mc}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.microcontainer</groupId>
+ <artifactId>jboss-aop-mc-int</artifactId>
+ <version>${org.jboss.mc}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.mc-int</groupId>
+ <artifactId>jboss-mc-int-common</artifactId>
+ <version>${org.jboss.mc-int}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.mc-int</groupId>
+ <artifactId>jboss-mc-int-servlet</artifactId>
+ <version>${org.jboss.mc-int}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.cl</groupId>
+ <artifactId>jboss-classloader</artifactId>
+ <version>${version.jboss.classloader}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
16 years, 8 months
exo-jcr SVN: r633 - jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2009-11-13 05:51:33 -0500 (Fri, 13 Nov 2009)
New Revision: 633
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
Log:
EXOJCR-201 : The JDBCCacheLoaderTest was changed.
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 10:20:13 UTC (rev 632)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 10:51:33 UTC (rev 633)
@@ -523,8 +523,25 @@
{
// prepare
+ WorkspaceStorageConnection conn = persistentContainer.openConnection();
+ String nodeId = IdGenerator.generate();
+ QPath nodePath = QPath.parse("[]:1[]node:1");
+ addDbNode(conn, nodePath, nodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
+ conn.commit();
+
+ conn = persistentContainer.openConnection();
+
+ NodeData nodeData =
+ new TransientNodeData(nodePath, nodeId, 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 2,
+ Constants.ROOT_UUID, new AccessControlList());
+
+ List<Modification> modifications = new ArrayList<Modification>();
+
+// modifications.addAll(updateNode(nodeData));
+
// tests it
+
}
@@ -532,9 +549,34 @@
{
// prepare
+ WorkspaceStorageConnection conn = persistentContainer.openConnection();
+ String nodeId = IdGenerator.generate();
+ QPath nodePath = QPath.parse("[]:1[]node:1");
+ addDbNode(conn, nodePath, nodeId, Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
+
+ TransientPropertyData propData = addDbProperty(conn, nodePath, nodeId, InternalQName.parse("[]prop"), "JCR DATA VALUE [base]", false);
+
+ conn.commit();
+
+ // create update property
+ TransientPropertyData updatePropData = new TransientPropertyData(QPath.makeChildPath(nodePath, InternalQName.parse("[]prop")), propData.getIdentifier(), 1, 1, nodeId, false);
+ updatePropData.setValue(new TransientValueData("JCR DATA VALUE [updated]"));
+
+ List<Modification> modifications = new ArrayList<Modification>();
+
+ modifications.addAll(updateProperty(updatePropData));
+
+ loader.put(modifications);
+
// tests it
-
+ conn = persistentContainer.openConnection();
+
+ PropertyData destPropData = (PropertyData) conn.getItemData(propData.getIdentifier());
+
+ assertNotNull(destPropData);
+ ValueData valueData = destPropData.getValues().get(0);
+ assertEquals("JCR DATA VALUE [updated]", new String(valueData.getAsByteArray(), "UTF-8"));
}
public void testRenameNode() throws Exception
16 years, 8 months
exo-jcr SVN: r632 - jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2009-11-13 05:20:13 -0500 (Fri, 13 Nov 2009)
New Revision: 632
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
Log:
EXOJCR-201 : The JDBCCacheLoaderTest was changed.
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 10:03:37 UTC (rev 631)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoaderTest.java 2009-11-13 10:20:13 UTC (rev 632)
@@ -671,9 +671,31 @@
{
// prepare
+ WorkspaceStorageConnection conn = persistentContainer.openConnection();
+ QPath baseNodePath = QPath.makeChildPath(Constants.ROOT_PATH, InternalQName.parse("[]baseNode"));
+ String baseNodeId = IdGenerator.generate();
+ addDbNode(conn, baseNodePath, baseNodeId,Constants.NT_UNSTRUCTURED, Constants.ROOT_UUID);
+
+ TransientPropertyData propData1 = addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop1"), "JCR DATA VALUE 1", false);
+ TransientPropertyData propData2 = addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop2"), "JCR DATA VALUE 2", false);
+ TransientPropertyData propData3 = addDbProperty(conn, baseNodePath, baseNodeId, InternalQName.parse("[]prop3"), "JCR DATA VALUE 3", false);
+
+ conn.commit();
+
// tests it
-
+ Map<Object, Object> attrebutes = loader.get(Fqn.fromElements(JBossCacheStorage.NODES, baseNodeId));
+
+ assertNotNull(attrebutes);
+
+ assertTrue(attrebutes.containsKey(Constants.JCR_PRIMARYTYPE.getAsString()));
+ assertTrue(attrebutes.containsKey("[]prop1"));
+ assertTrue(attrebutes.containsKey("[]prop2"));
+ assertTrue(attrebutes.containsKey("[]prop3"));
+
+ assertEquals(propData1.getIdentifier(), attrebutes.get("[]prop1"));
+ assertEquals(propData2.getIdentifier(), attrebutes.get("[]prop2"));
+ assertEquals(propData3.getIdentifier(), attrebutes.get("[]prop3"));
}
public void testGetReferences() throws Exception
16 years, 8 months
exo-jcr SVN: r631 - jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache.
by do-not-reply@jboss.org
Author: sergiykarpenko
Date: 2009-11-13 05:03:37 -0500 (Fri, 13 Nov 2009)
New Revision: 631
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderRuntimeTest.java
Log:
EXOJCR-202: IndexerCacheLoaderRuntimeTest test updated
Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderRuntimeTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderRuntimeTest.java 2009-11-13 10:00:05 UTC (rev 630)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderRuntimeTest.java 2009-11-13 10:03:37 UTC (rev 631)
@@ -236,12 +236,6 @@
modifications.addAll(removeNode(nd));
conn.commit();
- // NodeData data =
- // new TransientNodeData(node1path, node1id, 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 0, null,
- // new AccessControlList());
- // conn.delete(data);
- //conn.commit();
-
// check removing
conn = persistentContainer.openConnection();
nd = (NodeData)conn.getItemData(node1id);
@@ -255,9 +249,67 @@
searcher = new IndexSearcher(reader);
hit = searcher.search(query);
assertEquals(0, hit.length());
-
}
+ // public void testRenameNode() throws Exception
+ // {
+ // List<Modification> modifications = new ArrayList<Modification>();
+ //
+ // // prepare add node to storage
+ // WorkspaceStorageConnection conn = persistentContainer.openConnection();
+ //
+ // String node1id = IdGenerator.generate();
+ // QPath node1path = QPath.makeChildPath(Constants.ROOT_PATH, "[]node:1");
+ //
+ // // add node (/) with jcr:primaryType
+ // NodeData nodeData =
+ // new TransientNodeData(node1path, node1id, 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 0,
+ // Constants.ROOT_UUID, new AccessControlList());
+ // conn.add(nodeData);
+ // modifications.addAll(this.addNode(nodeData));
+ //
+ // // add property (/jcr:primaryType)
+ // TransientPropertyData propData =
+ // createProperty(node1path, node1id, Constants.JCR_PRIMARYTYPE, Constants.NT_UNSTRUCTURED, false);
+ // conn.add(propData);
+ // modifications.addAll(this.addProperty(propData));
+ //
+ // conn.commit();
+ // loader.put(modifications);
+ //
+ // // check do we really have node and its property
+ // conn = persistentContainer.openConnection();
+ // NodeData nd = (NodeData)conn.getItemData(node1id);
+ // assertNotNull(nd);
+ // assertEquals("[]:1[]node:1", nd.getQPath().getAsString());
+ //
+ // PropertyData pd = (PropertyData)conn.getItemData(propData.getIdentifier());
+ // assertNotNull(pd);
+ // assertEquals(propData.getQPath().getAsString(), pd.getQPath().getAsString());
+ //
+ // // find node by search engine
+ // SearchIndex index = ((SearchIndex)manager.getHandler());
+ // IndexReader reader = index.getIndexReader();
+ //
+ // IndexSearcher searcher = new IndexSearcher(reader);
+ //
+ // Query query = new TermQuery(new Term("_:UUID", node1id));
+ // Hits hit = searcher.search(query);
+ // assertEquals(1, hit.length());
+ //
+ // modifications.clear();
+ //
+ // conn = persistentContainer.openConnection();
+ //
+ // QPath newnode1path = QPath.makeChildPath(Constants.ROOT_PATH, "[]node:1");
+ // NodeData newnodeData =
+ // new TransientNodeData(newnode1path, node1id, 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 0,
+ // Constants.ROOT_UUID, new AccessControlList());
+ //
+ // conn.rename(newnodeData);
+ //
+ // }
+
public void testUpdateAddProperty() throws Exception
{
@@ -349,6 +401,194 @@
}
+ public void testUpdateRemoveProperty() throws Exception
+ {
+
+ List<Modification> modifications = new ArrayList<Modification>();
+
+ // prepare add node to storage
+ WorkspaceStorageConnection conn = persistentContainer.openConnection();
+
+ String node1id = IdGenerator.generate();
+ QPath node1path = QPath.makeChildPath(Constants.ROOT_PATH, "[]node:1");
+
+ // add node (/) with jcr:primaryType
+ NodeData nodeData =
+ new TransientNodeData(node1path, node1id, 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 0,
+ Constants.ROOT_UUID, new AccessControlList());
+ conn.add(nodeData);
+ modifications.addAll(this.addNode(nodeData));
+
+ // add property (/jcr:primaryType)
+ TransientPropertyData propData =
+ createProperty(node1path, node1id, Constants.JCR_PRIMARYTYPE, Constants.NT_UNSTRUCTURED, false);
+ conn.add(propData);
+ modifications.addAll(this.addProperty(propData));
+
+ // add additonal property
+ TransientPropertyData propData2 =
+ createProperty(node1path, node1id, new InternalQName(Constants.NS_DEFAULT_URI, "myProp2"), "JCR DATA VALUE",
+ false);
+ conn.add(propData2);
+ modifications.addAll(addProperty(propData2));
+
+ conn.commit();
+ loader.put(modifications);
+
+ // check do we really have node and its property
+ conn = persistentContainer.openConnection();
+ NodeData nd = (NodeData)conn.getItemData(node1id);
+ assertNotNull(nd);
+ assertEquals("[]:1[]node:1", nd.getQPath().getAsString());
+
+ PropertyData pd = (PropertyData)conn.getItemData(propData.getIdentifier());
+ assertNotNull(pd);
+ assertEquals(propData.getQPath().getAsString(), pd.getQPath().getAsString());
+
+ // find node by search engine
+ SearchIndex index = ((SearchIndex)manager.getHandler());
+ IndexReader reader = index.getIndexReader();
+
+ IndexSearcher searcher = new IndexSearcher(reader);
+
+ Query query = new TermQuery(new Term("_:UUID", node1id));
+ Hits hit = searcher.search(query);
+ assertEquals(1, hit.length());
+
+ query = new TermQuery(new Term("FULL:myProp2", "data"));
+ hit = searcher.search(query);
+ assertEquals(1, hit.length());
+
+ modifications.clear();
+
+ // remove property
+ conn = persistentContainer.openConnection();
+ conn.delete(propData2);
+ modifications.addAll(removeProperty(propData2));
+ conn.commit();
+
+ loader.put(modifications);
+
+ // tests it
+ WorkspaceStorageConnection connection = persistentContainer.openConnection();
+
+ PropertyData destPropData = (PropertyData)connection.getItemData(propData2.getIdentifier());
+
+ assertNull(destPropData);
+
+ reader = index.getIndexReader();
+
+ searcher = new IndexSearcher(reader);
+
+ query = new TermQuery(new Term("_:UUID", node1id));
+ hit = searcher.search(query);
+ assertEquals(1, hit.length());
+
+ query = new TermQuery(new Term("FULL:myProp2", "data"));
+ hit = searcher.search(query);
+ assertEquals(0, hit.length());
+
+ }
+
+ public void testUpdateProperty() throws Exception
+ {
+
+ List<Modification> modifications = new ArrayList<Modification>();
+
+ // prepare add node to storage
+ WorkspaceStorageConnection conn = persistentContainer.openConnection();
+
+ String node1id = IdGenerator.generate();
+ QPath node1path = QPath.makeChildPath(Constants.ROOT_PATH, "[]node:1");
+
+ // add node (/) with jcr:primaryType
+ NodeData nodeData =
+ new TransientNodeData(node1path, node1id, 1, Constants.NT_UNSTRUCTURED, new InternalQName[0], 0,
+ Constants.ROOT_UUID, new AccessControlList());
+ conn.add(nodeData);
+ modifications.addAll(this.addNode(nodeData));
+
+ // add property (/jcr:primaryType)
+ TransientPropertyData propData =
+ createProperty(node1path, node1id, Constants.JCR_PRIMARYTYPE, Constants.NT_UNSTRUCTURED, false);
+ conn.add(propData);
+ modifications.addAll(this.addProperty(propData));
+
+ // add additonal property
+ TransientPropertyData propData2 =
+ createProperty(node1path, node1id, new InternalQName(Constants.NS_DEFAULT_URI, "myProp2"), "JCR DATA VALUE",
+ false);
+ conn.add(propData2);
+ modifications.addAll(addProperty(propData2));
+
+ conn.commit();
+ loader.put(modifications);
+
+ // check do we really have node and its property
+ conn = persistentContainer.openConnection();
+ NodeData nd = (NodeData)conn.getItemData(node1id);
+ assertNotNull(nd);
+ assertEquals("[]:1[]node:1", nd.getQPath().getAsString());
+
+ PropertyData pd = (PropertyData)conn.getItemData(propData.getIdentifier());
+ assertNotNull(pd);
+ assertEquals(propData.getQPath().getAsString(), pd.getQPath().getAsString());
+
+ // find node by search engine
+ SearchIndex index = ((SearchIndex)manager.getHandler());
+ IndexReader reader = index.getIndexReader();
+
+ IndexSearcher searcher = new IndexSearcher(reader);
+
+ Query query = new TermQuery(new Term("_:UUID", node1id));
+ Hits hit = searcher.search(query);
+ assertEquals(1, hit.length());
+
+ query = new TermQuery(new Term("FULL:myProp2", "data"));
+ hit = searcher.search(query);
+ assertEquals(1, hit.length());
+
+ modifications.clear();
+
+ // update property
+ conn = persistentContainer.openConnection();
+
+ TransientPropertyData newpropData2 =
+ new TransientPropertyData(propData2.getQPath(), propData2.getIdentifier(), propData2.getPersistedVersion(),
+ propData2.getType(), propData2.getParentIdentifier(), propData2.isMultiValued());
+
+ newpropData2.setValue(new TransientValueData("newvalue"));
+
+ conn.update(newpropData2);
+ modifications.addAll(updateProperty(newpropData2));
+ conn.commit();
+
+ loader.put(modifications);
+
+ // tests it
+ WorkspaceStorageConnection connection = persistentContainer.openConnection();
+
+ PropertyData destPropData = (PropertyData)connection.getItemData(propData2.getIdentifier());
+
+ assertNotNull(destPropData);
+
+ reader = index.getIndexReader();
+
+ searcher = new IndexSearcher(reader);
+
+ query = new TermQuery(new Term("_:UUID", node1id));
+ hit = searcher.search(query);
+ assertEquals(1, hit.length());
+
+ query = new TermQuery(new Term("FULL:myProp2", "data"));
+ hit = searcher.search(query);
+ assertEquals(0, hit.length());
+
+ query = new TermQuery(new Term("FULL:myProp2", "newvalue"));
+ hit = searcher.search(query);
+ assertEquals(1, hit.length());
+ }
+
/**
* Add Property to the connection but doesn't save it.
*
16 years, 8 months
exo-jcr SVN: r629 - jcr/branches/1.12.0-OPT/exo.jcr.component.core.
by do-not-reply@jboss.org
Author: tolusha
Date: 2009-11-13 04:58:10 -0500 (Fri, 13 Nov 2009)
New Revision: 629
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/TCK.sh
Log:
EXOJCR-221: fix sh
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/TCK.sh
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/TCK.sh 2009-11-13 09:57:40 UTC (rev 628)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/TCK.sh 2009-11-13 09:58:10 UTC (rev 629)
@@ -1,2 +1,2 @@
-MAVEN_OPTS="-Duser.language=en -Duser.region=us -Dmaven.test.skip=true -DforkMode=never -Dorg.exoplatform.jcr.monitor.jdbcMonitor $MAVEN_OPTS "
-mvn $MAVEN_OPTS clean install -Prun-its
\ No newline at end of file
+MAVEN_OPTS="-Duser.language=en -Duser.region=us -Dmaven.test.skip=false -DforkMode=never -Dorg.exoplatform.jcr.monitor.jdbcMonitor $MAVEN_OPTS "
+mvn $MAVEN_OPTS clean test -Prun-tck
16 years, 8 months
exo-jcr SVN: r628 - in jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr: impl/dataflow/session and 1 other directory.
by do-not-reply@jboss.org
Author: tolusha
Date: 2009-11-13 04:57:40 -0500 (Fri, 13 Nov 2009)
New Revision: 628
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/PlainChangesLogImpl.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java
Log:
EXOJCR-221: SessionChangesLog improvement
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/PlainChangesLogImpl.java
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/PlainChangesLogImpl.java 2009-11-13 09:53:11 UTC (rev 627)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/PlainChangesLogImpl.java 2009-11-13 09:57:40 UTC (rev 628)
@@ -199,7 +199,6 @@
in.readFully(buf);
sessionId = new String(buf, DEFAULT_ENCODING);
- items = new ArrayList<ItemState>();
int listSize = in.readInt();
for (int i = 0; i < listSize; i++)
add((ItemState)in.readObject());
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java 2009-11-13 09:53:11 UTC (rev 627)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/SessionChangesLog.java 2009-11-13 09:57:40 UTC (rev 628)
@@ -26,6 +26,7 @@
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.datamodel.QPathEntry;
+import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.dataflow.TransientItemData;
import java.util.ArrayList;
@@ -50,6 +51,17 @@
protected Map<Object, ItemState> index = new HashMap<Object, ItemState>();
/**
+ * ItemState index storage. Used to store last nodes states.
+ */
+ protected Map<String, Map<String, ItemState>> lastChildNodeStates = new HashMap<String, Map<String, ItemState>>();
+
+ /**
+ * ItemState index storage. Used to store last properties states.
+ */
+ protected Map<String, Map<String, ItemState>> lastChildPropertyStates =
+ new HashMap<String, Map<String, ItemState>>();
+
+ /**
* Create empty ChangesLog.
*
* @param sessionId
@@ -70,10 +82,7 @@
super(items, sessionId);
for (ItemState change : items)
- {
- index.put(change.getData().getIdentifier(), change);
- index.put(change.getData().getQPath(), change);
- }
+ addItem(change);
}
/**
@@ -83,8 +92,8 @@
public PlainChangesLog add(ItemState change)
{
super.add(change);
- index.put(change.getData().getIdentifier(), change);
- index.put(change.getData().getQPath(), change);
+ addItem(change);
+
return this;
}
@@ -96,10 +105,8 @@
{
super.addAll(changes);
for (ItemState change : changes)
- {
- index.put(change.getData().getIdentifier(), change);
- index.put(change.getData().getQPath(), change);
- }
+ addItem(change);
+
return this;
}
@@ -111,6 +118,8 @@
{
super.clear();
index.clear();
+ lastChildNodeStates.clear();
+ lastChildPropertyStates.clear();
}
/**
@@ -121,24 +130,34 @@
*/
public void remove(QPath rootPath)
{
- List<ItemState> removedList = new ArrayList<ItemState>();
+ for (int i = items.size() - 1; i >= 0; i--)
+ {
+ ItemState item = items.get(i);
- for (ItemState item : items)
- {
QPath qPath = item.getData().getQPath();
if (qPath.isDescendantOf(rootPath) || item.getAncestorToSave().isDescendantOf(rootPath)
|| item.getAncestorToSave().equals(rootPath) || qPath.equals(rootPath))
{
- removedList.add(item);
+ items.remove(i);
+ index.remove(item.getData().getIdentifier());
+ index.remove(item.getData().getQPath());
+ index.remove(new ParentIDQPathBasedKey(item));
+ index.remove(new IDStateBasedKey(item.getData().getIdentifier(), item.getState()));
+
+ if (item.getData().isNode())
+ {
+ Map<String, ItemState> children = lastChildNodeStates.get(item.getData().getParentIdentifier());
+ if (children != null)
+ children.remove(item.getData().getIdentifier());
+ }
+ else
+ {
+ Map<String, ItemState> children = lastChildPropertyStates.get(item.getData().getParentIdentifier());
+ if (children != null)
+ children.remove(item.getData().getIdentifier());
+ }
}
}
-
- for (ItemState item : removedList)
- {
- items.remove(item);
- index.remove(item.getData().getIdentifier());
- index.remove(item.getData().getQPath());
- }
}
/**
@@ -210,9 +229,11 @@
return list;
}
- /*
- * (non-Javadoc)
- * @see org.exoplatform.services.jcr.dataflow.ItemDataChangesLog#getItemStates(java.lang.String)
+ /**
+ * Gets items by identifier.
+ *
+ * @param itemIdentifier
+ * @return
*/
public List<ItemState> getItemStates(String itemIdentifier)
{
@@ -237,8 +258,18 @@
public PlainChangesLog pushLog(QPath rootPath)
{
PlainChangesLog cLog = new PlainChangesLogImpl(sessionId);
- cLog.addAll(getDescendantsChanges(rootPath));
- remove(rootPath);
+
+ if (rootPath.equals(Constants.ROOT_PATH))
+ {
+ cLog.addAll(items);
+ clear();
+ }
+ else
+ {
+ cLog.addAll(getDescendantsChanges(rootPath));
+ remove(rootPath);
+ }
+
return cLog;
}
@@ -252,15 +283,7 @@
*/
public ItemState getItemState(NodeData parentData, QPathEntry name) throws IllegalPathException
{
- List<ItemState> allStates = getAllStates();
- for (int i = allStates.size() - 1; i >= 0; i--)
- {
- ItemState state = allStates.get(i);
- if (state.getData().getParentIdentifier().equals(parentData.getIdentifier())
- && state.getData().getQPath().getEntries()[state.getData().getQPath().getEntries().length - 1].isSame(name))
- return state;
- }
- return null;
+ return index.get(new ParentIDQPathBasedKey(parentData.getIdentifier(), name));
}
/**
@@ -290,6 +313,20 @@
}
/**
+ * Get ItemState by identifier and state.
+ *
+ * NOTE: Uses index HashMap.
+ *
+ * @param itemIdentifier
+ * @param sate
+ * @return
+ */
+ public ItemState getItemState(String itemIdentifier, int state)
+ {
+ return index.get(new IDStateBasedKey(itemIdentifier, state));
+ }
+
+ /**
* Collect changes of all item direct childs (only). Including the item itself.
*
* @param rootIdentifier
@@ -318,17 +355,11 @@
*/
public Collection<ItemState> getLastChildrenStates(ItemData rootData, boolean forNodes)
{
- HashMap<String, ItemState> children = new HashMap<String, ItemState>();
- List<ItemState> changes = getChildrenChanges(rootData.getIdentifier());
- for (ItemState child : changes)
- {
- ItemData data = child.getData();
- // add state to result
- if (data.isNode() == forNodes && !data.equals(rootData))
- children.put(data.getIdentifier(), child);
+ Map<String, ItemState> children =
+ forNodes ? lastChildNodeStates.get(rootData.getIdentifier()) : lastChildPropertyStates.get(rootData
+ .getIdentifier());
- }
- return children.values();
+ return children == null ? new ArrayList<ItemState>() : children.values();
}
/**
@@ -523,4 +554,200 @@
}
return null;
}
+
+ /**
+ * Adds item to the changes log.
+ *
+ * @param item
+ * the item
+ */
+ private void addItem(ItemState item)
+ {
+ index.put(item.getData().getIdentifier(), item);
+ index.put(item.getData().getQPath(), item);
+ index.put(new ParentIDQPathBasedKey(item), item);
+ index.put(new IDStateBasedKey(item.getData().getIdentifier(), item.getState()), item);
+
+ if (item.getData().isNode())
+ {
+ Map<String, ItemState> children = lastChildNodeStates.get(item.getData().getParentIdentifier());
+ if (children == null)
+ {
+ children = new HashMap<String, ItemState>();
+ lastChildNodeStates.put(item.getData().getParentIdentifier(), children);
+ }
+ children.put(item.getData().getIdentifier(), item);
+ }
+ else
+ {
+ Map<String, ItemState> children = lastChildPropertyStates.get(item.getData().getParentIdentifier());
+ if (children == null)
+ {
+ children = new HashMap<String, ItemState>();
+ lastChildPropertyStates.put(item.getData().getParentIdentifier(), children);
+ }
+ children.put(item.getData().getIdentifier(), item);
+ }
+ }
+
+ /**
+ * This class is used as a key for index map.
+ */
+ private class IDStateBasedKey
+ {
+
+ /**
+ * Item identifier.
+ */
+ private final String identifier;
+
+ /**
+ * Item state.
+ */
+ private final int state;
+
+ /**
+ * KeyUUIDState constructor.
+ *
+ * @param identifier
+ * item identifier
+ * @param state
+ * item state
+ */
+ IDStateBasedKey(String identifier, int state)
+ {
+ this.identifier = identifier;
+ this.state = state;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + identifier.hashCode();
+ result = prime * result + state;
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ IDStateBasedKey other = (IDStateBasedKey)obj;
+
+ if (identifier == null)
+ {
+ if (other.identifier != null)
+ return false;
+ }
+ else if (!identifier.equals(other.identifier))
+ return false;
+ if (state != other.state)
+ return false;
+ return true;
+ }
+ }
+
+ /**
+ * This class is used as a key for index map.
+ */
+ private class ParentIDQPathBasedKey
+ {
+ /**
+ * Item name.
+ */
+ private final QPathEntry name;
+
+ /**
+ * Parent identifier.
+ */
+ private final String parentIdentifier;
+
+ /**
+ * KeyParentUUIDQPath constructor.
+ *
+ * @param item
+ * the item
+ */
+ ParentIDQPathBasedKey(ItemState item)
+ {
+ this.name = item.getData().getQPath().getEntries()[item.getData().getQPath().getEntries().length - 1];
+ this.parentIdentifier = item.getData().getParentIdentifier();
+ }
+
+ /**
+ * KeyParentUUIDQPath constructor.
+ *
+ * @param parentIdentifier
+ * the parent identifier
+ * @param name
+ * item name
+ */
+ ParentIDQPathBasedKey(String parentIdentifier, QPathEntry name)
+ {
+ this.name = name;
+ this.parentIdentifier = parentIdentifier;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + name.getName().hashCode();
+ result = prime * result + name.getNamespace().hashCode();
+ result = prime * result + name.getIndex();
+ result = prime * result + parentIdentifier.hashCode();
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ParentIDQPathBasedKey other = (ParentIDQPathBasedKey)obj;
+
+ if (name == null)
+ {
+ if (other.name != null)
+ return false;
+ }
+ else if (!name.getName().equals(other.name.getName())
+ || !name.getNamespace().equals(other.name.getNamespace()) || name.getIndex() != other.name.getIndex())
+ return false;
+ if (parentIdentifier == null)
+ {
+ if (other.parentIdentifier != null)
+ return false;
+ }
+ else if (!parentIdentifier.equals(other.parentIdentifier))
+ return false;
+ return true;
+ }
+ }
}
16 years, 8 months