You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/01/17 22:36:24 UTC
svn commit: r1232590 - in /openejb/trunk/openejb: ./
arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/
container/openejb-core/
container/openejb-core/src/main/java/org/apache/openejb/assembler/
container/opene...
Author: rmannibucau
Date: Tue Jan 17 21:36:23 2012
New Revision: 1232590
URL: http://svn.apache.org/viewvc?rev=1232590&view=rev
Log:
adding first version of openejb provisionning module (maybe the name should be changed, resolver?). it lets you deploy an app from a maven path
Added:
openejb/trunk/openejb/utils/openejb-provisionning/
openejb/trunk/openejb/utils/openejb-provisionning/pom.xml
openejb/trunk/openejb/utils/openejb-provisionning/src/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/assembly/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/assembly/provisionning.xml
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java
openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java
Modified:
openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/MavenCache.java
openejb/trunk/openejb/container/openejb-core/pom.xml
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/FileUtils.java
openejb/trunk/openejb/pom.xml
openejb/trunk/openejb/utils/pom.xml
Modified: openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/MavenCache.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/MavenCache.java?rev=1232590&r1=1232589&r2=1232590&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/MavenCache.java (original)
+++ openejb/trunk/openejb/arquillian-tomee/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/MavenCache.java Tue Jan 17 21:36:23 2012
@@ -25,7 +25,6 @@ import org.sonatype.aether.RepositorySys
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.installation.InstallRequest;
-import org.sonatype.aether.installation.InstallationException;
import org.sonatype.aether.repository.LocalRepository;
import org.sonatype.aether.resolution.ArtifactRequest;
import org.sonatype.aether.resolution.ArtifactResolutionException;
@@ -131,15 +130,12 @@ public class MavenCache {
file.deleteOnExit();
os = new FileOutputStream(file);
- int bytesRead = -1;
+ int bytesRead;
byte[] buffer = new byte[8192];
while ((bytesRead = is.read(buffer)) > -1) {
os.write(buffer, 0, bytesRead);
}
-
- is.close();
- os.close();
} catch (Exception e) {
e.printStackTrace();
throw new DownloadException("Unable to download " + source + " to " + file.getAbsolutePath());
Modified: openejb/trunk/openejb/container/openejb-core/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/pom.xml?rev=1232590&r1=1232589&r2=1232590&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/pom.xml (original)
+++ openejb/trunk/openejb/container/openejb-core/pom.xml Tue Jan 17 21:36:23 2012
@@ -445,6 +445,7 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java?rev=1232590&r1=1232589&r2=1232590&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java Tue Jan 17 21:36:23 2012
@@ -16,23 +16,10 @@
*/
package org.apache.openejb.assembler;
-import java.io.File;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.SecureRandom;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeMap;
-import javax.ejb.Stateless;
-import javax.ejb.Remote;
-import javax.ejb.TransactionManagement;
-import static javax.ejb.TransactionManagementType.BEAN;
-
+import org.apache.openejb.ClassLoaderUtil;
import org.apache.openejb.NoSuchApplicationException;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.UndeployException;
-import org.apache.openejb.ClassLoaderUtil;
import org.apache.openejb.assembler.classic.AppInfo;
import org.apache.openejb.assembler.classic.Assembler;
import org.apache.openejb.config.AppModule;
@@ -41,6 +28,20 @@ import org.apache.openejb.config.Deploym
import org.apache.openejb.config.DeploymentModule;
import org.apache.openejb.loader.SystemInstance;
+import javax.ejb.Remote;
+import javax.ejb.Stateless;
+import javax.ejb.TransactionManagement;
+import java.io.File;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.security.SecureRandom;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+import static javax.ejb.TransactionManagementType.BEAN;
+
@Stateless(name = "openejb/Deployer")
@Remote(Deployer.class)
@TransactionManagement(BEAN)
@@ -87,12 +88,13 @@ public class DeployerEjb implements Depl
return deploy(null, properties);
}
- public AppInfo deploy(String location, Properties properties) throws OpenEJBException {
- if (location == null && properties == null) {
+ public AppInfo deploy(String inLocation, Properties properties) throws OpenEJBException {
+ String rawLocation = inLocation;
+ if (rawLocation == null && properties == null) {
throw new NullPointerException("location and properties are null");
}
- if (location == null) {
- location = properties.getProperty(FILENAME);
+ if (rawLocation == null) {
+ rawLocation = properties.getProperty(FILENAME);
}
if (properties == null) {
properties = new Properties();
@@ -100,7 +102,7 @@ public class DeployerEjb implements Depl
AppModule appModule = null;
try {
- File file = new File(location);
+ File file = new File(realLocation(rawLocation));
appModule = deploymentLoader.load(file);
// Add any alternate deployment descriptors to the modules
@@ -174,6 +176,16 @@ public class DeployerEjb implements Depl
}
}
+ private String realLocation(String rawLocation) throws Exception {
+ final Class<?> clazz;
+ try {
+ clazz = DeployerEjb.class.getClassLoader().loadClass("org.apache.openejb.resolver.Resolver");
+ return (String) clazz.getDeclaredMethod("resolve", String.class).invoke(null, rawLocation);
+ } catch (ClassNotFoundException e) {
+ return rawLocation;
+ }
+ }
+
public void undeploy(String moduleId) throws UndeployException, NoSuchApplicationException {
assembler.destroyApplication(moduleId);
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java?rev=1232590&r1=1232589&r2=1232590&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java Tue Jan 17 21:36:23 2012
@@ -150,6 +150,7 @@ public class NewLoaderLogic {
Filter filter = Filters.prefixes(
"ApacheJMeter",
"XmlSchema-",
+ "aether-",
"activeio-",
"activemq-",
"antlr-",
@@ -219,6 +220,7 @@ public class NewLoaderLogic {
"kahadb-",
"log4j-",
"logkit-",
+ "maven-",
"mbean-annotation-api-",
"myfaces-",
"neethi-",
@@ -232,9 +234,12 @@ public class NewLoaderLogic {
"opensaml-",
"openwebbeans-",
"openws-",
+ "ops4j-",
"org.eclipse.",
"org.junit.",
"org.osgi.core-",
+ "pax-",
+ "plexus-",
"quartz-",
"rmock-",
"saaj-",
@@ -248,6 +253,7 @@ public class NewLoaderLogic {
"stax-api-",
"swizzle-",
"testng-",
+ "wagon-",
"webbeans-ee",
"webbeans-ejb",
"webbeans-impl",
Modified: openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/FileUtils.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/FileUtils.java?rev=1232590&r1=1232589&r2=1232590&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/FileUtils.java (original)
+++ openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/FileUtils.java Tue Jan 17 21:36:23 2012
@@ -21,6 +21,8 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.Hashtable;
public class FileUtils {
@@ -142,24 +144,21 @@ public class FileUtils {
copyFile(destination, source, false);
}
- public static void copyFile(File destination, File source, boolean deleteSourceFile) throws java.io.IOException {
- FileInputStream in = null;
- FileOutputStream out = null;
+ public static void copy(OutputStream out, InputStream source) throws java.io.IOException {
try {
- in = new FileInputStream(source);
- out = new FileOutputStream(destination);
-
int len;
byte[] buffer = new byte[4096];
- while ((len = in.read(buffer)) != -1) {
+ while ((len = source.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
- } catch (java.io.IOException e) {
- throw e;
} finally {
- in.close();
+ source.close();
out.close();
}
+ }
+
+ public static void copyFile(File destination, File source, boolean deleteSourceFile) throws java.io.IOException {
+ copy(new FileOutputStream(destination), new FileInputStream(source));
if (deleteSourceFile) {
source.delete();
Modified: openejb/trunk/openejb/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/pom.xml?rev=1232590&r1=1232589&r2=1232590&view=diff
==============================================================================
--- openejb/trunk/openejb/pom.xml (original)
+++ openejb/trunk/openejb/pom.xml Tue Jan 17 21:36:23 2012
@@ -115,6 +115,12 @@
<!-- used mainly by jetty modules -->
<openejb-cxf.version>2.5.1-SNAPSHOT</openejb-cxf.version>
<jetty.version>7.5.3.v20111011</jetty.version>
+ <pax-url.version>1.3.5</pax-url.version>
+ <aether.version>1.11</aether.version>
+ <maven.version>3.0.3</maven.version>
+ <wagon.version>1.0-beta-7</wagon.version>
+ <plexus.version>1.5.4</plexus.version>
+ <plexus-utils.version>2.0.5</plexus-utils.version>
<!--
- http://docs.codehaus.org/display/MAVENUSER/POM+Element+for+Source+File+Encoding
Added: openejb/trunk/openejb/utils/openejb-provisionning/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/pom.xml?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/pom.xml (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/pom.xml Tue Jan 17 21:36:23 2012
@@ -0,0 +1,165 @@
+<?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.
+-->
+<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/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>utils</artifactId>
+ <groupId>org.apache.openejb</groupId>
+ <version>4.0.0-beta-2-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>openejb-provisionning</artifactId>
+ <name>OpenEJB :: Utils :: Provisionning</name>
+
+ <dependencies>
+ <!-- to handle mvn uris in DeployerEjb -->
+ <dependency>
+ <groupId>org.ops4j.pax.url</groupId>
+ <artifactId>pax-url-maven-commons</artifactId>
+ <version>${pax-url.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.ops4j.pax.swissbox</groupId>
+ <artifactId>pax-swissbox-optional-jcl</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>aether-api</artifactId>
+ <version>${aether.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>aether-spi</artifactId>
+ <version>${aether.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>aether-util</artifactId>
+ <version>${aether.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>aether-impl</artifactId>
+ <version>${aether.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>aether-connector-wagon</artifactId>
+ <version>${aether.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-aether-provider</artifactId>
+ <version>${maven.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <version>${wagon.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <version>${wagon.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>nekohtml</groupId>
+ <artifactId>nekohtml</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>nekohtml</groupId>
+ <artifactId>xercesMinimal</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ <version>${plexus.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.xbean</groupId>
+ <artifactId>xbean-reflect</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>${plexus-utils.version}</version>
+ </dependency>
+
+ <!-- for resolver -->
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>openejb-loader</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>bin</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/provisionning.xml</descriptor>
+ </descriptors>
+ <appendAssemblyId>false</appendAssemblyId>
+ <tarLongFileMode>gnu</tarLongFileMode>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/assembly/provisionning.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/assembly/provisionning.xml?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/assembly/provisionning.xml (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/assembly/provisionning.xml Tue Jan 17 21:36:23 2012
@@ -0,0 +1,43 @@
+<?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.
+-->
+<assembly>
+ <id>provisionning</id>
+ <formats>
+ <format>tar.gz</format>
+ <format>zip</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/target</directory>
+ <includes>
+ <include>${project.artifactId}-${project.version}.${project.packaging}</include>
+ </includes>
+ <outputDirectory>/</outputDirectory>
+ </fileSet>
+ </fileSets>
+ <dependencySets>
+ <dependencySet>
+ <outputDirectory>/</outputDirectory>
+ <scope>runtime</scope>
+ <excludes>
+ <exclude>org.apache.openejb:*</exclude>
+ </excludes>
+ </dependencySet>
+ </dependencySets>
+</assembly>
Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/Resolver.java Tue Jan 17 21:36:23 2012
@@ -0,0 +1,44 @@
+package org.apache.openejb.resolver;
+
+import org.apache.openejb.loader.FileUtils;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.resolver.maven.Handler;
+import org.apache.openejb.resolver.maven.Parser;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.net.URL;
+
+public class Resolver {
+ public static final String MVN_PREFIX = "mvn:";
+ public static final String APP_CACHE = System.getProperty("openejb.deployer.cache.folder", "temp");
+
+ private Resolver() {
+ // no-op
+ }
+
+ public static String resolve(final String rawLocation) throws Exception {
+ if (rawLocation.startsWith(MVN_PREFIX) && rawLocation.length() > MVN_PREFIX.length()) {
+ final String info = rawLocation.substring(MVN_PREFIX.length());
+ final Parser parser = new Parser(info);
+ final File file = new File(SystemInstance.get().getBase().getDirectory(),
+ APP_CACHE + File.separator + parser.getArtifactPath());
+ if (!file.exists()) {
+ try {
+ final URL url = new URL(MVN_PREFIX.substring(MVN_PREFIX.length() - 1), "localhost", -1, info, new Handler());
+ if (!file.getParentFile().exists()) {
+ file.getParentFile().mkdirs();
+ }
+ FileUtils.copy(new FileOutputStream(file), url.openStream());
+ } catch (Exception e) {
+ if (file.exists()) {
+ file.delete();
+ }
+ throw e;
+ }
+ }
+ return file.getPath();
+ }
+ return rawLocation;
+ }
+}
Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/AetherBasedResolver.java Tue Jan 17 21:36:23 2012
@@ -0,0 +1,274 @@
+package org.apache.openejb.resolver.maven;
+
+import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
+import org.apache.maven.repository.internal.DefaultVersionRangeResolver;
+import org.apache.maven.repository.internal.DefaultVersionResolver;
+import org.apache.maven.repository.internal.MavenRepositorySystemSession;
+import org.ops4j.pax.url.maven.commons.MavenConfigurationImpl;
+import org.ops4j.pax.url.maven.commons.MavenRepositoryURL;
+import org.sonatype.aether.RepositoryException;
+import org.sonatype.aether.RepositorySystem;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.connector.wagon.WagonProvider;
+import org.sonatype.aether.connector.wagon.WagonRepositoryConnectorFactory;
+import org.sonatype.aether.impl.ArtifactDescriptorReader;
+import org.sonatype.aether.impl.DependencyCollector;
+import org.sonatype.aether.impl.Deployer;
+import org.sonatype.aether.impl.Installer;
+import org.sonatype.aether.impl.MetadataResolver;
+import org.sonatype.aether.impl.SyncContextFactory;
+import org.sonatype.aether.impl.VersionRangeResolver;
+import org.sonatype.aether.impl.VersionResolver;
+import org.sonatype.aether.impl.internal.DefaultDependencyCollector;
+import org.sonatype.aether.impl.internal.DefaultDeployer;
+import org.sonatype.aether.impl.internal.DefaultInstaller;
+import org.sonatype.aether.impl.internal.DefaultMetadataResolver;
+import org.sonatype.aether.impl.internal.DefaultServiceLocator;
+import org.sonatype.aether.impl.internal.DefaultSyncContextFactory;
+import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManagerFactory;
+import org.sonatype.aether.repository.Authentication;
+import org.sonatype.aether.repository.LocalRepository;
+import org.sonatype.aether.repository.MirrorSelector;
+import org.sonatype.aether.repository.Proxy;
+import org.sonatype.aether.repository.ProxySelector;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.resolution.ArtifactRequest;
+import org.sonatype.aether.resolution.VersionRangeRequest;
+import org.sonatype.aether.resolution.VersionRangeResolutionException;
+import org.sonatype.aether.resolution.VersionRangeResult;
+import org.sonatype.aether.spi.connector.RepositoryConnectorFactory;
+import org.sonatype.aether.spi.localrepo.LocalRepositoryManagerFactory;
+import org.sonatype.aether.spi.log.Logger;
+import org.sonatype.aether.spi.log.NullLogger;
+import org.sonatype.aether.util.artifact.DefaultArtifact;
+import org.sonatype.aether.util.repository.DefaultMirrorSelector;
+import org.sonatype.aether.util.repository.DefaultProxySelector;
+import org.sonatype.aether.version.Version;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class AetherBasedResolver {
+ private static final String LATEST_VERSION_RANGE = "(0.0,]";
+ private static final String REPO_TYPE = "default";
+
+ final private RepositorySystem m_repoSystem;
+ final private List<RemoteRepository> m_remoteRepos;
+ final private MavenConfigurationImpl m_config;
+ final private MirrorSelector m_mirrorSelector;
+ final private ProxySelector m_proxySelector;
+
+ /**
+ * Create a AetherBasedResolver
+ *
+ * @param configuration (must be not null)
+ * @throws java.net.MalformedURLException in case of url problems in configuration.
+ */
+ public AetherBasedResolver(final MavenConfigurationImpl configuration) throws MalformedURLException {
+ m_repoSystem = newRepositorySystem();
+ m_config = configuration;
+
+ m_remoteRepos = selectRepositories(getRemoteRepositories(configuration));
+ m_mirrorSelector = selectMirrors();
+ m_proxySelector = selectProxies();
+ assignProxyAndMirrors();
+ }
+
+ private void assignProxyAndMirrors() {
+ Map<String, List<String>> map = new HashMap<String, List<String>>();
+ Map<String, RemoteRepository> naming = new HashMap<String, RemoteRepository>();
+
+ for (RemoteRepository r : m_remoteRepos) {
+ naming.put(r.getId(), r);
+
+ r.setProxy(m_proxySelector.getProxy(r));
+
+ RemoteRepository mirror = m_mirrorSelector.getMirror(r);
+ if (mirror != null) {
+ String key = mirror.getId();
+ naming.put(key, mirror);
+ if (!map.containsKey(key)) {
+ map.put(key, new ArrayList<String>());
+ }
+ List<String> mirrored = map.get(key);
+ mirrored.add(r.getId());
+ }
+ }
+
+ for (String mirrorId : map.keySet()) {
+ RemoteRepository mirror = naming.get(mirrorId);
+ List<RemoteRepository> mirroedRepos = new ArrayList<RemoteRepository>();
+
+ for (String rep : map.get(mirrorId)) {
+ mirroedRepos.add(naming.get(rep));
+ }
+ mirror.setMirroredRepositories(mirroedRepos);
+ m_remoteRepos.removeAll(mirroedRepos);
+ m_remoteRepos.add(0, mirror);
+ }
+
+ }
+
+ private List<MavenRepositoryURL> getRemoteRepositories(MavenConfigurationImpl configuration)
+ throws MalformedURLException {
+ List<MavenRepositoryURL> r = new ArrayList<MavenRepositoryURL>();
+ for (MavenRepositoryURL s : configuration.getRepositories()) {
+ r.add(s);
+ }
+ return r;
+ }
+
+ private ProxySelector selectProxies() {
+ DefaultProxySelector proxySelector = new DefaultProxySelector();
+ Map<String, Map<String, String>> proxies = m_config.getProxySettings();
+ for (Map<String, String> proxy : proxies.values()) {
+ //The fields are user, pass, host, port, nonProxyHosts, protocol.
+ String nonProxyHosts = proxy.get("nonProxyHosts");
+ Proxy proxyObj = new Proxy(proxy.get("protocol"),
+ proxy.get("host"),
+ toInt(proxy.get("port")),
+ getAuthentication(proxy)
+ );
+ proxySelector.add(proxyObj, nonProxyHosts);
+ }
+ return proxySelector;
+ }
+
+ private MirrorSelector selectMirrors() {
+ // configure mirror
+ DefaultMirrorSelector selector = new DefaultMirrorSelector();
+ Map<String, Map<String, String>> mirrors = m_config.getMirrors();
+
+ for (String mirrorName : mirrors.keySet()) {
+ Map<String, String> mirror = mirrors.get(mirrorName);
+ //The fields are id, url, mirrorOf, layout, mirrorOfLayouts.
+ String mirrorOf = mirror.get("mirrorOf");
+ String url = mirror.get("url");
+ // type can be null in this implementation (1.11)
+ selector.add(mirrorName, url, null, false, mirrorOf, "*");
+ }
+ return selector;
+ /**
+ Set<RemoteRepository> mirrorRepoList = new HashSet<RemoteRepository>();
+ for (RemoteRepository r : m_remoteRepos) {
+ RemoteRepository mirrorRepo = mirrorSelector.getMirror(r);
+ if (mirrorRepo != null)
+ {
+ mirrorRepoList.add(mirrorRepo);
+ }
+ }
+ return mirrorRepoList;
+ **/
+ }
+
+ private List<RemoteRepository> selectRepositories(List<MavenRepositoryURL> repos) {
+ List<RemoteRepository> list = new ArrayList<RemoteRepository>();
+ for (MavenRepositoryURL r : repos) {
+ list.add(new RemoteRepository(r.getId(), REPO_TYPE, r.getURL().toExternalForm()));
+ }
+ return list;
+ }
+
+ public InputStream resolve(String groupId, String artifactId, String classifier, String extension, String version) throws IOException {
+ // version = mapLatestToRange( version );
+ final RepositorySystemSession session = newSession();
+ Artifact artifact = new DefaultArtifact(groupId, artifactId, classifier, extension, version);
+ File resolved = resolve(session, artifact);
+ return new FileInputStream(resolved);
+ }
+
+ private File resolve(RepositorySystemSession session, Artifact artifact)
+ throws IOException {
+ try {
+ artifact = resolveLatestVersionRange(session, artifact);
+ return m_repoSystem.resolveArtifact(session, new ArtifactRequest(artifact, m_remoteRepos, null)).getArtifact().getFile();
+ } catch (RepositoryException e) {
+ throw new IOException("Aether Error.", e);
+ }
+ }
+
+ /**
+ * Tries to resolve versions = LATEST using an open range version query.
+ * If it succeeds, version of artifact is set to the highest available version.
+ *
+ * @param session to be used.
+ * @param artifact to be used
+ * @return an artifact with version set properly (highest if available)
+ * @throws org.sonatype.aether.resolution.VersionRangeResolutionException
+ * in case of resolver errors.
+ */
+ private Artifact resolveLatestVersionRange(RepositorySystemSession session, Artifact artifact)
+ throws VersionRangeResolutionException {
+ if (artifact.getVersion().equals("LATEST")) {
+ artifact = artifact.setVersion(LATEST_VERSION_RANGE);
+
+ VersionRangeResult versionResult = m_repoSystem.resolveVersionRange(session, new VersionRangeRequest(artifact, m_remoteRepos, null));
+ if (versionResult != null) {
+ Version v = versionResult.getHighestVersion();
+ if (v != null) {
+
+ artifact = artifact.setVersion(v.toString());
+ } else {
+ throw new VersionRangeResolutionException(versionResult, "Not highest version found for " + artifact);
+ }
+ }
+ }
+ return artifact;
+ }
+
+ private RepositorySystemSession newSession() {
+ assert m_config != null : "local repository cannot be null";
+ File local = m_config.getLocalRepository().getFile();
+
+ MavenRepositorySystemSession session = new MavenRepositorySystemSession();
+
+ LocalRepository localRepo = new LocalRepository(local);
+
+ session.setLocalRepositoryManager(m_repoSystem.newLocalRepositoryManager(localRepo));
+ session.setMirrorSelector(m_mirrorSelector);
+ session.setProxySelector(m_proxySelector);
+ return session;
+ }
+
+ private Authentication getAuthentication(Map<String, String> proxy) {
+ // user, pass
+ if (proxy.containsKey("user")) {
+ return new Authentication(proxy.get("user"), proxy.get("pass"));
+ }
+ return null;
+ }
+
+ private int toInt(String intStr) {
+ return Integer.parseInt(intStr);
+ }
+
+ private RepositorySystem newRepositorySystem() {
+ DefaultServiceLocator locator = new DefaultServiceLocator();
+
+ locator.addService(VersionResolver.class, DefaultVersionResolver.class);
+ locator.addService(ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class);
+ locator.addService(VersionRangeResolver.class, DefaultVersionRangeResolver.class);
+ locator.addService(MetadataResolver.class, DefaultMetadataResolver.class);
+ locator.addService(ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class);
+ locator.addService(DependencyCollector.class, DefaultDependencyCollector.class);
+ locator.addService(Installer.class, DefaultInstaller.class);
+ locator.addService(Deployer.class, DefaultDeployer.class);
+ locator.addService(SyncContextFactory.class, DefaultSyncContextFactory.class);
+
+ locator.setServices(WagonProvider.class, new ManualWagonProvider());
+ locator.addService(RepositoryConnectorFactory.class, WagonRepositoryConnectorFactory.class);
+
+ locator.setService(LocalRepositoryManagerFactory.class, SimpleLocalRepositoryManagerFactory.class);
+ locator.setService(Logger.class, NullLogger.class);
+
+ return locator.getService(RepositorySystem.class);
+ }
+}
Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Connection.java Tue Jan 17 21:36:23 2012
@@ -0,0 +1,31 @@
+package org.apache.openejb.resolver.maven;
+
+import org.ops4j.pax.url.maven.commons.MavenConfigurationImpl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+public class Connection extends URLConnection {
+ private Parser m_parser;
+ private AetherBasedResolver m_aetherBasedResolver;
+
+ public Connection( final URL url, final MavenConfigurationImpl configuration ) throws MalformedURLException {
+ super(url);
+ m_parser = new Parser( url.getPath() );
+ m_aetherBasedResolver = new AetherBasedResolver( configuration );
+ }
+
+ @Override
+ public void connect() {
+ // no-op
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ connect();
+ return m_aetherBasedResolver.resolve( m_parser.getGroup(), m_parser.getArtifact(), m_parser.getClassifier(), m_parser.getType(), m_parser.getVersion() );
+ }
+}
Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Handler.java Tue Jan 17 21:36:23 2012
@@ -0,0 +1,21 @@
+package org.apache.openejb.resolver.maven;
+
+import org.ops4j.pax.url.maven.commons.MavenConfigurationImpl;
+import org.ops4j.pax.url.maven.commons.MavenSettingsImpl;
+import org.ops4j.util.property.PropertiesPropertyResolver;
+
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+public class Handler extends URLStreamHandler {
+ @Override
+ protected URLConnection openConnection( final URL url ) throws IOException {
+ final MavenConfigurationImpl config = new MavenConfigurationImpl(
+ new PropertiesPropertyResolver( System.getProperties() ), "org.ops4j.pax.url.mvn");
+
+ config.setSettings( new MavenSettingsImpl( config.getSettingsFileUrl(), config.useFallbackRepositories() ) );
+ return new Connection( url, config );
+ }
+}
Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/ManualWagonProvider.java Tue Jan 17 21:36:23 2012
@@ -0,0 +1,25 @@
+package org.apache.openejb.resolver.maven;
+
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.providers.file.FileWagon;
+import org.apache.maven.wagon.providers.http.LightweightHttpWagon;
+import org.apache.maven.wagon.providers.http.LightweightHttpsWagon;
+import org.sonatype.aether.connector.wagon.WagonProvider;
+
+public class ManualWagonProvider implements WagonProvider {
+ public Wagon lookup(String roleHint)
+ throws Exception {
+ if ("file".equals(roleHint)) {
+ return new FileWagon();
+ } else if ("http".equals(roleHint)) {
+ return new LightweightHttpWagon();
+ } else if ("https".equals(roleHint)) {
+ return new LightweightHttpsWagon();
+ }
+ return null;
+ }
+
+ public void release(Wagon wagon) {
+ // no-op
+ }
+}
Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/Parser.java Tue Jan 17 21:36:23 2012
@@ -0,0 +1,185 @@
+package org.apache.openejb.resolver.maven;
+
+import java.net.MalformedURLException;
+
+public class Parser {
+ public static final String VERSION_LATEST = "LATEST";
+ private static final String SYNTAX = "mvn:[repository_url!]groupId/artifactId[/[version]/[type]]";
+ private static final String REPOSITORY_SEPARATOR = "!";
+ private static final String ARTIFACT_SEPARATOR = "/";
+ private static final String VERSION_SNAPSHOT = "SNAPSHOT";
+ private static final String TYPE_JAR = "jar";
+ private static final String FILE_SEPARATOR = "/";
+ private static final String GROUP_SEPARATOR = "\\.";
+ private static final String VERSION_SEPARATOR = "-";
+ private static final String TYPE_SEPARATOR = ".";
+ private static final String CLASSIFIER_SEPARATOR = "-";
+ private static final String METADATA_FILE = "maven-metadata.xml";
+ private static final String METADATA_FILE_LOCAL = "maven-metadata-local.xml";
+ private String m_group;
+ private String m_artifact;
+ private String m_version;
+ private String m_type;
+ private String m_classifier;
+ private String m_fullClassifier;
+
+ public Parser(final String rawPath)
+ throws MalformedURLException {
+ if (rawPath == null) {
+ throw new MalformedURLException("Path cannot be null. Syntax " + SYNTAX);
+ }
+ final String path = rawPath.replace(":", "/"); // mvn:G:A:V = mvn:G/A/V
+ if (path.startsWith(REPOSITORY_SEPARATOR) || path.endsWith(REPOSITORY_SEPARATOR)) {
+ throw new MalformedURLException(
+ "Path cannot start or end with " + REPOSITORY_SEPARATOR + ". Syntax " + SYNTAX
+ );
+ }
+ if (path.contains(REPOSITORY_SEPARATOR)) {
+ int pos = path.lastIndexOf(REPOSITORY_SEPARATOR);
+ parseArtifactPart(path.substring(pos + 1));
+ //m_repositoryURL = new MavenRepositoryURL(path.substring(0, pos) + "@snapshots");
+ } else {
+ parseArtifactPart(path);
+ }
+ }
+
+ private void parseArtifactPart(final String part)
+ throws MalformedURLException {
+ String[] segments = part.split(ARTIFACT_SEPARATOR);
+ if (segments.length < 2) {
+ throw new MalformedURLException("Invalid path. Syntax " + SYNTAX);
+ }
+ // we must have a valid group
+ m_group = segments[0];
+ if (m_group.trim().length() == 0) {
+ throw new MalformedURLException("Invalid groupId. Syntax " + SYNTAX);
+ }
+ // valid artifact
+ m_artifact = segments[1];
+ if (m_artifact.trim().length() == 0) {
+ throw new MalformedURLException("Invalid artifactId. Syntax " + SYNTAX);
+ }
+ // version is optional but we have a default value
+ m_version = VERSION_LATEST;
+ if (segments.length >= 3 && segments[2].trim().length() > 0) {
+ m_version = segments[2];
+ }
+ // type is optional but we have a default value
+ m_type = TYPE_JAR;
+ if (segments.length >= 4 && segments[3].trim().length() > 0) {
+ m_type = segments[3];
+ }
+ // classifier is optional (if not pressent or empty we will have a null classsifier
+ m_fullClassifier = "";
+ if (segments.length >= 5 && segments[4].trim().length() > 0) {
+ m_classifier = segments[4];
+ m_fullClassifier = CLASSIFIER_SEPARATOR + m_classifier;
+ }
+ }
+
+ public String getGroup() {
+ return m_group;
+ }
+
+ public String getArtifact() {
+ return m_artifact;
+ }
+
+ public String getVersion() {
+ return m_version;
+ }
+
+ public String getType() {
+ return m_type;
+ }
+
+ public String getClassifier() {
+ return m_classifier;
+ }
+
+ public String getArtifactPath() {
+ return getArtifactPath(m_version);
+ }
+
+ public String getArtifactPath(final String version) {
+ return new StringBuilder()
+ .append(m_group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR))
+ .append(FILE_SEPARATOR)
+ .append(m_artifact)
+ .append(FILE_SEPARATOR)
+ .append(version)
+ .append(FILE_SEPARATOR)
+ .append(m_artifact)
+ .append(VERSION_SEPARATOR)
+ .append(version)
+ .append(m_fullClassifier)
+ .append(TYPE_SEPARATOR)
+ .append(m_type)
+ .toString();
+ }
+
+ public String getSnapshotVersion(final String version, final String timestamp, final String buildnumber) {
+ return version.replace(VERSION_SNAPSHOT, timestamp) + VERSION_SEPARATOR + buildnumber;
+ }
+
+ public String getSnapshotPath(final String version, final String timestamp, final String buildnumber) {
+ return new StringBuilder()
+ .append(m_group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR))
+ .append(FILE_SEPARATOR)
+ .append(m_artifact)
+ .append(FILE_SEPARATOR)
+ .append(version)
+ .append(FILE_SEPARATOR)
+ .append(m_artifact)
+ .append(VERSION_SEPARATOR)
+ .append(getSnapshotVersion(version, timestamp, buildnumber))
+ .append(m_fullClassifier)
+ .append(TYPE_SEPARATOR)
+ .append(m_type)
+ .toString();
+ }
+
+ public String getVersionMetadataPath(final String version) {
+ return new StringBuilder()
+ .append(m_group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR))
+ .append(FILE_SEPARATOR)
+ .append(m_artifact)
+ .append(FILE_SEPARATOR)
+ .append(version)
+ .append(FILE_SEPARATOR)
+ .append(METADATA_FILE)
+ .toString();
+ }
+
+ public String getVersionLocalMetadataPath(final String version) {
+ return new StringBuilder()
+ .append(m_group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR))
+ .append(FILE_SEPARATOR)
+ .append(m_artifact)
+ .append(FILE_SEPARATOR)
+ .append(version)
+ .append(FILE_SEPARATOR)
+ .append(METADATA_FILE_LOCAL)
+ .toString();
+ }
+
+ public String getArtifactLocalMetdataPath() {
+ return new StringBuilder()
+ .append(m_group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR))
+ .append(FILE_SEPARATOR)
+ .append(m_artifact)
+ .append(FILE_SEPARATOR)
+ .append(METADATA_FILE_LOCAL)
+ .toString();
+ }
+
+ public String getArtifactMetdataPath() {
+ return new StringBuilder()
+ .append(m_group.replaceAll(GROUP_SEPARATOR, FILE_SEPARATOR))
+ .append(FILE_SEPARATOR)
+ .append(m_artifact)
+ .append(FILE_SEPARATOR)
+ .append(METADATA_FILE)
+ .toString();
+ }
+}
Added: openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java?rev=1232590&view=auto
==============================================================================
--- openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java (added)
+++ openejb/trunk/openejb/utils/openejb-provisionning/src/main/java/org/apache/openejb/resolver/maven/package-info.java Tue Jan 17 21:36:23 2012
@@ -0,0 +1,2 @@
+// mainly copied from pax-url-aether
+package org.apache.openejb.resolver.maven;
Modified: openejb/trunk/openejb/utils/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/utils/pom.xml?rev=1232590&r1=1232589&r2=1232590&view=diff
==============================================================================
--- openejb/trunk/openejb/utils/pom.xml (original)
+++ openejb/trunk/openejb/utils/pom.xml Tue Jan 17 21:36:23 2012
@@ -32,5 +32,6 @@
<module>openejb-logging</module>
<module>openejb-spring</module>
<module>openejb-core-hibernate</module>
+ <module>openejb-provisionning</module>
</modules>
</project>