API
メソッドを持つ がありますOutputStream getOutputStream(String id)
- これ
API
には 2 つの具体的な実装がFileService
あります。S3Service
- 次のことを行う documentManager があります
public void putDocument(@Nonnull final Document document) throws IllegalArgumentException, PersistenceException { final OutputStream stream = persistenceService.getOutputStream(document.getUniqueId()); try { jaxbContext.createMarshaller().marshal(document, stream); } catch (final JAXBException e) { LOGGER.error(e.getMessage(), e); throw new PersistenceException("Failed to marshall document " + document.getUniqueId() + ": " + e.getMessage(), e); } finally { try { stream.close(); } catch (IOException e) { throw new PersistenceException("Failed to close output stream for " + document.getUniqueId()); } } }
persistenceService によって返される書き込みDocumentManager
先outputStream
- この実装は、
FileService
- では、これを準拠するため
S3Service
に変換する必要があります(ここ)OutputStream
InputStream
Amazon S3 API
だから私は次のことをしました
S3Service.getOutputStream
public OutputStream getOutputStream(@Nonnull final String uniqueId) throws PersistenceException { final PipedOutputStream outputStream = new PipedOutputStream(); final PipedInputStream inputStream; try { inputStream = new PipedInputStream(outputStream); new Thread( new Runnable() { @Override public void run() { ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentType("application/octet-stream"); PutObjectRequest putObjectRequest = new PutObjectRequest("haritdev.sunrun", "sample.file.key", inputStream, objectMetadata); PutObjectResult result = amazonS3Client.putObject(putObjectRequest); LOGGER.info("result - " + result.toString()); try { inputStream.close(); } catch (IOException e) { } } } ).start(); } catch (AmazonS3Exception e) { throw new PersistenceException("could not generate output stream for " + uniqueId, e); } catch (IOException e) { throw new PersistenceException("could not generate input stream for S3 for " + uniqueId, e); } try { return new GZIPOutputStream(outputStream); } catch (IOException e) { LOGGER.error(e.getMessage(), e); throw new PersistenceException("Failed to get output stream for " + uniqueId + ": " + e.getMessage(), e); } }
これをデバッグすると、しばらくしてプロセスが終了し、ドキュメントが書き込まれないことがわかります。この実装は間違っていますか?