Class: Embulk::JavaPlugin

Inherits:
Object
  • Object
show all
Defined in:
lib/embulk/java_plugin.rb

Class Method Summary collapse

Class Method Details

.classloader(dir) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/embulk/java_plugin.rb', line 6

def self.classloader(dir)
  jars = Dir["#{dir}/**/*.jar"]
  urls = jars.map {|jar| java.io.File.new(File.expand_path(jar)).toURI.toURL }
  begin
    expected_temporary_variable_name = Java::org.embulk.jruby.JRubyPluginSource::PLUGIN_CLASS_LOADER_FACTORY_VARIABLE_NAME
  rescue => e
    raise PluginLoadError.new "Java's org.embulk.jruby.JRubyPluginSource does not define PLUGIN_CLASS_LOADER_FACTORY_VARIABLE_NAME unexpectedly."
  end
  if expected_temporary_variable_name != "$temporary_internal_plugin_class_loader_factory__"
    raise PluginLoadError.new "Java's org.embulk.jruby.JRubyPluginSource does not define PLUGIN_CLASS_LOADER_FACTORY_VARIABLE_NAME correctly."
  end
  factory = $temporary_internal_plugin_class_loader_factory__
  factory.create(urls, JRuby.runtime.getJRubyClassLoader())
end

.register_decoder(name, class_fqdn, jar_dir) ⇒ Object



46
47
48
49
# File 'lib/embulk/java_plugin.rb', line 46

def self.register_decoder(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)
  Plugin.register_java_decoder(name, java_class)
end

.register_encoder(name, class_fqdn, jar_dir) ⇒ Object



51
52
53
54
# File 'lib/embulk/java_plugin.rb', line 51

def self.register_encoder(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)
  Plugin.register_java_encoder(name, java_class)
end

.register_executor(name, class_fqdn, jar_dir) ⇒ Object



61
62
63
64
# File 'lib/embulk/java_plugin.rb', line 61

def self.register_executor(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)
  Plugin.register_java_executor(name, java_class)
end

.register_filter(name, class_fqdn, jar_dir) ⇒ Object



31
32
33
34
# File 'lib/embulk/java_plugin.rb', line 31

def self.register_filter(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)
  Plugin.register_java_filter(name, java_class)
end

.register_formatter(name, class_fqdn, jar_dir) ⇒ Object



41
42
43
44
# File 'lib/embulk/java_plugin.rb', line 41

def self.register_formatter(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)
  Plugin.register_java_formatter(name, java_class)
end

.register_guess(name, class_fqdn, jar_dir) ⇒ Object



56
57
58
59
# File 'lib/embulk/java_plugin.rb', line 56

def self.register_guess(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)
  Plugin.register_java_guess(name, java_class)
end

.register_input(name, class_fqdn, jar_dir) ⇒ Object



21
22
23
24
# File 'lib/embulk/java_plugin.rb', line 21

def self.register_input(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)  # TODO handle class not found error
  Plugin.register_java_input(name, java_class)
end

.register_output(name, class_fqdn, jar_dir) ⇒ Object



26
27
28
29
# File 'lib/embulk/java_plugin.rb', line 26

def self.register_output(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)
  Plugin.register_java_output(name, java_class)
end

.register_parser(name, class_fqdn, jar_dir) ⇒ Object



36
37
38
39
# File 'lib/embulk/java_plugin.rb', line 36

def self.register_parser(name, class_fqdn, jar_dir)
  java_class = classloader(jar_dir).loadClass(class_fqdn)
  Plugin.register_java_parser(name, java_class)
end

.ruby_adapter_class(java_class, ruby_base_class, ruby_module) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/embulk/java_plugin.rb', line 66

def self.ruby_adapter_class(java_class, ruby_base_class, ruby_module)
  Class.new(ruby_base_class) do
    const_set(:PLUGIN_JAVA_CLASS, java_class)

    include ruby_module
    extend ruby_module::ClassMethods

    unless method_defined?(:plugin_java_object)
      def plugin_java_object
        @plugin_java_object ||= self.class.new_java
      end
    end

    unless (class<<self;self;end).method_defined?(:plugin_java_class)
      def self.plugin_java_class
        self::PLUGIN_JAVA_CLASS
      end
    end

    # TODO ruby_base_class already implements new_java. So
    #      this line returns always true:
    #unless (class<<self;self;end).method_defined?(:new_java)
    #      but this line could return false unexpectedly if
    #      ruby_module::ClassMethods includes other modules.
    unless ruby_module::ClassMethods.method_defined?(:new_java)
      def self.new_java
        Java::org.embulk.plugin.PluginManager.newPluginInstance(plugin_java_class, Embulk::Java::EmbulkSystemProperties)
      end
    end
  end
end