jubilee 2.1.0.rc1-java → 3.0.0.beta2-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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +2 -14
  5. data/Guardfile +24 -0
  6. data/README.md +34 -66
  7. data/Rakefile +1 -1
  8. data/examples/chatapp/Gemfile +2 -1
  9. data/examples/chatapp/Gemfile.lock +2 -2
  10. data/examples/chatapp/README.md +2 -14
  11. data/examples/chatapp/app.rb +19 -11
  12. data/examples/chatapp/public/assets/javascripts/application.js +1 -1
  13. data/examples/chatapp/public/assets/javascripts/vertxbus.js +60 -48
  14. data/examples/client/vertxbus.js +60 -48
  15. data/examples/shims_example/log/development.log +0 -0
  16. data/jars/hazelcast-3.5.2.jar +0 -0
  17. data/jars/jackson-annotations-2.6.0.jar +0 -0
  18. data/jars/jackson-core-2.6.1.jar +0 -0
  19. data/jars/jackson-databind-2.6.1.jar +0 -0
  20. data/jars/netty-buffer-4.0.33.Final.jar +0 -0
  21. data/jars/netty-codec-4.0.33.Final.jar +0 -0
  22. data/jars/netty-codec-http-4.0.33.Final.jar +0 -0
  23. data/jars/netty-common-4.0.33.Final.jar +0 -0
  24. data/jars/netty-handler-4.0.33.Final.jar +0 -0
  25. data/jars/netty-transport-4.0.33.Final.jar +0 -0
  26. data/jars/vertx-auth-common-3.2.1.jar +0 -0
  27. data/jars/vertx-core-3.2.1.jar +0 -0
  28. data/jars/vertx-hazelcast-3.2.1.jar +0 -0
  29. data/jars/vertx-lang-ruby-3.2.1.jar +0 -0
  30. data/jars/vertx-web-3.2.1.jar +0 -0
  31. data/jubilee.gemspec +40 -42
  32. data/lib/jubilee.rb +7 -2
  33. data/lib/jubilee/cli.rb +4 -4
  34. data/lib/jubilee/jubilee.jar +0 -0
  35. data/lib/jubilee/response.rb +1 -1
  36. data/lib/jubilee/version.rb +3 -3
  37. data/pom.xml +10 -94
  38. data/spec/apps/rails4/basic/Gemfile +2 -2
  39. data/spec/apps/rails4/basic/Gemfile.lock +5 -6
  40. data/src/main/java/org/jruby/jubilee/Const.java +1 -4
  41. data/src/main/java/org/jruby/jubilee/JubileeVerticle.java +41 -46
  42. data/src/main/java/org/jruby/jubilee/RackApplication.java +37 -57
  43. data/src/main/java/org/jruby/jubilee/RackEnvironment.java +38 -35
  44. data/src/main/java/org/jruby/jubilee/RackEnvironmentHash.java +1 -7
  45. data/src/main/java/org/jruby/jubilee/RubyHttpServerResponse.java +12 -6
  46. data/src/main/java/org/jruby/jubilee/RubyNetSocket.java +9 -12
  47. data/src/main/java/org/jruby/jubilee/RubyPlatformManager.java +39 -43
  48. data/src/main/java/org/jruby/jubilee/impl/RubyIORackInput.java +2 -1
  49. data/src/main/java/org/jruby/jubilee/vertx/JubileeVertx.java +1 -1
  50. metadata +30 -54
  51. data/examples/chatapp/config.json +0 -4
  52. data/jars/annotations-1.3.2.jar +0 -0
  53. data/jars/hazelcast-3.2.3.jar +0 -0
  54. data/jars/jackson-annotations-2.2.2.jar +0 -0
  55. data/jars/jackson-core-2.2.2.jar +0 -0
  56. data/jars/jackson-databind-2.2.2.jar +0 -0
  57. data/jars/lang-jruby-2.1.0-final.jar +0 -0
  58. data/jars/log4j-1.2.16.jar +0 -0
  59. data/jars/netty-all-4.0.20.Final.jar +0 -0
  60. data/jars/slf4j-api-1.6.2.jar +0 -0
  61. data/jars/vertx-core-2.1.2.jar +0 -0
  62. data/jars/vertx-hazelcast-2.1.2.jar +0 -0
  63. data/jars/vertx-platform-2.1.2.jar +0 -0
  64. data/lib/container.rb +0 -117
  65. data/lib/core/buffer.rb +0 -251
  66. data/lib/core/datagram.rb +0 -280
  67. data/lib/core/dns.rb +0 -143
  68. data/lib/core/event_bus.rb +0 -277
  69. data/lib/core/file_system.rb +0 -479
  70. data/lib/core/http.rb +0 -1307
  71. data/lib/core/net.rb +0 -251
  72. data/lib/core/network_support.rb +0 -77
  73. data/lib/core/parsetools.rb +0 -105
  74. data/lib/core/shared_data.rb +0 -214
  75. data/lib/core/sock_js.rb +0 -116
  76. data/lib/core/ssl_support.rb +0 -163
  77. data/lib/core/streams.rb +0 -183
  78. data/lib/core/tcp_support.rb +0 -136
  79. data/lib/core/timers.rb +0 -73
  80. data/lib/core/vertx_require.rb +0 -25
  81. data/lib/core/wrapped_handler.rb +0 -28
  82. data/lib/jubilee/jubilee_require.rb +0 -24
  83. data/lib/test_utils.rb +0 -66
  84. data/lib/vertx.rb +0 -30
  85. data/lib/vertx_tests.rb +0 -8
  86. data/src/main/assembly/mod.xml +0 -21
  87. data/src/main/java/org/jruby/jubilee/JubileeVerticleFactory.java +0 -258
  88. data/src/main/java/org/jruby/jubilee/RubyCallable.java +0 -52
  89. data/src/main/resources/META-INF/services/org.vertx.java.deploy.impl.jruby.JubileeVerticleFactory +0 -1
  90. data/src/main/resources/mod.json +0 -11
  91. data/vertx_classpath.txt +0 -12
@@ -1,116 +0,0 @@
1
- # Copyright 2011 the original author or authors.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'core/streams'
16
- require 'core/ssl_support'
17
- module Vertx
18
-
19
- # This is an implementation of the server side part of {"https://github.com/sockjs"}
20
- #
21
- # SockJS enables browsers to communicate with the server using a simple WebSocket-like api for sending
22
- # and receiving messages. Under the bonnet SockJS chooses to use one of several protocols depending on browser
23
- # capabilities and what appears to be working across the network.
24
- #
25
- # Available protocols include:
26
- #
27
- # WebSockets
28
- # xhr-polling
29
- # xhr-streaming
30
- # json-polling
31
- # event-source
32
- # html-file
33
- #
34
- # This means, it should just work irrespective of what browser is being used, and whether there are nasty
35
- # things like proxies and load balancers between the client and the server.
36
- #
37
- # For more detailed information on SockJS, see their website.
38
- #
39
- # On the server side, you interact using instances of {SockJSSocket} - this allows you to send data to the
40
- # client or receive data via the {ReadStream#data_handler}.
41
- #
42
- # You can register multiple applications with the same SockJSServer, each using different path prefixes, each
43
- # application will have its own handler, and configuration is described in a Hash.
44
- #
45
- # @author {http://tfox.org Tim Fox}
46
- class SockJSServer
47
-
48
- # Create a new SockJSServer
49
- # @param http_server [HttpServer] You must pass in an instance of {HttpServer}
50
- def initialize(http_server)
51
- @j_server = org.vertx.java.platform.impl.JRubyVerticleFactory.vertx.createSockJSServer(http_server._to_java_server)
52
- end
53
-
54
- # Install an application
55
- # @param config [Hash] Configuration for the application
56
- # @param proc [Proc] Proc representing the handler
57
- # @param hndlr [Block] Handler to call when a new {SockJSSocket is created}
58
- def install_app(config, proc = nil, &hndlr)
59
- hndlr = proc if proc
60
- j_config = org.vertx.java.core.json.JsonObject.new(config)
61
- @j_server.installApp(j_config) { |j_sock|
62
- hndlr.call(SockJSSocket.new(j_sock))
63
- }
64
- self
65
- end
66
-
67
- def bridge(config, inbound_permitted, outbound_permitted, auth_timeout = 5 * 60 * 1000, auth_address = nil)
68
- j_inbound_permitted = org.vertx.java.core.json.JsonArray.new(inbound_permitted)
69
- j_outbound_permitted = org.vertx.java.core.json.JsonArray.new(outbound_permitted)
70
- @j_server.bridge(org.vertx.java.core.json.JsonObject.new(config), j_inbound_permitted,
71
- j_outbound_permitted, auth_timeout, auth_address)
72
- self
73
- end
74
-
75
- end
76
-
77
- # You interact with SockJS clients through instances of SockJS socket.
78
- # The API is very similar to {WebSocket}. It implements both
79
- # {ReadStream} and {WriteStream} so it can be used with {Pump} to enable
80
- # flow control.
81
- #
82
- # @author {http://tfox.org Tim Fox}
83
- class SockJSSocket
84
-
85
- include ReadStream, WriteStream
86
-
87
- # @private
88
- def initialize(j_sock)
89
- @j_del = j_sock
90
- @handler_id = EventBus.register_simple_handler { |msg|
91
- write(msg.body)
92
- }
93
- end
94
-
95
- # Close the socket
96
- def close
97
- EventBus.unregister_handler(@handler_id)
98
- @j_del.close
99
- end
100
-
101
- # When a SockJSSocket is created it automatically registers an event handler with the system, the ID of that
102
- # handler is given by {#handler_id}.
103
- # Given this ID, a different event loop can send a buffer to that event handler using the event bus. This
104
- # allows you to write data to other SockJSSockets which are owned by different event loops.
105
- def handler_id
106
- @handler_id
107
- end
108
-
109
- # @private
110
- def _to_java_socket
111
- @j_del
112
- end
113
-
114
- end
115
-
116
- end
@@ -1,163 +0,0 @@
1
- # Copyright 2011 the original author or authors.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
-
16
- module Vertx
17
-
18
- # A mixin module allowing SSL attributes to be set on classes
19
- #
20
- # @author {http://tfox.org Tim Fox}
21
- module SSLSupport
22
-
23
- # Set whether the server or client will use SSL.
24
- # @param [Boolean] val. If true then ssl will be used.
25
- # @return [] self. So multiple invocations can be chained.
26
- def ssl=(val)
27
- @j_del.setSSL(val)
28
- self
29
- end
30
-
31
- # Set or get ssl for fluent API
32
- def ssl(ssl = nil)
33
- if ssl
34
- @j_del.setSSL(ssl)
35
- self
36
- else
37
- @j_del.isSSL
38
- end
39
- end
40
-
41
- # Set the path to the SSL key store. This method should only be used with the client/server in SSL mode, i.e. after {#ssl=}
42
- # has been set to true.
43
- # The SSL key store is a standard Java Key Store, and should contain the client/server certificate. For a client, it's only necessary to supply
44
- # a client key store if the server requires client authentication via client certificates.
45
- # @param [String] val. The path to the key store
46
- # @return [] self. So multiple invocations can be chained.
47
- def key_store_path=(val)
48
- @j_del.setKeyStorePath(val)
49
- self
50
- end
51
-
52
- # Set or get key store path for fluent API
53
- def key_store_path(path = nil)
54
- if path
55
- @j_del.setKeyStorePath(path)
56
- self
57
- else
58
- @j_del.getKeyStorePath
59
- end
60
- end
61
-
62
- # Set the password for the SSL key store. This method should only be used with the client in SSL mode, i.e. after {#ssl=}
63
- # has been set to true.
64
- # @param [String] val. The password.
65
- # @return [] self. So multiple invocations can be chained.
66
- def key_store_password=(val)
67
- @j_del.setKeyStorePassword(val)
68
- self
69
- end
70
-
71
- # Set or get key store password for fluent API
72
- def key_store_password(password = nil)
73
- if password
74
- @j_del.setKeyStorePassword(password)
75
- self
76
- else
77
- @j_del.getKeyStorePassword
78
- end
79
- end
80
-
81
- # Set the path to the SSL trust store. This method should only be used with the client/server in SSL mode, i.e. after {#ssl=}
82
- # has been set to true.
83
- # The SSL trust store is a standard Java Key Store, and should contain the certificate(s) of the clients/servers that the server/client trusts. The SSL
84
- # handshake will fail if the server provides a certificate that the client does not trust, or if client authentication is used,
85
- # if the client provides a certificate the server does not trust.<p>
86
- # @param [String] val. The path to the trust store
87
- # @return [] self. So multiple invocations can be chained.
88
- def trust_store_path=(val)
89
- @j_del.setTrustStorePath(val)
90
- self
91
- end
92
-
93
- # Set or get trust store path for fluent API
94
- def trust_store_path(path = nil)
95
- if path
96
- @j_del.setTrustStorePath(path)
97
- self
98
- else
99
- @j_del.getTrustStorePath
100
- end
101
- end
102
-
103
- # Set the password for the SSL trust store. This method should only be used with the client in SSL mode, i.e. after {#ssl=}
104
- # has been set to true.
105
- # @param [String] val. The password.
106
- # @return [] self. So multiple invocations can be chained.
107
- def trust_store_password=(val)
108
- @j_del.setTrustStorePassword(val)
109
- self
110
- end
111
-
112
- # Set or get trust store password for fluent API
113
- def trust_store_password(password = nil)
114
- if password
115
- @j_del.setTrustStorePassword(password)
116
- self
117
- else
118
- @j_del.getTrustStorePassword
119
- end
120
- end
121
-
122
- end
123
-
124
- # A mixin module allowing Server SSL attributes to be set on classes
125
- #
126
- # @author {http://tfox.org Tim Fox}
127
- module ServerSSLSupport
128
-
129
- def client_auth_required=(val)
130
- @j_del.setClientAuthRequired(val)
131
- self
132
- end
133
-
134
- def client_auth_required(val = nil)
135
- if val
136
- @j_del.setClientAuthRequired(val)
137
- self
138
- else
139
- @j_del.isClientAuthRequired
140
- end
141
- end
142
- end
143
-
144
- # A mixin module allowing Client SSL attributes to be set on classes
145
- #
146
- # @author {http://tfox.org Tim Fox}
147
- module ClientSSLSupport
148
-
149
- def trust_all=(val)
150
- @j_del.setTrustAll(val)
151
- self
152
- end
153
-
154
- def trust_all(val = nil)
155
- if val
156
- @j_del.setTrustAll(val)
157
- self
158
- else
159
- @j_del.isTrustAll
160
- end
161
- end
162
- end
163
- end
@@ -1,183 +0,0 @@
1
- # Copyright 2011 the original author or authors.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Vertx
16
-
17
- module DrainSupport
18
-
19
- # Set the maximum size of the write queue. You will still be able to write to the stream even
20
- # if there is more data than this in the write queue. This is used as an indicator by classes such as
21
- # {Pump} to provide flow control.
22
- # @param [FixNum] size. The maximum size, in bytes.
23
- def write_queue_max_size=(size)
24
- @j_del.setWriteQueueMaxSize(size)
25
- end
26
-
27
- # For a fluent API
28
- def write_queue_max_size(size)
29
- @j_del.setWriteQueueMaxSize(size)
30
- self
31
- end
32
-
33
- # Is the write queue full?
34
- # @return [Boolean] true if there are more bytes in the write queue than the max write queue size.
35
- def write_queue_full?
36
- @j_del.writeQueueFull
37
- end
38
-
39
- # Set a drain handler on the stream. If the write queue is full, then the handler will be called when the write
40
- # queue has been reduced to maxSize / 2. See {Pump} for an example of this being used.
41
- # @param [Block] hndlr. The drain handler
42
- def drain_handler(&hndlr)
43
- @j_del.drainHandler(hndlr)
44
- self
45
- end
46
-
47
- # Set an exception handler on the stream.
48
- # @param [Block] hndlr. The exception handler
49
- def exception_handler(&hndlr)
50
- @j_del.exceptionHandler(hndlr)
51
- self
52
- end
53
- end
54
-
55
- # A mixin module which represents a stream of data that can be written to.
56
- #
57
- # Any class that mixes in this module can be used by a {Pump} to pump data from a {ReadStream} to it.
58
- #
59
- # @author {http://tfox.org Tim Fox}
60
- module WriteStream
61
-
62
- include DrainSupport
63
-
64
- # Write some data to the stream. The data is put on an internal write queue, and the write actually happens
65
- # asynchronously. To avoid running out of memory by putting too much on the write queue,
66
- # check the {#write_queue_full?} method before writing. This is done automatically if using a {Pump}.
67
- # @param [Buffer]. The buffer to write.
68
- def write(buff)
69
- @j_del.write(buff._to_java_buffer)
70
- self
71
- end
72
-
73
- # @private
74
- def _to_write_stream
75
- @j_del
76
- end
77
-
78
- end
79
-
80
-
81
- module ReadSupport
82
-
83
- # Set a data handler. As data is read, the handler will be called with the data.
84
- # @param [Block] hndlr. The data handler
85
- def data_handler(&hndlr)
86
- @j_del.dataHandler(Proc.new { |j_buff|
87
- hndlr.call(Buffer.new(j_buff))
88
- })
89
- self
90
- end
91
-
92
- # Pause the ReadStream. After calling this, the ReadStream will aim to send no more data to the {#data_handler}
93
- def pause
94
- @j_del.pause
95
- self
96
- end
97
-
98
- # Resume reading. If the ReadStream has been paused, reading will recommence on it.
99
- def resume
100
- @j_del.resume
101
- self
102
- end
103
-
104
- # Set an execption handler on the stream.
105
- # @param [Block] hndlr. The exception handler
106
- def exception_handler(&hndlr)
107
- @j_del.exceptionHandler(hndlr)
108
- self
109
- end
110
- end
111
-
112
- # A mixin module which represents a stream of data that can be read from.
113
- #
114
- # Any class that mixes in this module can be used by a {Pump} to pump data from a {ReadStream} to it.
115
- #
116
- # @author {http://tfox.org Tim Fox}
117
- module ReadStream
118
-
119
- include ReadSupport
120
-
121
- # Set an end handler on the stream. Once the stream has ended, and there is no more data to be read, this handler will be called.
122
- # @param [Block] hndlr. The exception handler
123
- def end_handler(&hndlr)
124
- @j_del.endHandler(hndlr)
125
- self
126
- end
127
-
128
- # @private
129
- def _to_read_stream
130
- @j_del
131
- end
132
-
133
- end
134
-
135
- # Pumps data from a {ReadStream} to a {WriteStream} and performs flow control where necessary to
136
- # prevent the write stream from getting overloaded.
137
- #
138
- # Instances of this class read bytes from a ReadStream and write them to a WriteStream. If data
139
- # can be read faster than it can be written this could result in the write queue of the WriteStream growing
140
- # without bound, eventually causing it to exhaust all available RAM.
141
- # To prevent this, after each write, instances of this class check whether the write queue of the WriteStream
142
- # is full, and if so, the ReadStream is paused, and a {WriteStream#drain_handler} is set on the WriteStream.
143
- # When the WriteStream has processed half of its backlog, the drain_handler will be called,
144
- # which results in the pump resuming the ReadStream.
145
- #
146
- # This class can be used to pump from any {ReadStream} to any { WriteStream},
147
- # e.g. from an {HttpServerRequest} to an {AsyncFile}, or from {NetSocket} to a {WebSocket}.
148
- #
149
- # @author {http://tfox.org Tim Fox}
150
- class Pump
151
- def initialize(read_stream, write_stream)
152
- raise "read_stream is not a ReadStream" if !read_stream.is_a? ReadStream
153
- raise "write_stream is not a WriteStream" if !write_stream.is_a? WriteStream
154
- j_rs = read_stream._to_read_stream
155
- j_ws = write_stream._to_write_stream
156
- @j_pump = org.vertx.java.core.streams.Pump.createPump(j_rs, j_ws)
157
- end
158
-
159
- # Set the write queue max size
160
- # @param [FixNum] The write queue max size
161
- def write_queue_max_size=(val)
162
- @j_pump.setWriteQueueMaxSize(val)
163
- self
164
- end
165
-
166
- # Start the Pump. The Pump can be started and stopped multiple times.
167
- def start
168
- @j_pump.start
169
- self
170
- end
171
-
172
- # Stop the Pump. The Pump can be started and stopped multiple times.
173
- def stop
174
- @j_pump.stop
175
- self
176
- end
177
-
178
- # @return [FixNum] Return the total number of bytes pumped by this pump.
179
- def bytes_pumped
180
- @j_pump.bytesPumped
181
- end
182
- end
183
- end