embulk 0.7.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.ruby-version +1 -0
- data/.travis.yml +18 -0
- data/COPYING +14 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +31 -0
- data/README.md +206 -0
- data/Rakefile +26 -0
- data/appveyor.yml +20 -0
- data/bin/embulk +106 -0
- data/build.gradle +338 -0
- data/embulk-cli/build.gradle +6 -0
- data/embulk-cli/src/main/java/org/embulk/cli/Main.java +22 -0
- data/embulk-cli/src/main/sh/selfrun.sh +158 -0
- data/embulk-cli/src/test/java/org/embulk/cli/DummyMain.java +23 -0
- data/embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java +281 -0
- data/embulk-core/build.gradle +59 -0
- data/embulk-core/src/main/java/org/embulk/EmbulkEmbed.java +315 -0
- data/embulk-core/src/main/java/org/embulk/EmbulkService.java +76 -0
- data/embulk-core/src/main/java/org/embulk/command/PreviewPrinter.java +84 -0
- data/embulk-core/src/main/java/org/embulk/command/TablePreviewPrinter.java +107 -0
- data/embulk-core/src/main/java/org/embulk/command/VerticalPreviewPrinter.java +47 -0
- data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +33 -0
- data/embulk-core/src/main/java/org/embulk/config/Config.java +15 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +15 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigDiff.java +29 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigInject.java +14 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +141 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +31 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSource.java +39 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +231 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +84 -0
- data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +123 -0
- data/embulk-core/src/main/java/org/embulk/config/Task.java +10 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +180 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskReport.java +29 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +345 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +31 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +38 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
- data/embulk-core/src/main/java/org/embulk/exec/BulkLoader.java +652 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +52 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecutionInterruptedException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecutionResult.java +26 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
- data/embulk-core/src/main/java/org/embulk/exec/ForGuess.java +16 -0
- data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +16 -0
- data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +373 -0
- data/embulk-core/src/main/java/org/embulk/exec/LocalExecutorPlugin.java +129 -0
- data/embulk-core/src/main/java/org/embulk/exec/LocalThreadExecutor.java +34 -0
- data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +60 -0
- data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/PartialExecutionException.java +18 -0
- data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +77 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +183 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +27 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +17 -0
- data/embulk-core/src/main/java/org/embulk/exec/ResumeState.java +100 -0
- data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +136 -0
- data/embulk-core/src/main/java/org/embulk/exec/SetCurrentThreadName.java +19 -0
- data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
- data/embulk-core/src/main/java/org/embulk/exec/TempFileAllocator.java +35 -0
- data/embulk-core/src/main/java/org/embulk/guice/Bootstrap.java +157 -0
- data/embulk-core/src/main/java/org/embulk/guice/CloseableInjector.java +22 -0
- data/embulk-core/src/main/java/org/embulk/guice/InjectorProxy.java +145 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjector.java +26 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjectorProxy.java +61 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleManager.java +187 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethods.java +89 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethodsMap.java +38 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleModule.java +97 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +72 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +119 -0
- data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +17 -0
- data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +96 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java +168 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderFactory.java +9 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderModule.java +71 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +78 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +6 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +19 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +47 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/InputPluginWrapper.java +102 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/PluginWrappers.java +30 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileInputWrapper.java +96 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileOutputWrapper.java +102 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalPageOutputWrapper.java +95 -0
- data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +148 -0
- data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +8 -0
- data/embulk-core/src/main/java/org/embulk/spi/Column.java +92 -0
- data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +112 -0
- data/embulk-core/src/main/java/org/embulk/spi/ColumnVisitor.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +16 -0
- data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +16 -0
- data/embulk-core/src/main/java/org/embulk/spi/Exec.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +217 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecutorPlugin.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/Extension.java +44 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +11 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +30 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +162 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +13 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +28 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +202 -0
- data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +9 -0
- data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +33 -0
- data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +29 -0
- data/embulk-core/src/main/java/org/embulk/spi/Page.java +51 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +338 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +47 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +11 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +226 -0
- data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/ProcessState.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/ProcessTask.java +117 -0
- data/embulk-core/src/main/java/org/embulk/spi/Schema.java +134 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +93 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfigException.java +22 -0
- data/embulk-core/src/main/java/org/embulk/spi/TaskState.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/TempFileException.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/TempFileSpace.java +87 -0
- data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelper.java +8 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelperFactory.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +159 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +100 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +97 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +104 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +49 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +58 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +41 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +15 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +44 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ByteSize.java +156 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFile.java +106 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFileSerDe.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ToString.java +54 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ToStringMap.java +34 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnNotFoundException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetter.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetterFactory.java +94 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicPageBuilder.java +161 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Executors.java +95 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +111 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +119 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +100 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +190 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +25 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +65 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +118 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +123 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +38 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/OutputStreamFileOutput.java +88 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +102 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +139 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/ResumableInputStream.java +128 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/RetryExecutor.java +130 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +53 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/AbstractDynamicColumnSetter.java +79 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/BooleanColumnSetter.java +64 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DefaultValueSetter.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DoubleColumnSetter.java +61 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/LongColumnSetter.java +69 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/NullDefaultValueSetter.java +34 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/SkipColumnSetter.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/StringColumnSetter.java +56 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/TimestampColumnSetter.java +64 -0
- data/embulk-core/src/main/resources/embulk/logback-color.xml +72 -0
- data/embulk-core/src/main/resources/embulk/logback-console.xml +14 -0
- data/embulk-core/src/main/resources/embulk/logback-file.xml +25 -0
- data/embulk-core/src/main/resources/embulk/parent_first_packages.properties +70 -0
- data/embulk-core/src/main/resources/embulk/parent_first_resources.properties +28 -0
- data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +114 -0
- data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +72 -0
- data/embulk-core/src/test/java/org/embulk/RandomManager.java +53 -0
- data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +23 -0
- data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +17 -0
- data/embulk-core/src/test/java/org/embulk/config/TestConfigLoader.java +66 -0
- data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +114 -0
- data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +70 -0
- data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +58 -0
- data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +18 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +63 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +101 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +73 -0
- data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +57 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestBuffer.java +24 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +89 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +196 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +207 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +188 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +319 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +116 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +63 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParserDeprecated.java +67 -0
- data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
- data/embulk-core/src/test/java/org/embulk/spi/unit/TestByteSize.java +79 -0
- data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +132 -0
- data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +123 -0
- data/embulk-docs/Makefile +178 -0
- data/embulk-docs/build.gradle +32 -0
- data/embulk-docs/make.bat +243 -0
- data/embulk-docs/push-gh-pages.sh +49 -0
- data/embulk-docs/src/_static/embulk-architecture.png +0 -0
- data/embulk-docs/src/_static/embulk-logo.png +0 -0
- data/embulk-docs/src/_static/embulk-logo.svg +133 -0
- data/embulk-docs/src/built-in.rst +440 -0
- data/embulk-docs/src/conf.py +260 -0
- data/embulk-docs/src/customization.rst +184 -0
- data/embulk-docs/src/index.rst +84 -0
- data/embulk-docs/src/recipe.rst +8 -0
- data/embulk-docs/src/recipe/scheduled-csv-load-to-elasticsearch-kibana4.rst +153 -0
- data/embulk-docs/src/release.rst +57 -0
- data/embulk-docs/src/release/release-0.1.0.rst +8 -0
- data/embulk-docs/src/release/release-0.2.0.rst +16 -0
- data/embulk-docs/src/release/release-0.2.1.rst +19 -0
- data/embulk-docs/src/release/release-0.3.0.rst +34 -0
- data/embulk-docs/src/release/release-0.3.1.rst +11 -0
- data/embulk-docs/src/release/release-0.3.2.rst +15 -0
- data/embulk-docs/src/release/release-0.4.0.rst +74 -0
- data/embulk-docs/src/release/release-0.4.1.rst +18 -0
- data/embulk-docs/src/release/release-0.4.10.rst +17 -0
- data/embulk-docs/src/release/release-0.4.2.rst +18 -0
- data/embulk-docs/src/release/release-0.4.3.rst +34 -0
- data/embulk-docs/src/release/release-0.4.4.rst +39 -0
- data/embulk-docs/src/release/release-0.4.5.rst +24 -0
- data/embulk-docs/src/release/release-0.4.6.rst +30 -0
- data/embulk-docs/src/release/release-0.4.7.rst +16 -0
- data/embulk-docs/src/release/release-0.4.8.rst +15 -0
- data/embulk-docs/src/release/release-0.4.9.rst +23 -0
- data/embulk-docs/src/release/release-0.5.0.rst +89 -0
- data/embulk-docs/src/release/release-0.5.1.rst +13 -0
- data/embulk-docs/src/release/release-0.5.2.rst +30 -0
- data/embulk-docs/src/release/release-0.5.3.rst +22 -0
- data/embulk-docs/src/release/release-0.5.4.rst +24 -0
- data/embulk-docs/src/release/release-0.5.5.rst +18 -0
- data/embulk-docs/src/release/release-0.6.0.rst +34 -0
- data/embulk-docs/src/release/release-0.6.1.rst +11 -0
- data/embulk-docs/src/release/release-0.6.10.rst +15 -0
- data/embulk-docs/src/release/release-0.6.11.rst +19 -0
- data/embulk-docs/src/release/release-0.6.12.rst +31 -0
- data/embulk-docs/src/release/release-0.6.13.rst +23 -0
- data/embulk-docs/src/release/release-0.6.14.rst +47 -0
- data/embulk-docs/src/release/release-0.6.15.rst +26 -0
- data/embulk-docs/src/release/release-0.6.16.rst +26 -0
- data/embulk-docs/src/release/release-0.6.17.rst +39 -0
- data/embulk-docs/src/release/release-0.6.18.rst +14 -0
- data/embulk-docs/src/release/release-0.6.19.rst +18 -0
- data/embulk-docs/src/release/release-0.6.2.rst +17 -0
- data/embulk-docs/src/release/release-0.6.20.rst +19 -0
- data/embulk-docs/src/release/release-0.6.21.rst +20 -0
- data/embulk-docs/src/release/release-0.6.22.rst +26 -0
- data/embulk-docs/src/release/release-0.6.23.rst +17 -0
- data/embulk-docs/src/release/release-0.6.24.rst +13 -0
- data/embulk-docs/src/release/release-0.6.25.rst +12 -0
- data/embulk-docs/src/release/release-0.6.3.rst +23 -0
- data/embulk-docs/src/release/release-0.6.4.rst +13 -0
- data/embulk-docs/src/release/release-0.6.5.rst +17 -0
- data/embulk-docs/src/release/release-0.6.6.rst +17 -0
- data/embulk-docs/src/release/release-0.6.7.rst +17 -0
- data/embulk-docs/src/release/release-0.6.8.rst +24 -0
- data/embulk-docs/src/release/release-0.6.9.rst +24 -0
- data/embulk-docs/src/release/release-0.7.0.rst +96 -0
- data/embulk-standards/build.gradle +5 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +284 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +379 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +411 -0
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +55 -0
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +71 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +203 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +148 -0
- data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +59 -0
- data/embulk-standards/src/main/java/org/embulk/standards/RenameFilterPlugin.java +56 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +16 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +53 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +85 -0
- data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +1 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvFormatterPlugin.java +312 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +75 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +360 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestRenameFilterPlugin.java +88 -0
- data/embulk.gemspec +39 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/gradlew +164 -0
- data/gradlew.bat +90 -0
- data/lib/embulk.rb +72 -0
- data/lib/embulk/buffer.rb +22 -0
- data/lib/embulk/column.rb +70 -0
- data/lib/embulk/command/embulk_bundle.rb +56 -0
- data/lib/embulk/command/embulk_example.rb +32 -0
- data/lib/embulk/command/embulk_generate_bin.rb +62 -0
- data/lib/embulk/command/embulk_main.rb +2 -0
- data/lib/embulk/command/embulk_migrate_plugin.rb +170 -0
- data/lib/embulk/command/embulk_new_plugin.rb +124 -0
- data/lib/embulk/command/embulk_run.rb +470 -0
- data/lib/embulk/command/embulk_selfupdate.rb +84 -0
- data/lib/embulk/data/bundle/.bundle/config +3 -0
- data/lib/embulk/data/bundle/.ruby-version +1 -0
- data/lib/embulk/data/bundle/Gemfile +26 -0
- data/lib/embulk/data/bundle/embulk/filter/example.rb +42 -0
- data/lib/embulk/data/bundle/embulk/input/example.rb +54 -0
- data/lib/embulk/data/bundle/embulk/output/example.rb +58 -0
- data/lib/embulk/data/new/LICENSE.txt +21 -0
- data/lib/embulk/data/new/README.md.erb +111 -0
- data/lib/embulk/data/new/gitignore.erb +13 -0
- data/lib/embulk/data/new/java/build.gradle.erb +73 -0
- data/lib/embulk/data/new/java/decoder.java.erb +84 -0
- data/lib/embulk/data/new/java/encoder.java.erb +86 -0
- data/lib/embulk/data/new/java/file_input.java.erb +143 -0
- data/lib/embulk/data/new/java/file_output.java.erb +93 -0
- data/lib/embulk/data/new/java/filter.java.erb +56 -0
- data/lib/embulk/data/new/java/formatter.java.erb +54 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/lib/embulk/data/new/java/gradlew +164 -0
- data/lib/embulk/data/new/java/gradlew.bat +90 -0
- data/lib/embulk/data/new/java/input.java.erb +87 -0
- data/lib/embulk/data/new/java/output.java.erb +77 -0
- data/lib/embulk/data/new/java/parser.java.erb +60 -0
- data/lib/embulk/data/new/java/plugin_loader.rb.erb +3 -0
- data/lib/embulk/data/new/java/test.java.erb +5 -0
- data/lib/embulk/data/new/ruby/.ruby-version +1 -0
- data/lib/embulk/data/new/ruby/Gemfile +2 -0
- data/lib/embulk/data/new/ruby/Rakefile +3 -0
- data/lib/embulk/data/new/ruby/decoder_guess.rb.erb +25 -0
- data/lib/embulk/data/new/ruby/filter.rb.erb +41 -0
- data/lib/embulk/data/new/ruby/formatter.rb.erb +49 -0
- data/lib/embulk/data/new/ruby/gemspec.erb +20 -0
- data/lib/embulk/data/new/ruby/input.rb.erb +59 -0
- data/lib/embulk/data/new/ruby/output.rb.erb +61 -0
- data/lib/embulk/data/new/ruby/parser.rb.erb +44 -0
- data/lib/embulk/data/new/ruby/parser_guess.rb.erb +65 -0
- data/lib/embulk/data/package_data.rb +50 -0
- data/lib/embulk/data_source.rb +220 -0
- data/lib/embulk/decoder_plugin.rb +27 -0
- data/lib/embulk/encoder_plugin.rb +27 -0
- data/lib/embulk/error.rb +8 -0
- data/lib/embulk/executor_plugin.rb +23 -0
- data/lib/embulk/file_input.rb +87 -0
- data/lib/embulk/file_input_plugin.rb +27 -0
- data/lib/embulk/file_output.rb +56 -0
- data/lib/embulk/file_output_plugin.rb +27 -0
- data/lib/embulk/filter_plugin.rb +105 -0
- data/lib/embulk/formatter_plugin.rb +105 -0
- data/lib/embulk/guess/charset.rb +44 -0
- data/lib/embulk/guess/csv.rb +327 -0
- data/lib/embulk/guess/gzip.rb +18 -0
- data/lib/embulk/guess/newline.rb +22 -0
- data/lib/embulk/guess/schema_guess.rb +118 -0
- data/lib/embulk/guess/time_format_guess.rb +394 -0
- data/lib/embulk/guess_plugin.rb +129 -0
- data/lib/embulk/input_plugin.rb +121 -0
- data/lib/embulk/java/bootstrap.rb +24 -0
- data/lib/embulk/java/imports.rb +69 -0
- data/lib/embulk/java/time_helper.rb +79 -0
- data/lib/embulk/java_plugin.rb +90 -0
- data/lib/embulk/logger.rb +154 -0
- data/lib/embulk/output_plugin.rb +150 -0
- data/lib/embulk/page.rb +30 -0
- data/lib/embulk/page_builder.rb +76 -0
- data/lib/embulk/parser_plugin.rb +78 -0
- data/lib/embulk/plugin.rb +239 -0
- data/lib/embulk/plugin_registry.rb +96 -0
- data/lib/embulk/runner.rb +184 -0
- data/lib/embulk/schema.rb +103 -0
- data/lib/embulk/version.rb +3 -0
- data/settings.gradle +6 -0
- data/test/guess/test_schema_guess.rb +11 -0
- data/test/guess/test_time_format_guess.rb +133 -0
- data/test/helper.rb +21 -0
- data/test/run-test.rb +14 -0
- metadata +566 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015 Sadayuki Furuhashi
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
package org.embulk.guice;
|
|
17
|
+
|
|
18
|
+
import com.google.inject.Injector;
|
|
19
|
+
|
|
20
|
+
public interface CloseableInjector
|
|
21
|
+
extends LifeCycleInjector, AutoCloseable
|
|
22
|
+
{ }
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015 Sadayuki Furuhashi
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
package org.embulk.guice;
|
|
17
|
+
|
|
18
|
+
import com.google.inject.Binding;
|
|
19
|
+
import com.google.inject.Injector;
|
|
20
|
+
import com.google.inject.Key;
|
|
21
|
+
import com.google.inject.MembersInjector;
|
|
22
|
+
import com.google.inject.Module;
|
|
23
|
+
import com.google.inject.Provider;
|
|
24
|
+
import com.google.inject.Scope;
|
|
25
|
+
import com.google.inject.TypeLiteral;
|
|
26
|
+
import com.google.inject.spi.TypeConverterBinding;
|
|
27
|
+
|
|
28
|
+
import java.lang.annotation.Annotation;
|
|
29
|
+
import java.util.List;
|
|
30
|
+
import java.util.Map;
|
|
31
|
+
import java.util.Set;
|
|
32
|
+
|
|
33
|
+
abstract class InjectorProxy
|
|
34
|
+
implements Injector
|
|
35
|
+
{
|
|
36
|
+
protected abstract Injector injector();
|
|
37
|
+
|
|
38
|
+
@Override
|
|
39
|
+
public void injectMembers(Object instance)
|
|
40
|
+
{
|
|
41
|
+
injector().injectMembers(instance);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Override
|
|
45
|
+
public <T> MembersInjector<T> getMembersInjector(TypeLiteral<T> typeLiteral)
|
|
46
|
+
{
|
|
47
|
+
return injector().getMembersInjector(typeLiteral);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@Override
|
|
51
|
+
public <T> MembersInjector<T> getMembersInjector(Class<T> type)
|
|
52
|
+
{
|
|
53
|
+
return injector().getMembersInjector(type);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Override
|
|
57
|
+
public Map<Key<?>, Binding<?>> getBindings()
|
|
58
|
+
{
|
|
59
|
+
return injector().getBindings();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@Override
|
|
63
|
+
public Map<Key<?>, Binding<?>> getAllBindings()
|
|
64
|
+
{
|
|
65
|
+
return injector().getAllBindings();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Override
|
|
69
|
+
public <T> Binding<T> getBinding(Key<T> key)
|
|
70
|
+
{
|
|
71
|
+
return injector().getBinding(key);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@Override
|
|
75
|
+
public <T> Binding<T> getBinding(Class<T> type)
|
|
76
|
+
{
|
|
77
|
+
return injector().getBinding(type);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@Override
|
|
81
|
+
public <T> Binding<T> getExistingBinding(Key<T> key)
|
|
82
|
+
{
|
|
83
|
+
return injector().getExistingBinding(key);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@Override
|
|
87
|
+
public <T> List<Binding<T>> findBindingsByType(TypeLiteral<T> type)
|
|
88
|
+
{
|
|
89
|
+
return injector().findBindingsByType(type);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@Override
|
|
93
|
+
public <T> Provider<T> getProvider(Key<T> key)
|
|
94
|
+
{
|
|
95
|
+
return injector().getProvider(key);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@Override
|
|
99
|
+
public <T> Provider<T> getProvider(Class<T> type)
|
|
100
|
+
{
|
|
101
|
+
return injector().getProvider(type);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@Override
|
|
105
|
+
public <T> T getInstance(Key<T> key)
|
|
106
|
+
{
|
|
107
|
+
return injector().getInstance(key);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@Override
|
|
111
|
+
public <T> T getInstance(Class<T> type)
|
|
112
|
+
{
|
|
113
|
+
return injector().getInstance(type);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
@Override
|
|
117
|
+
public Injector getParent()
|
|
118
|
+
{
|
|
119
|
+
return injector().getParent();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
@Override
|
|
123
|
+
public Injector createChildInjector(Iterable<? extends Module> modules)
|
|
124
|
+
{
|
|
125
|
+
return injector().createChildInjector(modules);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@Override
|
|
129
|
+
public Injector createChildInjector(Module... modules)
|
|
130
|
+
{
|
|
131
|
+
return injector().createChildInjector(modules);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@Override
|
|
135
|
+
public Map<Class<? extends Annotation>, Scope> getScopeBindings()
|
|
136
|
+
{
|
|
137
|
+
return injector().getScopeBindings();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@Override
|
|
141
|
+
public Set<TypeConverterBinding> getTypeConverterBindings()
|
|
142
|
+
{
|
|
143
|
+
return injector().getTypeConverterBindings();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015 Sadayuki Furuhashi
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
package org.embulk.guice;
|
|
17
|
+
|
|
18
|
+
import com.google.inject.Injector;
|
|
19
|
+
|
|
20
|
+
public interface LifeCycleInjector
|
|
21
|
+
extends Injector
|
|
22
|
+
{
|
|
23
|
+
boolean isDestroyed();
|
|
24
|
+
|
|
25
|
+
void destroy() throws Exception;
|
|
26
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015 Sadayuki Furuhashi
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
package org.embulk.guice;
|
|
17
|
+
|
|
18
|
+
import com.google.inject.Injector;
|
|
19
|
+
|
|
20
|
+
class LifeCycleInjectorProxy
|
|
21
|
+
extends InjectorProxy
|
|
22
|
+
implements LifeCycleInjector, CloseableInjector
|
|
23
|
+
{
|
|
24
|
+
private final Injector injector;
|
|
25
|
+
private final LifeCycleManager lifeCycleManager;
|
|
26
|
+
|
|
27
|
+
public LifeCycleInjectorProxy(Injector injector, LifeCycleManager lifeCycleManager)
|
|
28
|
+
{
|
|
29
|
+
this.injector = injector;
|
|
30
|
+
this.lifeCycleManager = lifeCycleManager;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Override
|
|
34
|
+
protected synchronized Injector injector()
|
|
35
|
+
{
|
|
36
|
+
if (isDestroyed()) {
|
|
37
|
+
throw new IllegalStateException("Injector already destroyed");
|
|
38
|
+
}
|
|
39
|
+
return injector;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Override
|
|
43
|
+
public synchronized boolean isDestroyed()
|
|
44
|
+
{
|
|
45
|
+
return lifeCycleManager.isDestroyed();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@Override
|
|
49
|
+
public synchronized void destroy()
|
|
50
|
+
throws Exception
|
|
51
|
+
{
|
|
52
|
+
lifeCycleManager.destroy(); // reentrant
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Override
|
|
56
|
+
public void close()
|
|
57
|
+
throws Exception
|
|
58
|
+
{
|
|
59
|
+
destroy();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2010 Proofpoint, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/*
|
|
17
|
+
* Copyright 2015 Sadayuki Furuhashi
|
|
18
|
+
*/
|
|
19
|
+
package org.embulk.guice;
|
|
20
|
+
|
|
21
|
+
import com.google.common.collect.Lists;
|
|
22
|
+
|
|
23
|
+
import javax.annotation.PostConstruct;
|
|
24
|
+
import javax.annotation.PreDestroy;
|
|
25
|
+
import java.lang.reflect.InvocationTargetException;
|
|
26
|
+
import java.lang.reflect.Method;
|
|
27
|
+
import java.util.Collections;
|
|
28
|
+
import java.util.List;
|
|
29
|
+
import java.util.Queue;
|
|
30
|
+
import java.util.concurrent.ConcurrentLinkedQueue;
|
|
31
|
+
import java.util.concurrent.atomic.AtomicReference;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Manages PostConstruct and PreDestroy life cycles
|
|
35
|
+
*/
|
|
36
|
+
public final class LifeCycleManager
|
|
37
|
+
{
|
|
38
|
+
private final AtomicReference<State> state = new AtomicReference<State>(State.LATENT);
|
|
39
|
+
private final Queue<Object> managedInstances = new ConcurrentLinkedQueue<Object>();
|
|
40
|
+
private final LifeCycleMethodsMap methodsMap;
|
|
41
|
+
|
|
42
|
+
private enum State
|
|
43
|
+
{
|
|
44
|
+
LATENT,
|
|
45
|
+
STARTING,
|
|
46
|
+
STARTED,
|
|
47
|
+
STOPPING,
|
|
48
|
+
STOPPED
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @param managedInstances list of objects that have life cycle annotations
|
|
53
|
+
* @param methodsMap existing or new methods map
|
|
54
|
+
* @throws Exception exceptions starting instances (depending on mode)
|
|
55
|
+
*/
|
|
56
|
+
public LifeCycleManager(List<Object> managedInstances, LifeCycleMethodsMap methodsMap)
|
|
57
|
+
throws Exception
|
|
58
|
+
{
|
|
59
|
+
this.methodsMap = (methodsMap != null) ? methodsMap : new LifeCycleMethodsMap();
|
|
60
|
+
for (Object instance : managedInstances) {
|
|
61
|
+
addInstance(instance);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Returns the number of managed instances
|
|
67
|
+
*
|
|
68
|
+
* @return qty
|
|
69
|
+
*/
|
|
70
|
+
public int size()
|
|
71
|
+
{
|
|
72
|
+
return managedInstances.size();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Start the life cycle - all instances will have their {@link javax.annotation.PostConstruct} method(s) called
|
|
77
|
+
*/
|
|
78
|
+
public void start()
|
|
79
|
+
{
|
|
80
|
+
if (!state.compareAndSet(State.LATENT, State.STARTING)) {
|
|
81
|
+
throw new IllegalStateException("System already starting");
|
|
82
|
+
}
|
|
83
|
+
//log.info("Life cycle starting...");
|
|
84
|
+
|
|
85
|
+
for (Object obj : managedInstances) {
|
|
86
|
+
LifeCycleMethods methods = methodsMap.get(obj.getClass());
|
|
87
|
+
if (!methods.hasFor(PreDestroy.class)) {
|
|
88
|
+
managedInstances.remove(obj); // remove reference to instances that aren't needed anymore
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
state.set(State.STARTED);
|
|
93
|
+
//log.info("Life cycle startup complete. System ready.");
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Add a shutdown hook that calls {@link destroy} method
|
|
98
|
+
*/
|
|
99
|
+
public void destroyOnShutdownHook()
|
|
100
|
+
{
|
|
101
|
+
Runtime.getRuntime().addShutdownHook(new Thread()
|
|
102
|
+
{
|
|
103
|
+
@Override
|
|
104
|
+
public void run()
|
|
105
|
+
{
|
|
106
|
+
try {
|
|
107
|
+
LifeCycleManager.this.destroy();
|
|
108
|
+
}
|
|
109
|
+
catch (Exception e) {
|
|
110
|
+
//log.error(e, "Trying to shut down");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Stop the life cycle - all instances will have their {@link javax.annotation.PreDestroy} method(s) called
|
|
118
|
+
*
|
|
119
|
+
* @throws Exception errors
|
|
120
|
+
*/
|
|
121
|
+
public void destroy()
|
|
122
|
+
throws Exception
|
|
123
|
+
{
|
|
124
|
+
if (!state.compareAndSet(State.STARTED, State.STOPPING)) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
//log.info("Life cycle stopping...");
|
|
129
|
+
|
|
130
|
+
List<Object> reversedInstances = Lists.newArrayList(managedInstances);
|
|
131
|
+
Collections.reverse(reversedInstances);
|
|
132
|
+
|
|
133
|
+
for (Object obj : reversedInstances) {
|
|
134
|
+
//log.debug("Stopping %s", obj.getClass().getName());
|
|
135
|
+
LifeCycleMethods methods = methodsMap.get(obj.getClass());
|
|
136
|
+
for (Method preDestroy : methods.methodsFor(PreDestroy.class)) {
|
|
137
|
+
//log.debug("\t%s()", preDestroy.getName());
|
|
138
|
+
preDestroy.invoke(obj);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
state.set(State.STOPPED);
|
|
143
|
+
//log.info("Life cycle stopped.");
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Return true if {@link destroy} is called
|
|
148
|
+
*
|
|
149
|
+
* @return true if already destroyed
|
|
150
|
+
*/
|
|
151
|
+
public boolean isDestroyed()
|
|
152
|
+
{
|
|
153
|
+
State currentState = state.get();
|
|
154
|
+
return currentState == State.STOPPING || currentState == State.STOPPED;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Add an additional managed instance
|
|
159
|
+
*
|
|
160
|
+
* @param instance instance to add
|
|
161
|
+
* @throws Exception errors
|
|
162
|
+
*/
|
|
163
|
+
public void addInstance(Object instance)
|
|
164
|
+
throws Exception
|
|
165
|
+
{
|
|
166
|
+
if (isDestroyed()) {
|
|
167
|
+
throw new IllegalStateException("System already stopped");
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
startInstance(instance);
|
|
171
|
+
if (methodsMap.get(instance.getClass()).hasFor(PreDestroy.class)) {
|
|
172
|
+
managedInstances.add(instance);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
private void startInstance(Object obj)
|
|
178
|
+
throws IllegalAccessException, InvocationTargetException
|
|
179
|
+
{
|
|
180
|
+
//log.debug("Starting %s", obj.getClass().getName());
|
|
181
|
+
LifeCycleMethods methods = methodsMap.get(obj.getClass());
|
|
182
|
+
for (Method postConstruct : methods.methodsFor(PostConstruct.class)) {
|
|
183
|
+
//log.debug("\t%s()", postConstruct.getName());
|
|
184
|
+
postConstruct.invoke(obj);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2010 Proofpoint, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/*
|
|
17
|
+
* Copyright 2015 Sadayuki Furuhashi
|
|
18
|
+
*/
|
|
19
|
+
package org.embulk.guice;
|
|
20
|
+
|
|
21
|
+
import com.google.common.collect.ArrayListMultimap;
|
|
22
|
+
import com.google.common.collect.Lists;
|
|
23
|
+
import com.google.common.collect.Multimap;
|
|
24
|
+
|
|
25
|
+
import javax.annotation.PostConstruct;
|
|
26
|
+
import javax.annotation.PreDestroy;
|
|
27
|
+
import java.lang.annotation.Annotation;
|
|
28
|
+
import java.lang.reflect.Method;
|
|
29
|
+
import java.util.Collection;
|
|
30
|
+
import java.util.HashSet;
|
|
31
|
+
import java.util.Set;
|
|
32
|
+
|
|
33
|
+
class LifeCycleMethods
|
|
34
|
+
{
|
|
35
|
+
private final Multimap<Class<? extends Annotation>, Method> methodMap = ArrayListMultimap.create();
|
|
36
|
+
|
|
37
|
+
LifeCycleMethods(Class<?> clazz)
|
|
38
|
+
{
|
|
39
|
+
addLifeCycleMethods(clazz, new HashSet<String>(), new HashSet<String>());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
boolean hasFor(Class<? extends Annotation> annotation)
|
|
43
|
+
{
|
|
44
|
+
Collection<Method> methods = methodMap.get(annotation);
|
|
45
|
+
return (methods != null) && (methods.size() > 0);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
Collection<Method> methodsFor(Class<? extends Annotation> annotation)
|
|
49
|
+
{
|
|
50
|
+
Collection<Method> methods = methodMap.get(annotation);
|
|
51
|
+
return (methods != null) ? methods : Lists.<Method>newArrayList();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private void addLifeCycleMethods(Class<?> clazz, Set<String> usedConstructNames, Set<String> usedDestroyNames)
|
|
55
|
+
{
|
|
56
|
+
if (clazz == null) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
for (Method method : clazz.getDeclaredMethods()) {
|
|
61
|
+
if (method.isSynthetic() || method.isBridge()) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
processMethod(method, PostConstruct.class, usedConstructNames);
|
|
66
|
+
processMethod(method, PreDestroy.class, usedDestroyNames);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
addLifeCycleMethods(clazz.getSuperclass(), usedConstructNames, usedDestroyNames);
|
|
70
|
+
for (Class<?> face : clazz.getInterfaces()) {
|
|
71
|
+
addLifeCycleMethods(face, usedConstructNames, usedDestroyNames);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private void processMethod(Method method, Class<? extends Annotation> annotationClass, Set<String> usedSet)
|
|
76
|
+
{
|
|
77
|
+
if (method.isAnnotationPresent(annotationClass)) {
|
|
78
|
+
if (!usedSet.contains(method.getName())) {
|
|
79
|
+
if (method.getParameterTypes().length != 0) {
|
|
80
|
+
throw new UnsupportedOperationException(String.format("@PostConstruct/@PreDestroy methods cannot have arguments: %s", method.getDeclaringClass().getName() + "." + method.getName() + "(...)"));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
method.setAccessible(true);
|
|
84
|
+
usedSet.add(method.getName());
|
|
85
|
+
methodMap.put(annotationClass, method);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|