use of com.alipay.sofa.ark.loader.archive.JarFileArchive in project sofa-ark by alipay.
the class PluginFactoryServiceTest method testCreatePluginWithExtensions.
@Test
public void testCreatePluginWithExtensions() throws Throwable {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL samplePlugin = cl.getResource("sample-plugin.jar");
File file = new File(samplePlugin.getFile());
JarFile pluginFile = new JarFile(file);
JarFileArchive jarFileArchive = new JarFileArchive(pluginFile);
JarPluginArchive jarPluginArchive = new JarPluginArchive(jarFileArchive);
// inject
URL[] extensions = new URL[1];
URL sampleBiz = cl.getResource("sample-biz.jar");
JarFile bizFile = new JarFile(new File(sampleBiz.getFile()));
extensions[0] = bizFile.getUrl();
// export
Set<String> exportPackages = new HashSet<>();
exportPackages.add("com.alipay.test.export.*");
ArkConfigs.putStringValue(String.format(PLUGIN_EXTENSION_FORMAT, "sample-ark-plugin"), "tracer-core:3.0.10");
Plugin plugin = pluginFactoryService.createPlugin(jarPluginArchive, extensions, exportPackages);
Assert.assertNotNull(plugin);
Assert.assertEquals(plugin.getExportPackages().size(), 2);
Assert.assertTrue(Arrays.asList(plugin.getClassPath()).contains(bizFile.getUrl()));
}
use of com.alipay.sofa.ark.loader.archive.JarFileArchive in project sofa-ark by alipay.
the class BaseExecutableArchiveLauncher method createArchive.
/**
* Returns the executable file archive
* @return executable file archive
* @throws Exception
*/
protected ExecutableArchive createArchive() throws Exception {
ProtectionDomain protectionDomain = getClass().getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
URI location = (codeSource == null ? null : codeSource.getLocation().toURI());
String path = (location == null ? null : location.getSchemeSpecificPart());
if (path == null) {
throw new IllegalStateException("Unable to determine code source archive");
}
File root = new File(path);
if (!root.exists()) {
throw new IllegalStateException("Unable to determine code source archive from " + root);
}
return root.isDirectory() ? new ExecutableArkBizJar(new ExplodedArchive(root)) : new ExecutableArkBizJar(new JarFileArchive(root), root.toURI().toURL());
}
use of com.alipay.sofa.ark.loader.archive.JarFileArchive in project sofa-ark by alipay.
the class EmbedClassPathArchive method getUrlJarFileArchive.
protected JarFileArchive getUrlJarFileArchive(URL url) throws IOException {
String file = url.getFile();
if (file.contains(FILE_IN_JAR)) {
int pos = file.indexOf(FILE_IN_JAR);
File fatJarFile = new File(file.substring(0, pos));
String nestedJar = file.substring(file.lastIndexOf("/") + 1);
JarFileArchive fatJarFileArchive = new JarFileArchive(fatJarFile);
List<Archive> matched = fatJarFileArchive.getNestedArchives(entry -> entry.getName().contains(nestedJar));
return (JarFileArchive) matched.get(0);
} else {
return new JarFileArchive(new File(file));
}
}
use of com.alipay.sofa.ark.loader.archive.JarFileArchive in project sofa-ark by alipay.
the class ArkContainer method main.
public static Object main(String[] args) throws ArkRuntimeException {
if (args.length < MINIMUM_ARGS_SIZE) {
throw new ArkRuntimeException("Please provide suitable arguments to continue !");
}
try {
LaunchCommand launchCommand = LaunchCommand.parse(args);
if (launchCommand.isExecutedByCommandLine()) {
ExecutableArkBizJar executableArchive;
File rootFile = new File(URLDecoder.decode(launchCommand.getExecutableArkBizJar().getFile()));
if (rootFile.isDirectory()) {
executableArchive = new ExecutableArkBizJar(new ExplodedArchive(rootFile));
} else {
executableArchive = new ExecutableArkBizJar(new JarFileArchive(rootFile, launchCommand.getExecutableArkBizJar()));
}
return new ArkContainer(executableArchive, launchCommand).start();
} else {
ClassPathArchive classPathArchive;
if (ArkConfigs.isEmbedEnable()) {
classPathArchive = new EmbedClassPathArchive(launchCommand.getEntryClassName(), launchCommand.getEntryMethodName(), launchCommand.getClasspath());
} else {
classPathArchive = new ClassPathArchive(launchCommand.getEntryClassName(), launchCommand.getEntryMethodName(), launchCommand.getClasspath());
}
return new ArkContainer(classPathArchive, launchCommand).start();
}
} catch (IOException e) {
throw new ArkRuntimeException(String.format("SOFAArk startup failed, commandline=%s", LaunchCommand.toString(args)), e);
}
}
use of com.alipay.sofa.ark.loader.archive.JarFileArchive in project sofa-ark by alipay.
the class BizFactoryServiceImpl method createBiz.
@Override
public Biz createBiz(File file) throws IOException {
BizArchive bizArchive;
if (ArkConfigs.isEmbedEnable()) {
File unpackFile = new File(file.getAbsolutePath() + "-unpack");
if (!unpackFile.exists()) {
unpackFile = FileUtils.unzip(file, file.getAbsolutePath() + "-unpack");
}
if (file.exists()) {
file.delete();
}
file = unpackFile;
bizArchive = new ExplodedBizArchive(unpackFile);
} else {
JarFile bizFile = new JarFile(file);
JarFileArchive jarFileArchive = new JarFileArchive(bizFile);
bizArchive = new JarBizArchive(jarFileArchive);
}
BizModel biz = (BizModel) createBiz(bizArchive);
biz.setBizTempWorkDir(file);
return biz;
}
Aggregations