Start implementing OSGi integration tests
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 3 Jun 2009 11:19:47 +0000 (11:19 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 3 Jun 2009 11:19:47 +0000 (11:19 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2448 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

demo/pom.xml
org.argeo.slc/pom.xml
runtime/org.argeo.slc.osgiboot/src/main/java/org/argeo/slc/osgiboot/OsgiBoot.java
runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/server/client/SlcServerHttpClient.java [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/activemq.xml [deleted file]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/client/spring.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/jmx/spring.xml [new file with mode: 0644]
runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/jmx.xml [deleted file]
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/spring/SpringUtils.java
runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/unit/AbstractSpringTestCase.java
server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.tomcat/conf/server.xml

index c7df955a207ba0e03c05947bbeaa21b15be90800..4a02458c2798b8aec3e74ae2ae48c430e6f98a85 100644 (file)
                        <plugin>
                                <groupId>org.argeo.slc.maven</groupId>
                                <artifactId>maven-argeo-osgi-plugin</artifactId>
+                               <version>${version.maven-argeo-osgi}</version>
                                <configuration>
                                        <argsToAppend>
                                                <arg>-clean</arg>
+                                               <arg>-noExit</arg>
                                        </argsToAppend>
                                        <systemProperties>
                                                <slc.osgi.bundles>${basedir}/site;in=*;ex=**/.svn/**,${basedir}/../server/org.argeo.slc.siteserver/bundles;in=*;ex=**/.svn/**</slc.osgi.bundles>
index 20c25782a99a6e3a5e86a2c3f97e5b7cf0ae191b..2ead3a66200f0dd3dee6d75a8abd1713f6df9f67 100644 (file)
@@ -21,7 +21,7 @@
                <version.maven-bundle-plugin>2.0.0</version.maven-bundle-plugin>
                <version.activemq>5.2.0.0006</version.activemq>
                <!-- <version.activemq-web>5.2.0.0005</version.activemq-web> -->
-               <version.maven-argeo-osgi>0.1.8</version.maven-argeo-osgi>
+               <version.maven-argeo-osgi>0.1.9</version.maven-argeo-osgi>
        </properties>
        <scm>
                <connection>scm:svn:https://www.argeo.org/svn/slc/trunk/org.argeo.slc</connection>
@@ -487,7 +487,7 @@ limitations under the License.
                        <dependency>
                                <groupId>org.argeo.slc.dep.osgi</groupId>
                                <artifactId>org.argeo.dep.osgi.catalina.start</artifactId>
-                               <version>1.0.0.argeo.2</version>
+                               <version>1.0.0.argeo3</version>
                        </dependency>
 
                        <!-- AOP -->
index fdcb77df07abfb513572dce2165b32e55886414c..b6680bbb8208143453ddf67ed771df0ab72656d9 100644 (file)
@@ -23,10 +23,13 @@ public class OsgiBoot {
        public final static String PROP_SLC_OSGIBOOT_DEBUG = "slc.osgiboot.debug";
 
        public final static String DEFAULT_BASE_URL = "reference:file:";
+       public final static String EXCLUDES_SVN_PATTERN = "**/.svn/**";
 
        private Boolean debug = Boolean.parseBoolean(System.getProperty(
                        PROP_SLC_OSGIBOOT_DEBUG, "false"));
 
+       private boolean excludeSvn = true;
+
        private final BundleContext bundleContext;
 
        public OsgiBoot(BundleContext bundleContext) {
@@ -115,6 +118,8 @@ public class OsgiBoot {
                        return urls;
                bundleLocations = SystemPropertyUtils
                                .resolvePlaceholders(bundleLocations);
+               if (debug)
+                       debug(PROP_SLC_OSGI_LOCATIONS + "=" + bundleLocations);
 
                StringTokenizer st = new StringTokenizer(bundleLocations,
                                File.pathSeparator);
@@ -136,8 +141,11 @@ public class OsgiBoot {
                List<BundlesSet> bundlesSets = new ArrayList<BundlesSet>();
                if (bundlePatterns == null)
                        return urls;
-               // TODO: resolve placeholders
-               info(PROP_SLC_OSGI_BUNDLES + "=" + bundlePatterns);
+               bundlePatterns = SystemPropertyUtils
+                               .resolvePlaceholders(bundlePatterns);
+               if (debug)
+                       debug(PROP_SLC_OSGI_BUNDLES + "=" + bundlePatterns
+                                       + " (excludeSvn=" + excludeSvn + ")");
 
                StringTokenizer st = new StringTokenizer(bundlePatterns, ",");
                while (st.hasMoreTokens()) {
@@ -266,7 +274,16 @@ public class OsgiBoot {
                return bundleContext;
        }
 
-       private class BundlesSet {
+       /** Whether to exclude Subversion directories (true by default) */
+       public boolean isExcludeSvn() {
+               return excludeSvn;
+       }
+
+       public void setExcludeSvn(boolean excludeSvn) {
+               this.excludeSvn = excludeSvn;
+       }
+
+       protected class BundlesSet {
                private String baseUrl = "reference:file";// not used yet
                private final String dir;
                private List<String> includes = new ArrayList<String>();
@@ -302,6 +319,10 @@ public class OsgiBoot {
                                        System.err.println("Unkown bundles pattern type " + type);
                                }
                        }
+
+                       if (excludeSvn && !excludes.contains(EXCLUDES_SVN_PATTERN)) {
+                               excludes.add(EXCLUDES_SVN_PATTERN);
+                       }
                }
 
                public String getDir() {
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/server/client/SlcServerHttpClient.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/server/client/SlcServerHttpClient.java
new file mode 100644 (file)
index 0000000..7a77175
--- /dev/null
@@ -0,0 +1,54 @@
+package org.argeo.slc.server.client;
+
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Map;
+
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.commons.io.IOUtils;
+import org.argeo.slc.SlcException;
+import org.springframework.oxm.Unmarshaller;
+
+public class SlcServerHttpClient {
+       private Unmarshaller unmarshaller;
+       private String baseUrl = "http://localhost:7070/org.argeo.slc.webapp/";
+
+       @SuppressWarnings(value = { "unchecked" })
+       public <T> T callService(String path, Map<String, String> parameters) {
+
+               InputStream in = null;
+               try {
+                       URL url = new URL(baseUrl + path);
+                       HttpURLConnection connection = (HttpURLConnection) url
+                                       .openConnection();
+                       if (parameters != null) {
+                               for (String key : parameters.keySet()) {
+                                       connection.addRequestProperty(key, parameters.get(key));
+                               }
+                       }
+
+                       connection.connect();
+
+                       in = connection.getInputStream();
+                       StreamSource source = new StreamSource(in);
+                       Object obj = unmarshaller.unmarshal(source);
+                       return (T) obj;
+               } catch (Exception e) {
+                       throw new SlcException("Cannot call service " + path + " on "
+                                       + baseUrl, e);
+               } finally {
+                       IOUtils.closeQuietly(in);
+               }
+       }
+
+       public void setUnmarshaller(Unmarshaller unmarshaller) {
+               this.unmarshaller = unmarshaller;
+       }
+
+       public void setBaseUrl(String baseUrl) {
+               this.baseUrl = baseUrl;
+       }
+
+}
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/activemq.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/activemq.xml
deleted file mode 100644 (file)
index e9b3b0b..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
-  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd   
-  http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
-       
-       <broker xmlns="http://activemq.apache.org/schema/core"
-               brokerName="localhost" dataDirectory="${activemq.base}/data">
-
-
-               <!-- Use the following to configure how ActiveMQ is exposed in JMX -->
-               <managementContext>
-                       <managementContext createConnector="false" />
-               </managementContext>
-
-               <!-- The transport connectors ActiveMQ will listen to -->
-               <transportConnectors>
-                       <transportConnector name="openwire" uri="tcp://localhost:61616"
-                               discoveryUri="multicast://default" />
-               </transportConnectors>
-
-       </broker>
-</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/client/spring.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/client/spring.xml
new file mode 100644 (file)
index 0000000..5408076
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
+       default-lazy-init="true">
+
+       <import resource="classpath:org/argeo/slc/server/client/spring.xml" />
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/jmx/spring.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/jmx/spring.xml
new file mode 100644 (file)
index 0000000..267b598
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
+       default-lazy-init="true">
+
+       <!-- MBeans -->
+       <bean id="hibernateStatistics"
+               class="org.hibernate.jmx.StatisticsService" lazy-init="false">
+               <property name="sessionFactory" ref="sessionFactory" />
+       </bean>
+
+       <!-- JMX -->
+       <bean id="jmxExporter"
+               class="org.springframework.jmx.export.MBeanExporter"
+               lazy-init="false">
+               <property name="beans">
+                       <map>
+                               <entry
+                                       key="bean:name=hibernateStatistics,type=statistics,sessionFactory=sessionFactory"
+                                       value-ref="hibernateStatistics" />
+                       </map>
+               </property>
+       </bean>
+
+       <bean id="jxmServerConnector"
+               class="org.springframework.jmx.support.ConnectorServerFactoryBean"
+               lazy-init="false" depends-on="rmiRegistry">
+               <property name="objectName" value="connector:name=rmi" />
+               <property name="serviceUrl"
+                       value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/springconnector" />
+       </bean>
+
+       <bean id="rmiRegistry"
+               class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"
+               lazy-init="false">
+               <property name="port" value="1099" />
+       </bean>
+</beans>
\ No newline at end of file
diff --git a/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/jmx.xml b/runtime/org.argeo.slc.server/src/main/resources/org/argeo/slc/server/spring/jmx.xml
deleted file mode 100644 (file)
index 267b598..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:aop="http://www.springframework.org/schema/aop"
-       xmlns:tx="http://www.springframework.org/schema/tx"
-       xsi:schemaLocation="
-        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
-       default-lazy-init="true">
-
-       <!-- MBeans -->
-       <bean id="hibernateStatistics"
-               class="org.hibernate.jmx.StatisticsService" lazy-init="false">
-               <property name="sessionFactory" ref="sessionFactory" />
-       </bean>
-
-       <!-- JMX -->
-       <bean id="jmxExporter"
-               class="org.springframework.jmx.export.MBeanExporter"
-               lazy-init="false">
-               <property name="beans">
-                       <map>
-                               <entry
-                                       key="bean:name=hibernateStatistics,type=statistics,sessionFactory=sessionFactory"
-                                       value-ref="hibernateStatistics" />
-                       </map>
-               </property>
-       </bean>
-
-       <bean id="jxmServerConnector"
-               class="org.springframework.jmx.support.ConnectorServerFactoryBean"
-               lazy-init="false" depends-on="rmiRegistry">
-               <property name="objectName" value="connector:name=rmi" />
-               <property name="serviceUrl"
-                       value="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/springconnector" />
-       </bean>
-
-       <bean id="rmiRegistry"
-               class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"
-               lazy-init="false">
-               <property name="port" value="1099" />
-       </bean>
-</beans>
\ No newline at end of file
index fbb1840dd21b36767c836724d111ee3831c9ee1d..145657c4f0c8c8aed64648c24985b8a2ed8b8ef9 100644 (file)
@@ -1,6 +1,5 @@
 package org.argeo.slc.spring;\r
 \r
-import java.io.IOException;\r
 import java.net.URI;\r
 import java.util.Map;\r
 \r
@@ -15,6 +14,7 @@ import org.springframework.core.io.Resource;
 public class SpringUtils {\r
        private final static Log log = LogFactory.getLog(SpringUtils.class);\r
 \r
+       @SuppressWarnings(value = { "unchecked" })\r
        public static <T> T loadSingleFromContext(ListableBeanFactory context,\r
                        Class<T> clss) {\r
                // Map<String, T> beans = context.getBeansOfType(clss);\r
index 65d917cfe1755bf20786b83c40ffdb5d31f3e62d..a571b5dcc81444449e5cade4843d0aca51a209bf 100644 (file)
@@ -35,6 +35,7 @@ public abstract class AbstractSpringTestCase extends TestCase {
        }\r
 \r
        /** Returns a bean from the underlying context */\r
+       @SuppressWarnings(value = { "unchecked" })\r
        protected <T> T getBean(String beanId) {\r
                return (T) getContext().getBean(beanId);\r
        }\r
index d70956a0720b64fe2013d5b75fc746d07d3628d3..b9429ca9cfba6e58e742179c5503192e4a56e2b1 100644 (file)
        -->
       <Host name="localhost"  appBase="webapps"
             unpackWARs="true" autoDeploy="true"
-            xmlValidation="false" xmlNamespaceAware="false">
+            xmlValidation="false" xmlNamespaceAware="false" workDir="${slc.osgi.dataDir}/tomcat/work">
 
         <!-- SingleSignOn valve, share authentication between web applications
              Documentation at: /docs/config/valve.html -->