Author: ieugen
Date: Thu Feb 7 11:15:16 2013
New Revision: 1443412
URL: http://svn.apache.org/viewvc?rev=1443412&view=rev
Log:
James-Karaf integration
Added:
james/server/trunk/karaf/README.md
Modified:
james/server/trunk/data/data-library/pom.xml
james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-context.xml
james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-osgi.xml
james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-context.xml
james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-osgi.xml
james/server/trunk/karaf/distribution/src/main/filtered-resources/etc/org.apache.karaf.features.cfg
james/server/trunk/karaf/features/pom.xml
james/server/trunk/karaf/features/src/main/resources/features.xml
james/server/trunk/karaf/integration/pom.xml
james/server/trunk/karaf/integration/src/test/java/org/apache/james/karaf/karaf/KarafFeatureInstallTest.java
james/server/trunk/pom.xml
Modified: james/server/trunk/data/data-library/pom.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/data/data-library/pom.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
--- james/server/trunk/data/data-library/pom.xml (original)
+++ james/server/trunk/data/data-library/pom.xml Thu Feb 7 11:15:16 2013
@@ -55,7 +55,6 @@
<groupId>org.apache.james</groupId>
<artifactId>apache-mailet-api</artifactId>
</dependency>
-
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.commons-configuration</artifactId>
Modified:
james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-context.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-context.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
---
james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-context.xml
(original)
+++
james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-context.xml
Thu Feb 7 11:15:16 2013
@@ -1,24 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
- <!--
- ! Licensed to the Apache Software Foundation (ASF) under one ! ! or
- more contributor license agreements. See the NOTICE file ! !
- distributed with this work for additional information ! ! regarding
- copyright ownership. The ASF licenses this file ! ! to you under the
- Apache License, Version 2.0 (the ! ! "License"); you may not use this
- file except in compliance ! ! with the License. You may obtain a copy
- of the License at ! ! ! ! http://www.apache.org/licenses/LICENSE-2.0 !
- ! ! ! Unless required by applicable law or agreed to in writing, ! !
- software distributed under the License is distributed on an ! ! "AS
- IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ! ! KIND, either
- express or implied. See the License for the ! ! specific language
- governing permissions and limitations ! ! under the License. !
- -->
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one ! ! or
+ more contributor license agreements. See the NOTICE file ! !
+ distributed with this work for additional information ! ! regarding
+ copyright ownership. The ASF licenses this file ! ! to you under the
+ Apache License, Version 2.0 (the ! ! "License"); you may not use this
+ file except in compliance ! ! with the License. You may obtain a copy
+ of the License at ! ! ! ! http://www.apache.org/licenses/LICENSE-2.0 !
+ ! ! ! Unless required by applicable law or agreed to in writing, ! !
+ software distributed under the License is distributed on an ! ! "AS
+ IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ! ! KIND, either
+ express or implied. See the License for the ! ! specific language
+ governing permissions and limitations ! ! under the License. !
+-->
-<beans xmlns="http://www.springframework.org/schema/beans"
+<beans xmlns="http://www.springframework.org/schema/beans"
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-3.0.xsd">
-
- <bean id="dnsservice"
class="org.apache.james.dnsservice.dnsjava.DNSJavaService" />
+
+ <bean id="dnsservice"
class="org.apache.james.dnsservice.dnsjava.DNSJavaService"/>
</beans>
Modified:
james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-osgi.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-osgi.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
---
james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-osgi.xml
(original)
+++
james/server/trunk/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-osgi.xml
Thu Feb 7 11:15:16 2013
@@ -17,21 +17,21 @@
specific language governing permissions and limitations
under the License.
-->
-<beans:beans
- xmlns="http://www.springframework.org/schema/osgi"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:beans="http://www.springframework.org/schema/beans"
- xmlns:osgi="http://www.springframework.org/schema/osgi"
- xsi:schemaLocation="http://www.springframework.org/schema/osgi
+<beans:beans
+ xmlns="http://www.springframework.org/schema/osgi"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:beans="http://www.springframework.org/schema/beans"
+ xmlns:osgi="http://www.springframework.org/schema/osgi"
+ xsi:schemaLocation="http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd
http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- export the dnsserver as osgi service -->
<osgi:service ref="dnsservice">
- <osgi:interfaces>
- <beans:value>org.apache.james.dnsservice.api.DNSService</beans:value>
-
<beans:value>org.apache.james.dnsservice.api.DNSServiceMBean</beans:value>
- </osgi:interfaces>
- </osgi:service>
+ <osgi:interfaces>
+
<beans:value>org.apache.james.dnsservice.api.DNSService</beans:value>
+
<beans:value>org.apache.james.dnsservice.api.DNSServiceMBean</beans:value>
+ </osgi:interfaces>
+ </osgi:service>
</beans:beans>
Modified:
james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-context.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-context.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
---
james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-context.xml
(original)
+++
james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-context.xml
Thu Feb 7 11:15:16 2013
@@ -1,32 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
- <!--
- ! Licensed to the Apache Software Foundation (ASF) under one ! ! or
- more contributor license agreements. See the NOTICE file ! !
- distributed with this work for additional information ! ! regarding
- copyright ownership. The ASF licenses this file ! ! to you under the
- Apache License, Version 2.0 (the ! ! "License"); you may not use this
- file except in compliance ! ! with the License. You may obtain a copy
- of the License at ! ! ! ! http://www.apache.org/licenses/LICENSE-2.0 !
- ! ! ! Unless required by applicable law or agreed to in writing, ! !
- software distributed under the License is distributed on an ! ! "AS
- IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ! ! KIND, either
- express or implied. See the License for the ! ! specific language
- governing permissions and limitations ! ! under the License. !
- -->
+<!--
+ ! Licensed to the Apache Software Foundation (ASF) under one ! ! or
+ more contributor license agreements. See the NOTICE file ! !
+ distributed with this work for additional information ! ! regarding
+ copyright ownership. The ASF licenses this file ! ! to you under the
+ Apache License, Version 2.0 (the ! ! "License"); you may not use this
+ file except in compliance ! ! with the License. You may obtain a copy
+ of the License at ! ! ! ! http://www.apache.org/licenses/LICENSE-2.0 !
+ ! ! ! Unless required by applicable law or agreed to in writing, ! !
+ software distributed under the License is distributed on an ! ! "AS
+ IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ! ! KIND, either
+ express or implied. See the License for the ! ! specific language
+ governing permissions and limitations ! ! under the License. !
+-->
-<beans xmlns="http://www.springframework.org/schema/beans"
+<beans xmlns="http://www.springframework.org/schema/beans"
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-3.0.xsd">
-
+
<!-- Import PostBeanProcessors -->
<import
resource="classpath*:org/apache/james/container/spring/server-context.xml"/>
-
+
<!--
===========================================================================
FetchMail
===========================================================================
-->
- <bean id="fetchmail" class="org.apache.james.fetchmail.FetchScheduler" />
+ <bean id="fetchmail" class="org.apache.james.fetchmail.FetchScheduler"/>
</beans>
Modified:
james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-osgi.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-osgi.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
---
james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-osgi.xml
(original)
+++
james/server/trunk/fetchmail/src/main/resources/META-INF/spring/fetchmail-osgi.xml
Thu Feb 7 11:15:16 2013
@@ -17,19 +17,19 @@
specific language governing permissions and limitations
under the License.
-->
-<beans:beans
- xmlns="http://www.springframework.org/schema/osgi"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:beans="http://www.springframework.org/schema/beans"
- xmlns:osgi="http://www.springframework.org/schema/osgi"
- xsi:schemaLocation="http://www.springframework.org/schema/osgi
+<beans:beans
+ xmlns="http://www.springframework.org/schema/osgi"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:beans="http://www.springframework.org/schema/beans"
+ xmlns:osgi="http://www.springframework.org/schema/osgi"
+ xsi:schemaLocation="http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd
http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<osgi:service ref="fetchmail">
- <osgi:interfaces>
- <beans:value>
org.apache.james.fetchmail.FetchSchedulerMBean</beans:value>
- </osgi:interfaces>
- </osgi:service>
+ <osgi:interfaces>
+
<beans:value>org.apache.james.fetchmail.FetchSchedulerMBean</beans:value>
+ </osgi:interfaces>
+ </osgi:service>
</beans:beans>
Added: james/server/trunk/karaf/README.md
URL:
http://svn.apache.org/viewvc/james/server/trunk/karaf/README.md?rev=1443412&view=auto
==============================================================================
--- james/server/trunk/karaf/README.md (added)
+++ james/server/trunk/karaf/README.md Thu Feb 7 11:15:16 2013
@@ -0,0 +1,85 @@
+Apache James - Karaf integration
+================================
+
+This Maven project deploy Apache James inside Apache Karaf OSGi container.
Since James is built with Spring, we will
+use Spring-DM for creating OSGi services thus allowing the same James
components be used unchanged in or outside OSGi.
+
+* http://karaf.apache.org/
+* http://james.apache.org/
+* http://static.springsource.org/osgi/docs/1.2.x/reference/html/
+
+Why?
+====
+
+Apache Karaf provide a great container for deploying applications and managing
their lifecycle. Read more about that on
+the Karaf homepage.
+
+OSGi promotes the use of services and modules that drive the creation of
components easy to reuse and integrate into
+other projects.
+
+Running James inside Karaf container provides means for a secure
administration console (over SSH).
+This enable us to write commands to administer the server and do things like:
+
+* start/stop IMAP/POP3/SMTP components without bringing down the entire server.
+* add/remove users manually
+* much more
+
+Project structure
+=================
+
+* karaf/features - Builds a Karaf features that match James components to easy
provision the application
+ http://karaf.apache.org/manual/latest-2.3.x/users-guide/provisioning.html
+* karaf/distribution - Builds a custom Karaf distribution bundled with James
components. Uses the James features
+* karaf/integration - Integration tests for deploying James inside Karaf
+
+Build and run
+=============
+
+You can build the project by running the script provided in karaf folder:
+ $ ./build.sh
+
+You can also build each project individually by running **$ mvn clean
install** inside each maven project.
+
+You might wish to build the whole James project to ensure all artifacts are
available in the local Maven repo. You can
+do that by running **$ mvn clean install** in the project top level directory.
+
+If everything goes well, look for a file called *distribution-VERSION-.tar.gz*
under karaf/distribution/target.
+Unpack, change the current directory to be inside the application and run
**./bin/karaf**. This will start Karaf and
+present you with a administration console. You are ready to install James
features if not already installed and start
+playing with James.
+
+Run **features:install james-server-dnsservice-dnsjava** to provision and
start the DNSService that
+James uses to resolve mail hosts. To see the state of things you can run
**list**. An output like the following means
+the DNSService has started successfully:
+
+~~~
+ karaf@root> list
+ START LEVEL 100 , List Threshold: 50
+ ID State Blueprint Spring Level Name
+ [ 97] [Active ] [ ] [ ] [ 80] Apache ServiceMix ::
Bundles :: commons-configuration (1.9.0.1)
+ [ 98] [Active ] [ ] [ ] [ 80] Apache ServiceMix ::
Bundles :: commons-beanutils (1.8.3.1)
+ [ 99] [Active ] [ ] [ ] [ 80] Commons JXPath (1.3)
+ [ 100] [Active ] [ ] [ ] [ 80] Apache ServiceMix ::
Bundles :: xmlresolver (1.2.0.5)
+ [ 101] [Active ] [ ] [ ] [ 80] Apache ServiceMix ::
Bundles :: commons-collections (3.2.1.3)
+ [ 102] [Active ] [ ] [ ] [ 80] Apache ServiceMix ::
Bundles :: jdom (1.1.0.4)
+ [ 103] [Active ] [ ] [ ] [ 80] Commons Codec (1.7.0)
+ [ 104] [Active ] [ ] [ ] [ 80] Commons Lang (2.6)
+ [ 105] [Active ] [ ] [ ] [ 80] Commons Digester
(1.8.1)
+ [ 106] [Active ] [ ] [ ] [ 80] Commons JEXL (2.1.1)
+ [ 107] [Active ] [ ] [ ] [ 80] dnsjava (2.1.1)
+ [ 108] [Active ] [ ] [ ] [ 80] Apache ServiceMix ::
Bundles :: junit (4.11.0.1)
+ [ 109] [Active ] [ ] [ ] [ 80] Apache James ::
Server :: DNS Service :: Library (3.0.0.beta5-SNAPSHOT)
+ [ 110] [Active ] [ ] [ ] [ 80] Apache James ::
Server :: DNS Service :: API (3.0.0.beta5-SNAPSHOT)
+ [ 111] [Active ] [ ] [ ] [ 80] Apache James ::
Mailet API (2.5.1.SNAPSHOT)
+ [ 112] [Active ] [ ] [ ] [ 80] Geronimo JavaMail
1.4 :: Mail (1.8.3)
+ [ 113] [Active ] [ ] [Started] [ 80] Apache James ::
Server :: DNS Service :: Implementation (3.0.0.beta5-SNAPSHOT)
+ [ 114] [Active ] [ ] [ ] [ 80] Apache James ::
Server :: Lifecycle API (3.0.0.beta5-SNAPSHOT)
+~~~
+
+If necessary, you can check the logs with **log:display**. You can also
dynamically change the logging level via
+**log:set**. These are all Karaf related things and you should check them out
http://karaf.apache.org/manual/latest-2.3.x/commands/commands.html
+
+
+
+
+
Modified:
james/server/trunk/karaf/distribution/src/main/filtered-resources/etc/org.apache.karaf.features.cfg
URL:
http://svn.apache.org/viewvc/james/server/trunk/karaf/distribution/src/main/filtered-resources/etc/org.apache.karaf.features.cfg?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
---
james/server/trunk/karaf/distribution/src/main/filtered-resources/etc/org.apache.karaf.features.cfg
(original)
+++
james/server/trunk/karaf/distribution/src/main/filtered-resources/etc/org.apache.karaf.features.cfg
Thu Feb 7 11:15:16 2013
@@ -25,4 +25,4 @@ featuresRepositories=mvn:org.apache.jame
#
# Comma separated list of features to install at startup
#
-featuresBoot=config,ssh,management,kar,war
+featuresBoot=config,ssh,management,kar,spring-dm,war
Modified: james/server/trunk/karaf/features/pom.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/karaf/features/pom.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
--- james/server/trunk/karaf/features/pom.xml (original)
+++ james/server/trunk/karaf/features/pom.xml Thu Feb 7 11:15:16 2013
@@ -20,6 +20,7 @@
<mime4j.version>0.7.2</mime4j.version>
<jutf7.version>1.0.0</jutf7.version>
<commons-dbcp-bundle.version>1.4_3</commons-dbcp-bundle.version>
+
<commons-configuration-osgi.version>1.9_1</commons-configuration-osgi.version>
</properties>
<build>
@@ -67,12 +68,6 @@
<!--</executions>-->
<!--</plugin>-->
- <!--
- TODO: karaf-tooling project makes things easier - need to inspect
!
- deploy the feature.xml file in maven repo, install in karaf with:
- features:addurl
mvn:com.axemblr.provisionr/provisionr-features/0.0.1-SNAPSHOT/xml/features
- features:install <feature-name>
- -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
Modified: james/server/trunk/karaf/features/src/main/resources/features.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/karaf/features/src/main/resources/features.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
--- james/server/trunk/karaf/features/src/main/resources/features.xml (original)
+++ james/server/trunk/karaf/features/src/main/resources/features.xml Thu Feb
7 11:15:16 2013
@@ -10,9 +10,14 @@
<!-- james 3.0-beta5 features -->
<feature name="james-server-lifecycle-api" version="${project.version}">
+<<<<<<< HEAD
<bundle>mvn:org.apache.james/james-server-lifecycle-api/${project.version}</bundle>
<feature
version="${commons-configuration-osgi.version}">commons-configuration</feature>
<bundle>mvn:org.slf4j/slf4j-api/${slf4j.version}</bundle>
+=======
+ <bundle
dependency="true">mvn:org.apache.james/james-server-lifecycle-api/${project.version}</bundle>
+ <feature
version="${commons-configuration-osgi.version}">commons-configuration</feature>
+>>>>>>> karafs
</feature>
<feature name="james-server-filesystem-api" version="${project.version}">
@@ -92,7 +97,13 @@
</feature>
<feature name="james-server-dnsservice-dnsjava"
version="${project.version}">
+<<<<<<< HEAD
<feature
version="${commons-configuration-osgi.version}">commons-configuration</feature>
+=======
+ <feature>commons-configuration</feature>
+ <feature>dnsjava-2.1.1</feature>
+ <feature>james-server-dnsservice-library</feature>
+>>>>>>> karafs
<bundle
dependency="true">mvn:org.apache.james/james-server-dnsservice-api/${project.version}</bundle>
<bundle
dependency="true">mvn:org.apache.james/james-server-dnsservice-dnsjava/${project.version}</bundle>
<bundle
dependency="true">mvn:org.apache.james/apache-mailet-api/${mailet.version}</bundle>
@@ -103,10 +114,17 @@
</feature>
<feature name="james-server-dnsservice-library"
version="${project.version}">
+<<<<<<< HEAD
<bundle
dependency="true">mvn:org.apache.james/james-server-dnsservice-library/${project.version}</bundle>
<bundle
dependency="true">mvn:org.apache.james/james-server-dnsservice-api/${project.version}</bundle>
<bundle
dependency="true">mvn:org.apache.james/apache-mailet-api/${mailet.version}</bundle>
<bundle
dependency="true">mvn:org.slf4j/slf4j-api/${slf4j.version}</bundle>
+=======
+ <feature>dnsjava-2.1.1</feature>
+ <bundle
dependency="true">mvn:org.apache.james/james-server-dnsservice-library/${project.version}</bundle>
+ <bundle
dependency="true">mvn:org.apache.james/james-server-dnsservice-api/${project.version}</bundle>
+ <bundle
dependency="true">mvn:org.apache.james/apache-mailet-api/${mailet.version}</bundle>
+>>>>>>> karafs
<bundle dependency="true">
mvn:org.apache.geronimo.javamail/geronimo-javamail_1.4_mail/${geronimo-javamail.version}
</bundle>
@@ -278,7 +296,6 @@
<feature
version="${commons-configuration-osgi.version}">commons-configuration</feature>
<bundle>mvn:commons-io/commons-io/${commons-io.version}</bundle>
<bundle>mvn:org.apache.james.protocols/protocols-netty/${protocols.version}</bundle>
- <bundle>mvn:org.slf4j/slf4j-api/${slf4j.version}</bundle>
<bundle>mvn:io.netty/netty/${netty.version}</bundle>
<bundle>mvn:org.apache.geronimo.specs/geronimo-annotation_1.1_spec/${geronimo-annotation-spec.version}</bundle>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jutf7/1.0.0_0-SNAPSHOT</bundle>
@@ -325,15 +342,14 @@
<bundle>mvn:org.apache.geronimo.javamail/geronimo-javamail_1.4_mail/${geronimo-javamail.version}</bundle>
<bundle>mvn:org.apache.geronimo.specs/geronimo-annotation_1.1_spec/${geronimo-annotation-spec.version}</bundle>
<bundle>mvn:io.netty/netty/${netty.version}</bundle>
- <bundle>mvn:org.slf4j/slf4j-api/${slf4j.version}</bundle>
</feature>
<feature name="commons-configuration"
version="${commons-configuration-osgi.version}">
<bundle>
-
mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-configuration/${commons-configuration-osgi.version}
+
mvn:org.apache.servicemix.bundles/org.apache.servicemmix.bundles.commons-configuration/${commons-configuration-osgi.version}
</bundle>
+ <feature>war</feature>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-beanutils/1.8.3_1</bundle>
-
<!--<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-jxpath/1.2_5</bundle>-->
<bundle>mvn:commons-jxpath/commons-jxpath/1.3</bundle>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xmlresolver/1.2_5</bundle>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-collections/3.2.1_3</bundle>
Modified: james/server/trunk/karaf/integration/pom.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/karaf/integration/pom.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
--- james/server/trunk/karaf/integration/pom.xml (original)
+++ james/server/trunk/karaf/integration/pom.xml Thu Feb 7 11:15:16 2013
@@ -16,6 +16,17 @@
<name>Apache James :: Karaf :: Intetgration tests</name>
<dependencies>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-dnsservice-dnsjava</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+
<!-- Pax-Exam dependencies -->
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
Modified:
james/server/trunk/karaf/integration/src/test/java/org/apache/james/karaf/karaf/KarafFeatureInstallTest.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/karaf/integration/src/test/java/org/apache/james/karaf/karaf/KarafFeatureInstallTest.java?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
---
james/server/trunk/karaf/integration/src/test/java/org/apache/james/karaf/karaf/KarafFeatureInstallTest.java
(original)
+++
james/server/trunk/karaf/integration/src/test/java/org/apache/james/karaf/karaf/KarafFeatureInstallTest.java
Thu Feb 7 11:15:16 2013
@@ -1,12 +1,17 @@
package org.apache.james.karaf.karaf;
+import com.google.common.base.Stopwatch;
+import org.apache.james.dnsservice.api.DNSService;
import org.apache.karaf.features.Feature;
import org.apache.karaf.features.FeaturesService;
+import
org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFilePutOption;
import static
org.apache.karaf.tooling.exam.options.KarafDistributionOption.karafDistributionConfiguration;
+import static
org.apache.karaf.tooling.exam.options.KarafDistributionOption.keepRuntimeFolder;
import static
org.apache.karaf.tooling.exam.options.KarafDistributionOption.logLevel;
import org.apache.karaf.tooling.exam.options.LogLevelOption;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -17,16 +22,19 @@ import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.Configuration;
import org.ops4j.pax.exam.junit.ExamReactorStrategy;
import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.ops4j.pax.exam.options.MavenArtifactProvisionOption;
import org.ops4j.pax.exam.options.MavenArtifactUrlReference;
import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
+import org.osgi.util.tracker.ServiceTracker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.io.File;
import java.net.URI;
+import java.util.concurrent.TimeUnit;
/**
* Apache James Karaf deployment test.
@@ -35,62 +43,124 @@ import java.net.URI;
@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
public class KarafFeatureInstallTest {
- private static final Logger LOG =
LoggerFactory.getLogger(KarafFeatureInstallTest.class);
- @Inject
- private FeaturesService features;
-
- @Inject
- BundleContext bundleContext;
-
- private String featuresVersion;
-
- @Configuration
- public static Option[] configuration() throws Exception {
- MavenArtifactUrlReference karafUrl = maven().groupId("org.apache.karaf")
- .artifactId("apache-karaf")
- .version("2.3.0")
- .type("tar.gz");
-
- String jamesFeaturesVersion =
MavenUtils.getArtifactVersion("org.apache.james.karaf", "james-karaf-features");
-
- return new Option[]{
-
karafDistributionConfiguration().frameworkUrl(karafUrl).karafVersion("2.3.0").name("Apache
Karaf")
- .unpackDirectory(new File("target/exam")),
- logLevel(LogLevelOption.LogLevel.INFO),
- // use system property to provide project version for tests
- systemProperty("james-karaf-features").value(jamesFeaturesVersion)
- };
- }
-
- @Before
- public void setUp() {
- featuresVersion = System.getProperty("james-karaf-features");
- }
-
- @Test
- public void shouldInstallAllFeatures() throws Exception {
- String url = maven("org.apache.james.karaf", "james-karaf-features")
- .version(featuresVersion)
- .classifier("features")
- .type("xml")
- .getURL();
-
- features.addRepository(new URI(url));
- features.installFeature("apache-james-mime4j");
- features.installFeature("commons-configuration");
-
- assertInstalled("apache-james-mime4j");
- assertInstalled("commons-configuration");
-
- for (Bundle bundle : bundleContext.getBundles()) {
- LOG.info("***** bundle {} is {}", bundle.getSymbolicName(),
bundle.getState());
- assertEquals("Bundle " + bundle.getSymbolicName() + " is not active",
- Bundle.ACTIVE, bundle.getState());
- }
- }
-
- private void assertInstalled(String featureName) throws Exception {
- Feature feature = features.getFeature(featureName);
- assertTrue("Feature " + featureName + " should be installed",
features.isInstalled(feature));
- }
+ private static final Logger LOG =
LoggerFactory.getLogger(KarafFeatureInstallTest.class);
+ @Inject
+ private FeaturesService features;
+
+ @Inject
+ BundleContext bundleContext;
+
+ private String featuresVersion;
+
+ @Configuration
+ public static Option[] configuration() throws Exception {
+ MavenArtifactUrlReference karafUrl =
maven().groupId("org.apache.karaf")
+ .artifactId("apache-karaf")
+ .version("2.3.0")
+ .type("tar.gz");
+
+ String jamesFeaturesVersion =
MavenUtils.getArtifactVersion("org.apache.james.karaf", "james-karaf-features");
+
+ return new Option[]{
+
karafDistributionConfiguration().frameworkUrl(karafUrl).karafVersion("2.3.0").name("Apache
Karaf")
+ .unpackDirectory(new File("target/exam")),
+ logLevel(LogLevelOption.LogLevel.INFO),
+ new
KarafDistributionConfigurationFilePutOption("etc/custom.properties",
+ "org.osgi.framework.system.packages.extra",
+ "sun.net.spi.nameservice"),
+ keepRuntimeFolder(),
+ new
MavenArtifactProvisionOption().groupId("com.google.guava").artifactId("guava").versionAsInProject(),
+ // use system property to provide project version for tests
+
systemProperty("james-karaf-features").value(jamesFeaturesVersion)
+ };
+ }
+
+ @Before
+ public void setUp() {
+ featuresVersion = System.getProperty("james-karaf-features");
+ }
+
+ @Test
+ public void testInstallCommonsConfigurationFeature() throws Exception {
+ addJamesFeaturesRepository();
+ features.installFeature("commons-configuration");
+ assertInstalled("commons-configuration");
+ assertBundlesAreActive();
+ }
+
+ @Test
+ public void testInstallApacheMime4jFeature() throws Exception {
+ addJamesFeaturesRepository();
+ features.installFeature("apache-james-mime4j");
+ assertInstalled("apache-james-mime4j");
+ assertBundlesAreActive();
+ }
+
+ @Test
+ public void testInstallJamesDnsServiceDnsJava() throws Exception {
+ addJamesFeaturesRepository();
+ features.installFeature("james-server-dnsservice-dnsjava");
+ assertInstalled("james-server-dnsservice-dnsjava");
+ assertBundlesAreActive();
+ assertOSGiServiceStartsIn(DNSService.class, 30000);
+ }
+
+ private void assertInstalled(String featureName) throws Exception {
+ Feature feature = features.getFeature(featureName);
+ assertTrue("Feature " + featureName + " should be installed",
features.isInstalled(feature));
+ }
+
+ private void assertBundlesAreActive() {
+ for (Bundle bundle : bundleContext.getBundles()) {
+ LOG.info("***** bundle {} is {}", bundle.getSymbolicName(),
bundle.getState());
+ assertEquals("Bundle " + bundle.getSymbolicName() + " is not
active",
+ Bundle.ACTIVE, bundle.getState());
+ }
+ }
+
+ private void addJamesFeaturesRepository() throws Exception {
+ String url = maven("org.apache.james.karaf", "james-karaf-features")
+ .version(featuresVersion)
+ .classifier("features")
+ .type("xml")
+ .getURL();
+
+ features.addRepository(new URI(url));
+ features.installFeature("spring-dm");
+ features.installFeature("war");
+ }
+
+ private void assertOSGiServiceStartsIn(Class clazz, int
timeoutInMilliseconds) throws InterruptedException {
+ final ServiceTracker tracker = new ServiceTracker(bundleContext,
clazz, null);
+ tracker.open(true);
+ try {
+ final Stopwatch stopwatch = new Stopwatch().start();
+ final int expectedCount = 1;
+
+ while (true) {
+ Object[] services = tracker.getServices();
+ if (services == null || services.length < expectedCount) {
+ final int actualCount = (services == null) ? 0 :
services.length;
+ if (stopwatch.elapsedMillis() > timeoutInMilliseconds) {
+ fail(String.format("Expected to find %d services of
type %s. Found only %d in %d milliseconds",
+ expectedCount, clazz.getCanonicalName(),
actualCount, timeoutInMilliseconds));
+ }
+
+ LOG.info(String.format("Found %d services implementing %s.
Trying again in 1s.",
+ actualCount, clazz.getCanonicalName()));
+ TimeUnit.SECONDS.sleep(1);
+
+ } else if (services.length > expectedCount) {
+ fail(String.format("Expected to find %d services
implementing %s. Found %d (more than expected).",
+ expectedCount, clazz.getCanonicalName(),
services.length));
+
+ } else if (services.length == expectedCount) {
+ break; /* done - the test was successful */
+ }
+ }
+
+ } finally {
+ tracker.close();
+ }
+ }
}
Modified: james/server/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/pom.xml?rev=1443412&r1=1443411&r2=1443412&view=diff
==============================================================================
--- james/server/trunk/pom.xml (original)
+++ james/server/trunk/pom.xml Thu Feb 7 11:15:16 2013
@@ -27,7 +27,7 @@
<parent>
<artifactId>james-project</artifactId>
<groupId>org.apache.james</groupId>
- <version>1.8.2-SNAPSHOT</version>
+ <version>1.8.2</version>
<relativePath/>
</parent>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]