version
instead on newWorkingCopy
as it looks like you have no need for a real private working copy that can be edited multiple times and saved before versioning?
version
, not workingCopy
. Working copies is a construct brought over from CMIS and is meant for use cases where you have a user that will want to edit their 'word doc' many times before versioning it. Your code suggests you dont want working copies. You just want to version
save
and setContent
and because it is handled by hibernate removes the need for the pessimistic locking. It is more of an auditing thing but I mention it because it might be a better solution for you, depending on your use case.
workingCopy
doesn't set @SuccessorId, I think I have to use this method
version
can replaced with workingCopy
?
Is it theoretically possible to place two store systems on classpath e.g. s3 and filesystem and based on the application property switch which one should be used ?
I tried something like this:
@ConditionalOnProperty(prefix = "springcontentdemo.storage", name = "type", havingValue = "filesystem")
@EnableFilesystemStores("com.springcontentdemo.store")
@Configuration
public class FilesystemStorageConfig { ... }
@ConditionalOnProperty(prefix = "springcontentdemo.storage.", name = "type", havingValue = "s3", matchIfMissing = true)
@EnableS3Stores("com.springcontentdemo.store")
@Configuration
public class S3StorageConfig { ... }
and i have spring-content-fs and spring-content-s3 as project dependencies and it is not working ... content store beans are not created ... it looks like FilesystemStoreRegistrar and S3StoresRegistrar are in conflict in case they both are on classpath.
Even in case I remove one of these two spring config classes then it does not help ... it starts working only when I remove one of these two dependencies (s3 or fs) from project
Is it ok that in DefaultS3StoreImpl#setContent(S, java.io.InputStream)
method os
variable is closed twice ? one using IOUtils.closeQuietly(os)
and the second time in finally block os.close()
?
problem is that this second closing of output stream sometimes (not sure when and why) causes that SimpleStorageResource.finishSimpleUpload() method is invoked again, so s3client is uploading file twice and the second try fails with this error:Caused by: com.amazonaws.SdkClientException: Unable to verify integrity of data upload. Client calculated content hash (contentMD5: FQeFaRaSLRVt4MnXW7KyWQ== in base 64) didn't match hash (etag: 5289df737df57326fcdd22597afb1fac in hex) calculated by Amazon S3.
I can reproduce it very easily when I try to call setContent method twice with different stream, e.g. something like this:
designPlanAttachmentStore.setContent(attachment, new ByteArrayInputStream(FILE_DATA));
designPlanAttachmentStore.setContent(attachment2, new ByteArrayInputStream(FILE_DATA_2));
the first setContent call is always successful (calling of os.close() in finally block does not trigger finishSimpleUpload()), but it always fails on the second setContent call as in this case os.close() in finally block trigger finishSimpleUpload()
I'm not sure if problem is this os.close()
in finally block or there is some issue in SimpleStorageResource
Hi @paulcwarren,
My organization is reviewing CMS frameworks. Do you have any updates on spring-content graduating to spring-projects in GitHub? I saw your post from 2018 (paulcwarren/spring-content#45). Also, do you have any names you can share about companies or groups currently using spring-content?
org.springframework.transaction.IllegalTransactionStateException:
Pre-bound JDBC Connection found! JpaTransactionManager does not support running within
DataSourceTransactionManager if told to manage the DataSource itself.
It is recommended to use a single JpaTransactionManager for all transactions on a single DataSource, no matter whether JPA or JDBC access.
after I setContent
with jpa with postgres db. latest spring boot + content. This seem to happen when TM is accessed on same thread from different source. Its probably config issue on my side, but Im not very well versed. Any ideas?
Hi Paul, I am having problems with S3ContentStore and aws-messaging dependencies.
I am using S3ContentStore with no problems until I added the aws-messaging dependency to use amazon sqs service.
Now, I can't start the app, this is the error at startup:
Parameter 1 of constructor in internal.org.springframework.content.s3.config.S3StoreFactoryBean required a single bean, but 2 were found:
- s3Client: defined by method 's3Client' in class path resource [internal/org/springframework/content/s3/boot/autoconfigure/S3ContentAutoConfiguration.class]
- amazonS3: defined in null
Without this dependency the application runs properly, any idea?
I am using Spring Boot 2.4.5 and Spring Content 1.2.4
Thanks!