После нескольких испытаний я обнаружил, что использовать модуль multinode вообще невозможно.Поскольку мультиузел зависит от модуля entity-store и наоборот.Таким образом, включение модуля multinode в конфигурацию Gradle хранилища сущностей вызывает циклическую зависимость.
Во всяком случае, я все еще пытаюсь взломать.По сути, основная проблема, которую я нахожу, - это создание S3BlobVault
, так как легко (ре) создать S3DataReaderWriterProvider
из-за пределов проекта Xodus, основной проблемой является S3BlobVault
, который нуждается в экземпляре PersistentEntityStoreImpl
это означает, что его (S3BlobVault
) необходимо создать внутри / внутри PersistentEntityStoreImpl
, что совершенно невозможно из-за проблемы круговой зависимости.
По крайней мере, я это сделализмените PersistentEntityStoreImpl и добавьте:
public void setBlobVault(BlobVault blobVault) {
this.blobVault = blobVault;
}
Затем в своем коде (приложении) я добавил
final PersistentEntityStoreImpl store = PersistentEntityStores.newInstance(environment);
S3BlobVault s3BlobVault = createS3BlobVault(store, environment.getLocation());
store.setBlobVault(s3BlobVault);
Создание хранилища следующим образом:
private S3BlobVault createS3BlobVault(PersistentEntityStoreImpl store, String location) {
try {
S3AsyncClient s3 = S3AsyncClient.builder()
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("", "")))
.endpointOverride(new URI("https://s3.wasabisys.com"))
.region(Region.US_EAST_1).build();
S3BlobVault blobVault = null;
// Can't use code below (outside of package)
// try {
// final PersistentSequenceBlobHandleGenerator.PersistentSequenceGetter persistentSequenceGetter =
// new PersistentSequenceBlobHandleGenerator.PersistentSequenceGetter() {
// @Override
// public PersistentSequence get() {
// return getSequence(getAndCheckCurrentTransaction(), BLOB_HANDLES_SEQUENCE);
// }
// };
// blobVault = new S3BlobVault(store,
// new PersistentSequenceBlobHandleGenerator(persistentSequenceGetter), s3, "xodus", location, ".blobs", null);
// } catch (UnexpectedBlobVaultVersionException e) {
// blobVault = null;
// }
if(blobVault == null) {
blobVault = new S3BlobVault(store,
BlobHandleGenerator.IMMUTABLE, s3, "xodus", location, ".blobs", null);
}
return blobVault;
} catch (Exception e) {
throw ExodusException.toExodusException(e);
}
}
Iпо-прежнему заканчивается ошибка:
Caused by: java.io.FileNotFoundException: s3:xodus\blobs\version (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
at jetbrains.exodus.entitystore.FileSystemBlobVaultOld.<init>(FileSystemBlobVaultOld.java:106)
at jetbrains.exodus.entitystore.FileSystemBlobVaultOld.<init>(FileSystemBlobVaultOld.java:71)
at jetbrains.exodus.entitystore.PersistentEntityStoreImpl.createDefaultFSBlobVault(PersistentEntityStoreImpl.java:424)
... 95 more