You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2005/04/11 09:51:15 UTC

svn commit: r160843 - in cocoon/whiteboard/block-deployer: ./ src/api/org/apache/cocoon/blockdeployer/repository/ src/impl/org/apache/cocoon/blockdeployer/repository/ test/junit/org/apache/cocoon/blockdeployer/ test/junit/org/apache/cocoon/blockdeployer/repository/

Author: reinhard
Date: Mon Apr 11 00:51:12 2005
New Revision: 160843

URL: http://svn.apache.org/viewcvs?view=rev&rev=160843
Log:
work on actual block deployment (wiring.xml)

Modified:
    cocoon/whiteboard/block-deployer/.classpath
    cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java
    cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java
    cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java
    cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java

Modified: cocoon/whiteboard/block-deployer/.classpath
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/.classpath?view=diff&r1=160842&r2=160843
==============================================================================
--- cocoon/whiteboard/block-deployer/.classpath (original)
+++ cocoon/whiteboard/block-deployer/.classpath Mon Apr 11 00:51:12 2005
@@ -1,26 +1,92 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src/api"/>
-	<classpathentry kind="src" path="src/client"/>
-	<classpathentry kind="src" path="test/junit"/>
-	<classpathentry kind="src" path="src/impl"/>
-	<classpathentry kind="lib" path="tools/lib/asm-1.4.3.jar"/>
-	<classpathentry kind="lib" path="tools/lib/cglib-2.0.1.jar"/>
-	<classpathentry kind="lib" path="lib/xercesImpl-2.6.2.jar"/>
-	<classpathentry kind="lib" path="lib/xml-apis.jar"/>
-	<classpathentry kind="lib" path="tools/lib/junit-3.8.1.jar"/>
-	<classpathentry kind="lib" path="tools/lib/easymock-1.1.jar"/>
-	<classpathentry kind="lib" path="tools/lib/easymockclassextension-1.1.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="lib" path="lib/commons-codec-1.2.jar"/>
-	<classpathentry kind="lib" path="lib/log4j-1.2.8.jar"/>
-	<classpathentry kind="lib" path="lib/geronimo-spec-j2ee-1.0-M1.jar"/>
-	<classpathentry kind="lib" path="tools/lib/jodd-fileutils-0.29.jar"/>
-	<classpathentry kind="lib" path="lib/commons-cli-1.0.jar"/>
-	<classpathentry kind="lib" path="lib/castor-0.9.6-xml.jar"/>
-	<classpathentry kind="lib" path="lib/commons-logging-1.0.4.jar"/>
-	<classpathentry kind="lib" path="build/CocoonBlockDeployer-generated-0.1dev.jar"/>
-	<classpathentry kind="lib" path="lib/jakarta-oro-2.0.8.jar"/>
-	<classpathentry kind="lib" path="lib/commons-transaction-1.0.1.jar"/>
+	<classpathentry kind="src" path="src/api">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="src/client">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="test/junit">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="src/impl">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="tools/lib/asm-1.4.3.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="tools/lib/cglib-2.0.1.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/xercesImpl-2.6.2.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/xml-apis.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="tools/lib/junit-3.8.1.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="tools/lib/easymock-1.1.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="tools/lib/easymockclassextension-1.1.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/commons-codec-1.2.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/log4j-1.2.8.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/geronimo-spec-j2ee-1.0-M1.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="tools/lib/jodd-fileutils-0.29.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/commons-cli-1.0.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/castor-0.9.6-xml.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/commons-logging-1.0.4.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/jakarta-oro-2.0.8.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="lib/commons-transaction-1.0.1.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="lib" path="build/CocoonBlockDeployer-generated-0.1dev.jar">
+		<attributes>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="build/eclipse"/>
 </classpath>

Modified: cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java?view=diff&r1=160842&r2=160843
==============================================================================
--- cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java (original)
+++ cocoon/whiteboard/block-deployer/src/api/org/apache/cocoon/blockdeployer/repository/Deployable.java Mon Apr 11 00:51:12 2005
@@ -39,5 +39,6 @@
     	throws UnsupportedBlockException, DeploymentException;
     
     
+    public void undeploy(String blockId) throws BlockNotFoundException;
     
 }

Modified: cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java?view=diff&r1=160842&r2=160843
==============================================================================
--- cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java (original)
+++ cocoon/whiteboard/block-deployer/src/impl/org/apache/cocoon/blockdeployer/repository/ApplicationServer22Locator.java Mon Apr 11 00:51:12 2005
@@ -28,6 +28,7 @@
 import org.apache.cocoon.blockdeployer.logging.LoggerFacade;
 import org.apache.cocoon.blockdeployer.utils.CommonsTransactionLogger;
 import org.apache.cocoon.blockdeployer.utils.LocatorUtils;
+import org.apache.cocoon.blockdeployer.wiring.wiring10.Mount;
 import org.apache.cocoon.blockdeployer.wiring.wiring10.Wiring;
 import org.apache.commons.transaction.file.FileResourceManager;
 import org.apache.commons.transaction.file.ResourceManagerException;
@@ -46,24 +47,36 @@
 
     public final static String WIRING_XML = "wiring.xml";
     protected final static String WORK_DIR = "work";
+    protected final static String RELATIVE_DEPLOYMENT_DIR = "WEB-INF/blocks";
+    
+    protected File deploymentDir;
+    protected LoggerFacade logger;
     
-    private File basedir;
-    private LoggerFacade logger;
-
     /**
-     * Provide the basedir and the wiring.
+     * Provide the deploymentDir and the wiring.
      * 
-     * @param basedir
+     * @param deploymentDir
      *            is a <code>File</code> object pointing to the directory
      *            where blocks can be deployed
      */
-    public ApplicationServer22Locator(File basedir, LoggerFacade logger ) {
+    public ApplicationServer22Locator(final File basedir, LoggerFacade logger ) throws Exception {
         if(logger == null) {
             throw new NullPointerException("You have to set a logger!");
         }        
-        LocatorUtils.checkBasedir(basedir, logger, ApplicationServer22Locator.class);
-        this.basedir = basedir;
-        this.logger = logger;
+        this.logger = logger;      
+        this.deploymentDir = new File(basedir, RELATIVE_DEPLOYMENT_DIR);                
+        LocatorUtils.checkBasedir(deploymentDir, logger, ApplicationServer22Locator.class);
+        this.logger.debug(ApplicationServer22Locator.class, "Using deploymentDir: " + deploymentDir);
+        
+        // read in wiring.xml
+        try {
+            this.wiring10 = readWiring(new File(this.deploymentDir, WIRING_XML), this.logger);
+        } catch (Exception ex) {
+            String msg = "The application server's wiring.xml can't be read.";
+            logger.error(ApplicationServer22Locator.class, msg);
+            throw new NullPointerException(msg);
+        }        
+
     }
 
     public Block getBlock(String blockUri) {
@@ -85,12 +98,12 @@
         if(false) {
             throw new UnsupportedBlockException("Deploying a block of this type is not supported!");
         }
-
+        
         // deploy block into next available directory and update wiring.xml accordingly
         try {
             if(!this.blockExists(this.wiring10, block.getBlockId())) {
-                String nextDir = LocatorUtils.getNextDirectory(this.basedir);
-                this.logger.debug(this.getClass(), "Block to be deployed in " + nextDir);
+                String nextDir = LocatorUtils.getNextDirectory(this.deploymentDir);
+                this.logger.debug(this.getClass(), "Block [" + block.getBlockId() + "] to be deployed in " + nextDir);
                 LocatorUtils.writeZip(new ZipInputStream(block.getStream()), this.frm, this.txId, nextDir);
             }
             this.updateWiring(block);            
@@ -99,24 +112,16 @@
         }
     }
     
-    protected void updateWiring(Block block) {
-
 
-    }
-    
-    protected boolean blockExists(Wiring wiring10, String blockId) {
-        for(int i = 0; i < wiring10.getBlockCount(); i++) {
-            if(wiring10.getBlock(i).getId().equals(blockId)) {
-                return true;
-            }
-        }
-        return false;
-    }
+    public void undeploy(String blockId) throws BlockNotFoundException {
+        // TODO Auto-generated method stub
+        
+    }    
     
     
     public String getIdentifier() {
         try {
-            return this.basedir.toURL().toString();
+            return this.deploymentDir.toURL().toString();
         } catch (MalformedURLException e) {
             throw new IllegalStateException(this.getClass().getName() + ": The block doesn't have a valid ID.");
         }
@@ -151,15 +156,6 @@
         if(frm != null) {
             throw new TransactionException("Transaction has already been started!");
         }
-
-        // read in wiring.xml
-        try {
-            readWiring();
-        } catch (Exception ex) {
-            String msg = "Transaction couldn't be started because problems when reading application server's wiring.xml";
-            logger.error(ApplicationServer22Locator.class, msg);
-            throw new TransactionException(msg);
-        }
         
         // create and reset the workdir
         // FIXME workdir has to be a temporary directory
@@ -170,12 +166,12 @@
         // start the file resource manager
         if(this.logger.isDebugEnabled()) {
             this.logger.debug(this.getClass(), "Initializing FileResourceManager - workdir:" 
-                + workDir + ", store:" + this.basedir.getAbsolutePath());
+                + workDir + ", store:" + this.deploymentDir.getAbsolutePath());
         }
         
         // initialize and start file resource manager and start transaction
         try {
-            this.frm = new FileResourceManager(this.basedir.getAbsolutePath(), 
+            this.frm = new FileResourceManager(this.deploymentDir.getAbsolutePath(), 
                     workDir, false, new CommonsTransactionLogger(this.logger), true);            
             this.frm.start();
             this.frm.startTransaction(txId);   
@@ -221,14 +217,21 @@
         }
     }
     
-    private void readWiring() throws MarshalException, ValidationException, IOException {
+    // ------- wiring and block helper methods ---------------------------------------
+    
+    private static Wiring readWiring(File wiringDescriptor, LoggerFacade logger) throws Exception {
         // read the wiring information (currently we have to support only 
         // http://apache.org/cocoon/blocks/wiring/1.0)
-        File wiringDescriptor = new File(this.basedir, WIRING_XML);
+        Wiring wiring10 = null;
         if(wiringDescriptor.exists()) {
-            wiring10 = (Wiring) Wiring.unmarshal(new FileReader(wiringDescriptor));
-            logger.info("Using wiring descriptor at " + wiringDescriptor.getCanonicalPath().toString());                
-
+            try {
+                wiring10 = (Wiring) Wiring.unmarshal(new FileReader(wiringDescriptor));
+                logger.info("Using wiring descriptor at " + wiringDescriptor.getCanonicalPath().toString());                       
+            } catch (Exception ex) {
+                logger.info(ApplicationServer22Locator.class, "wiring.xml (" + wiringDescriptor + ") couldn't be used read: " + ex.getStackTrace());
+                throw new RuntimeException(ex);
+            } 
+         
             // log already deployed blocks
             if(logger.isDebugEnabled()) {
                 StringBuffer logInformation = new StringBuffer("Following blocks are already installed: ");
@@ -240,11 +243,36 @@
         } else {
             wiring10 = new Wiring();
         }  
+        return wiring10;
     }
     
-    private void writeWiring()  throws MarshalException, ValidationException, IOException {
+    private void writeWiring() throws MarshalException, ValidationException, IOException {
         
     }
+    
+    protected void updateWiring(Block block) {
+        org.apache.cocoon.blockdeployer.wiring.wiring10.Block wiredBlock = 
+            new org.apache.cocoon.blockdeployer.wiring.wiring10.Block();
+        
+        // id
+        wiredBlock.setId(block.getBlockId());
+        // mount path
+        Mount mount = new Mount();
+        mount.setPath(block.getBlockDeploymentData().getMountPath());
+        wiredBlock.setMount(mount);
+
+        // add block to wiring        
+        this.wiring10.addBlock(wiredBlock);
+    }
+    
+    protected boolean blockExists(Wiring wiring10, String blockId) {
+        for(int i = 0; i < wiring10.getBlockCount(); i++) {
+            if(wiring10.getBlock(i).getId().equals(blockId)) {
+                return true;
+            }
+        }
+        return false;
+    }    
 
     private void stopResourceManager() {
         try {
@@ -256,6 +284,7 @@
             // null out FileResourceManager so that another transaction can start
             frm = null;
         }
-    }    
+    }
+
 
 }

Modified: cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java?view=diff&r1=160842&r2=160843
==============================================================================
--- cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java (original)
+++ cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/Constants.java Mon Apr 11 00:51:12 2005
@@ -25,9 +25,9 @@
 
     // basedirs for locators
     public static final String VALID_LOCATION_1 = "test/sample-repositories/rep1";
-    public static final String VALID_ASL_1 = "test/sample-repositories/application-server/WEB-INF/blocks";
+    public static final String VALID_ASL_1 = "test/sample-repositories/application-server";
     public static final String VALID_SBL_1 = "test/sample-repositories/single-block-repository";
-    public static final String TMP_VALID_ASL_1 = TMP_JUNIT + "/asf1/WEB-INF/blocks";
+    public static final String TMP_VALID_ASL_1 = TMP_JUNIT + "/asf1";
     public static final String INVALID_LOCATION = "bla";
     
     // available and valid block

Modified: cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java
URL: http://svn.apache.org/viewcvs/cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java?view=diff&r1=160842&r2=160843
==============================================================================
--- cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java (original)
+++ cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/ApplicationServer22LocatorTest.java Mon Apr 11 00:51:12 2005
@@ -26,6 +26,7 @@
 import org.apache.cocoon.blockdeployer.block.Block;
 import org.apache.cocoon.blockdeployer.block.BlockDeploymentData;
 import org.apache.cocoon.blockdeployer.block.descriptor.BlockDescriptor;
+import org.apache.cocoon.blockdeployer.wiring.wiring10.Wiring;
 import org.easymock.MockControl;
 
 /**
@@ -37,26 +38,29 @@
     
     private void setupExamples() {
         FileUtil.deleteDir(ASL);
+        if((new File(ASL).exists())) fail("Error: Directory mustn't exist (test isolation not guaranteed!");
         FileUtil.mkdirs(ASL);
-        FileUtil.copyDir(ASL, Constants.TMP_VALID_ASL_1);
+        FileUtil.copyDir(Constants.VALID_ASL_1, ASL);
     }
     
-    public void testTransactionManagement() {
+    public void testTransactionManagement() throws Exception {
+        setupExamples();
         ApplicationServer22Locator asl = new ApplicationServer22Locator(new File(ASL), this.logger);
+        // test committing a non-existing transaction
         try {
             asl.commitTransaction();
             fail("Calling commitTransaction() before calling start ransaction mustn't work.");            
         } catch (TransactionException ex) {
             // expected behaviour
         }    
-        
+        // test rolling back a non-existing transaction
         try {
             asl.rollbackTransaction();
             fail("Calling rollbackTransaction() before calling start ransaction mustn't work.");            
         } catch (TransactionException ex) {
             // expected behaviour
         }     
-        
+        // start a transaction
         try {
             asl.startTransaction();
             assertNotNull(asl.frm);
@@ -64,7 +68,7 @@
         } catch (TransactionException ex) {
             fail("startTransaction() on a new ApplicationServer22Locator should work.");
         }
-        
+        // calling start transaction twice
         try {
             asl.startTransaction();
             fail("Calling startTransaction() twice should not work.");            
@@ -73,27 +77,45 @@
         }  
         assertNotNull(asl.frm);
         assertNotNull(asl.wiring10);        
-        
     }
     
-    public void testDeploy() throws Exception {
-        // copy examples into tmp location
+    public void testDeploySingleBlock() throws Exception {
         setupExamples();
-        // deploy method             
+        // create locator, use transaction mgmt, deploy block
         ApplicationServer22Locator asl = new ApplicationServer22Locator(new File(ASL), this.logger);
-        
         asl.startTransaction();
         
-        Block b = createBlockMock("http://bla", null);
-        asl.deploy(b);
+        // create block metadata
+        MockControl bddCtrl = MockControl.createControl(BlockDeploymentData.class);
+        BlockDeploymentData bdd = (BlockDeploymentData) bddCtrl.getMock();
+        
+        String mountPath = "/mountPath";
+        bdd.getMountPath();
+        bddCtrl.setReturnValue(mountPath);
         
-        asl.commitTransaction();
+        bddCtrl.replay();
         
+        String blockId = "http://bla";
+        Block b = createBlockMock(blockId, bdd);
+        asl.deploy(b);
+        asl.commitTransaction();
         // test that the block is extracted correctly by checking whether the 
         // COB_INF and the block.xml are available
+        File descriptor = new File(ASL + "/WEB-INF/blocks/000001/block.xml");
+        assertTrue(descriptor.exists());
+        
+        Wiring wiring = asl.wiring10;
         
-        // clean up
-        // FileUtil.deleteDir(ASL);        
+        org.apache.cocoon.blockdeployer.wiring.wiring10.Block wiredBlock = null;
+        for(int i = 0; i < wiring.getBlockCount(); i++) {
+            org.apache.cocoon.blockdeployer.wiring.wiring10.Block locBlock = wiring.getBlock(i);
+            if(blockId.equals(locBlock.getId())) {
+                wiredBlock = locBlock;
+                break;
+            }
+        }
+        assertNotNull("The installed block must be added to the wiring.", wiredBlock);
+        assertEquals(mountPath, wiredBlock.getMount().getPath());
         
     }
     
@@ -123,7 +145,7 @@
 
     private Block createBlockMock(String id, BlockDeploymentData deployData) throws Exception {
         // create the Block
-        MockControl blockControl = MockControl.createControl(Block.class);
+        MockControl blockControl = MockControl.createNiceControl(Block.class);
         Block block = (Block) blockControl.getMock();
         
         // create the block descriptor information
@@ -132,7 +154,7 @@
         
         // set the id
         block.getBlockId();
-        blockControl.setReturnValue(id);
+        blockControl.setReturnValue(id, MockControl.ONE_OR_MORE);
 
         // create the deployment meta information
         block.getBlockDeploymentData();