https://github.com/kawasima/websocket-classloader
Load remote java classes via WebSocket.
https://github.com/kawasima/websocket-classloader
classloader java websockets
Last synced: 10 months ago
JSON representation
Load remote java classes via WebSocket.
- Host: GitHub
- URL: https://github.com/kawasima/websocket-classloader
- Owner: kawasima
- License: apache-2.0
- Created: 2014-03-06T10:10:28.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2017-03-28T04:47:49.000Z (about 9 years ago)
- Last Synced: 2025-06-19T07:03:52.683Z (10 months ago)
- Topics: classloader, java, websockets
- Language: Java
- Homepage:
- Size: 85 KB
- Stars: 27
- Watchers: 5
- Forks: 9
- Open Issues: 1
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE.txt
Awesome Lists containing this project
README
websocket-classloader
=====================
A ClassLoader loading remote java class via WebSocket.
[](https://travis-ci.org/kawasima/websocket-classloader)
## コンセプト
複数台のマシンで分散処理を行うにあたって、面倒なのはアプリケーションの配布です。例えばたくさんのJUnitのテストを、複数台のマシンで実行したい。ふつうにやろうとすると、テストの含まれるjarファイルと依存するjarを全て配布しなくてはなりませんが、これは結構な手間です。
そんなときに、分散クライアントとなるマシンには必要最低限のクラスを、ランタイムにロードできれば比較的高速に、かつ、いつでも最新のアプリケーションを動かすことができます。
websocket-classloaderは、そんな分散マシン向けのクラスローダーです。クラスロード要求に応じて、CrassProviderサーバに要求を転送し、CrassProviderサーバではクラスのバイナリーを探しだしてレスポンス返します。
## Usage
ClassProviderをJSR―356のコンテナ(undertow, tomcatなど)にデプロイします。
```java
new ClassProvider().start(port);
```
クライアント側は、ClassProviderのアドレスを指定して、WebSocketClassLoaderを作ります。
```java
ClassLoader cl = new WebSocketClassLoader("ws://class-provider-host:port");
Class> hogeClass = cl.loadClass("org.example.HogeHoge", true);
```
## アーキテクチャ
class binary format
+-----------------------------------------------+
v |
+----------------------+ loadClass request +---------------+
| Thin Application | (WebSocket) | ClassProvider |
| WebSocketClassLoader | ---------------------> | |
+----------------------+ +---------------+
WebSocketClassLoaderを使う側のアプリケーション(クライアントと呼ぶ)から、ClassProvierへWebSocketのコネクションを作成し、クライアントからloadClassが呼ばれたときに、ClassProviderへリクエストを飛ばし、クラスのバイナリフォーマットが帰ってきます。
データのシリアライズにはFressianを使っています。
## License
Apache License 2.0
(c) 2014-2017 Yoshitaka Kawashima