Skip to content

Commit 004f710

Browse files
authored
Support jni inside jar (#826)
* Update sdk usage * Support jni inside jar
1 parent d0a090d commit 004f710

File tree

2 files changed

+42
-15
lines changed

2 files changed

+42
-15
lines changed

build.gradle

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ googleJavaFormat {
125125
}
126126

127127
dependencies {
128-
api("org.fisco-bcos:fisco-bcos-tars-sdk:${tarsSDKVersion}")
128+
api("org.fisco-bcos:fisco-bcos-tars-sdk" + ":${tarsSDKVersion}")
129129
api("org.fisco-bcos:bcos-sdk-jni:${bcosSdkJniVersion}") {
130130
exclude group : "org.slf4j"
131131
exclude group : "com.fasterxml.jackson.core"
@@ -136,14 +136,10 @@ dependencies {
136136
api("org.apache.commons:commons-lang3:${commonsLang3Version}")
137137
api("com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}")
138138
api("commons-io:commons-io:${commonsIOVersion}")
139-
// api("com.webank:key-mini-toolkit:${keyMiniToolkit}")
140139
api("com.webank:webank-blockchain-java-crypto:${webankJavaCryptoVersion}")
141140
api("com.moandjiezana.toml:toml4j:${toml4jVersion}") {
142141
exclude group: "com.google.code.gson"
143142
}
144-
// api("org.apache.commons:commons-configuration2:${config2Version}"){
145-
// exclude group: "commons-logging"
146-
// }
147143

148144
integrationTestImplementation project
149145
integrationWasmTestImplementation project
@@ -262,7 +258,7 @@ publishing {
262258

263259
jar {
264260
// destinationDir file('dist/apps')
265-
archiveName "fisco-bcos-" + project.name + '-' + project.version + '.jar'
261+
archiveFileName="fisco-bcos-" + project.name + '-' + project.version + '.jar'
266262
exclude '**/*.xml'
267263
exclude '**/*.properties'
268264

src/main/java/org/fisco/bcos/sdk/v3/client/TarsClient.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package org.fisco.bcos.sdk.v3.client;
22

3+
import java.io.File;
4+
import java.io.InputStream;
35
import java.math.BigInteger;
4-
import java.net.URL;
6+
import java.nio.file.Files;
57
import java.util.Objects;
8+
import java.util.UUID;
69
import java.util.concurrent.ArrayBlockingQueue;
710
import java.util.concurrent.ConcurrentHashMap;
811
import java.util.concurrent.ThreadPoolExecutor;
912
import java.util.concurrent.TimeUnit;
13+
import java.util.concurrent.atomic.AtomicBoolean;
1014
import java.util.concurrent.atomic.AtomicInteger;
1115
import java.util.stream.Collectors;
1216
import org.fisco.bcos.sdk.tars.Callback;
@@ -90,8 +94,11 @@ public void setTransactionFactory(TransactionFactoryImpl transactionFactory) {
9094
this.transactionFactory = transactionFactory;
9195
}
9296

93-
protected TarsClient(String groupID, ConfigOption configOption, long nativePointer) {
97+
protected TarsClient(String groupID, ConfigOption configOption, long nativePointer)
98+
throws Exception {
9499
super(groupID, configOption, nativePointer);
100+
101+
loadLibrary();
95102
String connectionString =
96103
RPCClient.toConnectionString(
97104
new StringVector(configOption.getNetworkConfig().getTarsPeers()));
@@ -133,16 +140,40 @@ public void onMessage(int seq) {
133140
};
134141
}
135142

136-
public static void loadLibrary() {
137-
URL configUrl = TarsClient.class.getClassLoader().getResource(libFileName);
138-
System.load(configUrl.getPath());
139-
}
143+
private static AtomicBoolean loaded = new AtomicBoolean(false);
140144

141-
public static void loadLibrary(String libPath) {
142-
System.load(libPath);
145+
private static void loadLibrary() throws Exception {
146+
boolean inited = loaded.getAndSet(true);
147+
if (inited) {
148+
return;
149+
}
150+
try {
151+
File jniFile = File.createTempFile(libFileName, UUID.randomUUID().toString());
152+
String osName = System.getProperty("os.name");
153+
if (osName.contains("Linux")) osName = "linux";
154+
else if (osName.contains("Mac OS X")) osName = "darwin";
155+
else if (osName.contains("Windows")) osName = "windows";
156+
157+
String osArch = System.getProperty("os.arch");
158+
if (osArch.contains("amd64")) osArch = "x86_64";
159+
160+
InputStream jniStream =
161+
TarsClient.class.getResourceAsStream(
162+
"/" + osName + "-" + osArch + "/" + libFileName);
163+
Files.copy(
164+
jniStream,
165+
jniFile.getAbsoluteFile().toPath(),
166+
java.nio.file.StandardCopyOption.REPLACE_EXISTING);
167+
System.load(jniFile.getAbsolutePath());
168+
jniFile.deleteOnExit();
169+
} catch (Exception e) {
170+
e.printStackTrace();
171+
throw e;
172+
}
143173
}
144174

145-
public static TarsClient build(String groupId, ConfigOption configOption, long nativePointer) {
175+
public static TarsClient build(String groupId, ConfigOption configOption, long nativePointer)
176+
throws Exception {
146177
logger.info(
147178
"TarsClient build, groupID: {}, configOption: {}, nativePointer: {}",
148179
groupId,

0 commit comments

Comments
 (0)