jubilee 2.1.0.rc1-java → 3.0.0.beta2-java

Sign up to get free protection for your applications and to get access to all the features.
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