エンドポイント WebSocket API ではクライアント サーバともに javax.websocket.endpoint クラスから派生してエンドポイントのクラスを定義します そして onopen() onclose() および onerror() をオーバーライドし それぞれ接続時 切断時およ
|
|
|
- さや いさやま
- 8 years ago
- Views:
Transcription
1 Java API for WebSocket 2013 年 9 月 湊隆行 はじめに 2013 年 6 月 12 日に Java EE 7 が発表され 新機能の 1 つとして Java API for WebSocket が追加されました HTTP プロトコルは半二重のステートレスな接続であり Ajax(XMLHTTPRequest) を利用した通信であっても 通信するたびに HTTP 接続 メッセージ交換 HTTP 切断というステップを踏む必要があるだけでなく HTTP ヘッダという冗長な情報も送受信します また クライアントからの要求に対してサーバが応答する形の pull 通信なので 最新状態に更新するためには クライアントから定期的にサーバに要求を出し続ける必要があります RFC 6455 で定義された WebSocket は HTTP をアップグレードした TCP ベースのプロトコルであり 低レイテンシかつ双方向 全二重通信が可能な軽量プロトコルです WebSocket では最初に HTTP でハンドシェイク要求を送ってコネクションを張ったら 切断するまでそのコネクションを維持し 双方向 全二重でメッセージ交換を行います メッセージ交換では HTTP ヘッダが無く 従来の HTTP 通信よりも通信コストを大幅に削減します HTTP や HTTPS と同じ基盤 ( ポート番号含む ) で動作するため プロキシやファイアウォールに新たな設定を追加する必要がない点に意義があります また Internet Explorer 10 を含む多くのブラウザが WebSocket に対応しているため リアルタイムな情報交換システムを構築できる環境が揃っています Java API for WebSocket( 以降 WebSocket API) は JSR 356 で策定されたものであり WebSocket アプリケーションを構築し クライアント サーバ間で文字列データおよびバイナリデータを送受信できます また WebSocket API 実装や依存ライブラリを用意すれば Java SE 環境でも WebSocket クライアントを開発 実行できます 現実では WebSocket クライアントを JavaScript で作成しブラウザ上で動作させることが多いですが 本書では WebSocket API について クライアント サーバ双方を Java で実装する方法を紹介します なお 本書で示すサンプルは Java SE 7 の言語仕様に沿ってプログラミングしたものであり 読みやすくするために例外処理を省略しています API パッケージ構成 WebSocket API は 次のパッケージで構成しています javax.websocket javax.websocket.server 1
2 エンドポイント WebSocket API ではクライアント サーバともに javax.websocket.endpoint クラスから派生してエンドポイントのクラスを定義します そして onopen() onclose() および onerror() をオーバーライドし それぞれ接続時 切断時およびエラー発生時の処理を定義します また javax.websocket.messagehandler.partial または javax.websocket.messagehandler.whole インタフェースの実装クラスを Session クラスの addmessagehandler() で登録すると メッセージを受信できます Whole インタフェースはメッセージを 1 回で受信するときに使い Partial インタフェースは巨大なメッセージを何回かに分割して受信するときに使います なお Endpoint クラスの onopen() は abstract メソッドなので onopen() のオーバーライドは必須ですが onclose() および onerror() は必要に応じてオーバーライドします このように Endpoint から派生して定義したエンドポイントのことを WebSocket API 仕様では Programatic endpoint と呼んでいます クラス / メソッド 実装方法 エンドポイントのクラス Endpoint から派生して定義 接続ハンドラ onopen() をオーバーライドして定義 ( 必須 ) 切断ハンドラ onclose() をオーバーライドして定義 ( 任意 ) エラーハンドラ onerror() をオーバーライドして定義 ( 任意 ) メッセージ受信ハンドラ MessageHandler.Partial または MessageHandler.Whole の実装クラスを定義し Session#addMessageHandler() で登録 表 3.1 Programatic endpoint の実装方法 Endpoint クラスから派生せずに アノテーションを利用してもエンドポイントを定義できます を付加すれば Programatic endpoint と同様 エンドポイントのライフサイクルで発生する各イベントのハンドラになります また は エンドポイントあたり高々 1 個まで付加できます は 文字列メッセージ受信用 バイナリメッセージ受信用および pong メッセージ (javax.websocket.pongmessage) 受信用それぞれに高々 1 個まで付加できます たとえば 文字列メッセージ受信ハンドラとバイナリメッセージ受信ハンドラを 1 個ずつ定義できますが 文字列メッセージ受信ハンドラを 2 個以上定義するのは不可です 2 個以上定義すると ランタイムエラーとなります ( 実行時に例外がスローされる ) に URI-Template を指定しておくと 接続時にクライアントから送られてくる URI から値を取得できます たとえば サーバエンドポイントの URI が /chatendpoint/{id のときに クライアントから /chatendpoint/1000 で 1000 を取得できます WebSocket API の仕様では アノテーションを付加して作成したエンドポイントのことを Annotated endpoint と呼んでいます 2
3 アノテーション レベル クラス クラス メソッド メソッド メソッド メソッドをエラーハンドラにする メソッド メソッド引数 URI-Templete から値を取得するために使用する 表 3.2 Annotated endpoint の実装方法 WebSocket API ではクライアントからサーバに接続するとユニークなセッションを生成し クライアント サーバ双方でエンドポイントのインスタンスも生成します 以降 切断するまでの間がセッションの寿命であり セッションを介してメッセージを送受信します エンドポイントのライフサイクルにおける処理の流れを図 3.1 に示します 図 3.1 WebSocket ライフサイクルにおける処理の流れ プレイン文字列の送受信 WebSocket アプリケーション作成の手始めとして プレイン文字列 ( 平坦な文字列 ) を送受信する WebSocket サンプルを紹介します Programatic endpoint よりも Annotated Endpoint を作成するのが簡単です サーバおよびクライアントの Annotated Endpoint を それぞれ図 4.1 および図 4.2 に示します 3
4 @ServerEndpoint("/simple") public class SimpleServer { public void onmessagetext(string message, Session session) throws IOException { session.getbasicremote().sendtext(message); // 文字列を送信 図 4.1 public class SimpleClient { public void ontextmessage(string msg, Session session) { System.out.println("onTextMessage: " + msg); public static void main(string[] args) throws Exception { String url = "ws://localhost:8080/websocketsample/simple"; WebSocketContainer container = ContainerProvider.getWebSocketContainer(); Class<?> clazz = SimpleClient.class; try(session session = container.connecttoserver(clazz, URI.create(url))){ // サーバに接続 session.getbasicremote().sendtext("hello"); // 文字列を送信 Thread.sleep(3000L); // すぐ切断しないよう 暫定的に 3 秒待つ 図 4.2 プレイン文字列を送受信するクライアントエンドポイント これだけのプログラムで文字列を送受信する WebSocket アプリケーションの完成です を付加し クライアントにメッセージをエコーバックするメソッドに を付加しています を付加し サーバからのメッセージをコンソールに出力するメソッドに を付加しています クライアントの main() では サーバ接続後にメッセージを送信し try-with-resources 構文により暗黙的に Session クラスの close() を呼び出して接続を切断します サーバエンドポイントの URL が "ws://localhost:8080/websocketsample/simple" です 先頭の "ws" は RFC 6455 で定義している WebSocket のプロトコルであり デフォルトのポート番号は 80 です 暗号化したセキュアな通信を行うための "wss"( ポート番号は 443) もあります "/WebSocketSample" は Java EE コンテナに配備するアプリケーション名であり 最語尾の "/simple" の属性で指定したものと同じです JSON の送受信 JSON の実体は文字列ですから 前節の方法でも JSON を送受信できます しかし 開発者としては JSON を解析 生成する処理をエンドポイントから分離し エンドポイントでは JSON を文字列ではなく Java オブジェクト ( 以降 カスタムオブジェクトと表記 ) として受け取りたいものです WebSocket API には このような開発者ニーズに対応する仕組みがあります 具体的にはエンドポイントのクラスに加えて 表 5.1 のクラスを用意します これらのクラスを サー 4
5 バエンドポイントとクライアントエンドポイント共通のクラスとして作成し 双方のクラスパスに追加し ます クラスカスタムオブジェクト デコーダ エンコーダ 概要 JSON データを表現する POJO です 必要に応じて JSON の各プロパティを取得 / 設定する getter/setter のメソッドを追加するとよいでしょう このクラスを用意することにより エンドポイントでは JSON を解析 生成する処理が不要になります javax.websocket.decoder.text インタフェースの実装クラスとして定義します デコーダでは デコート処理を行うかどうかを決定するための boolean 値を返す willdecode() および JSON をカスタムオブジェクトに変換するための decode() の decoders 属性で 1 個以上のデコーダのクラスを指定することにより WebSocket ランタイムがデコードの willdecode() および decode() を呼び出してくれます JSON が送信されてきたら WebSocket ランタイムは まず デコーダの willdecode() を呼び出します willdecode() が true を返した場合は WebSocket ランタイムはそのデコーダの decode() を呼び出し 他のデコーダの willdecode() および decode() は呼び出しません 逆に willdecode() が false を返した場合は そのデコーダの decode() を呼び出さずに 次のデコーダの willdecode() を呼び出します なお WebSocket API の仕様では デコーダの呼び出し順序を明記していませんが GlassFish 4 同梱の WebSocket API のリファレンス実装である Tyrus 1.0 の場合 decoders に指定した順に willdecode() および decode() を呼び出します javax.websocket.encoder.text インタフェースの実装クラスとして定義し カスタムオブジェクトを JSON に変換するための encode() の encoders 属性で 1 個以上のエンコーダのクラスを指定できます WebSocket ランタイムはエンコーダのクラス宣言で指定するジェネリクスを見て どのエンコーダの encode() を呼び出すかどうかを決定します 表 5.1 JSON を送受信するときに作成するクラスの一覧 JSON を交換するときの処理の流れを 図 5.1 に示します エンドポイントが 2 つありますが どちらか片方がクライアントエンドポイントで もう一方はサーバエンドポイントです その間を WebSocket ランタイムが仲介します 右側のエンドポイントが JSON を受信するときの流れが 1~1.3 JSON を送信するときの流れが 2~2.2 です まず 1~1.3 を説明します 左側のエンドポイントが String 型の JSON を送信したら (1) デコーダの willdecode() を呼び出します (1.1) willdecode() が true を返したら そのデコーダの decode() を呼び出し JSON をカスタムオブジェクトに変換します (1.2) 最後に エンドポイントの メソッドを呼び出して カスタムオブジェクトを渡すわけです (1.3) 次に 2~2.2 を説明します 右側のエンドポイントが sendobject() でカスタムオブジェクトを送信したら (2) エンコーダの encode() を呼び出し (2.1) カスタムオブジェクトを String 型の JSON に変換します 最後に 左側のエンドポイントに JSON を送信します (2.2) このようにデコーダおよびエンコーダは エンドポイントがメッセージを送受信するたびに その間に入ってメッセージの変換を行うわけです なお デコーダとエンコーダでは Java API for JSON Processing などを利用して JSON の生成および解析を行うのがよいでしょう 5
6 図 5.1 JSON 送受信時の処理の流れ JSON を交換するチャットシステムを考えます RFC 1459 などで策定された Internet Relay Chat は高度なチャットシステムであり JOIN( チャネルへの参加 ) PRIVMSG( チャネルでの発言 ) および PART ( チャネルから脱退 ) などのコマンドがあります 今回はチャネルがない簡単なチャットシステムにし コマンドも PRIVMSG のみ使うことにします チャットでやりとりする JSON は図 5.2 のとおり command parameter および name プロパティを持ちます command は PRIVMSG のみとし parameter は 発言内容 name は 発言者名 とします {"command":"privmsg", "parameter":"hello.", "name":"taro" 図 5.2 チャットアプリケーションで送受信する JSON この JSON に対応する カスタムオブジェクト デコーダ および エンコーダ ( 表 5.1 参照 ) をま ず作成します それぞれ図 5.3~ 図 5.5 に示します public class ChatMessage { private final long time; private final String command; private final String parameter; private final String name; public ChatMessage(String command, String parameter, String name){ this.time = System.currentTimeMillis(); this.command = command; this.parameter = parameter; this.name = name; public long gettime(){ 6
7 return this.time; public String getcommand(){ return this.command; public String getparameter(){ return this.parameter; public String getname(){ return this.name; 図 5.3 カスタムオブジェクトのプログラム public class ChatMessageDecoder implements Decoder.Text<ChatMessage> public void init(endpointconfig ec) public void destroy() public boolean willdecode(string s) { //Java API for JSON Processing を使って JSON を解析 //JSON に command parameter および name があれば デコード対象とする JsonObject j = Json.createReader(new StringReader(s)).readObject(); return (j.containskey("command") && j.containskey("parameter") && public ChatMessage decode(string s) throws DecodeException { //Java API for JSON Processing を使って JSON を解析 JsonObject j = Json.createReader(new StringReader(s)).readObject(); String command = j.getstring("command"); String parameter = j.getstring("parameter"); String name = j.containskey("name")? j.getstring("name") : null; return new ChatMessage(command, parameter, name); 図 5.4 デコーダのプログラム public class ChatMessageEncoder implements Encoder.Text<ChatMessage> public void init(endpointconfig ec) public void destroy() public String encode(chatmessage chatmessage) throws EncodeException { //Java API for JSON Processing を使って JSON を生成 StringWriter w = new StringWriter(); try(jsongenerator g = Json.createGenerator(w)){ g.writestartobject().write("command", chatmessage.getcommand()).write("parameter", chatmessage.getparameter()).write("name", chatmessage.getname()).writeend(); return w.tostring(); 図 5.5 エンコーダのプログラム 7
8 デコーダおよびエンコーダでは クラス宣言でカスタムオブジェクトのクラス名をジェネリクス <ChatMessage> で指定しています これに伴い デコーダの decode() の復帰値とエンコーダの encode() の引数が ChatMessaage になります またデコーダおよびエンコーダでは Java API for JSON Processing を利用して JSON の解析および生成を行っています これらの 3 つのクラスを用意することにより エンドポイントでは JSON の解析 生成処理が不要になります サーバの Annotated Endpoint を図 5.6 = "/chat", encoders = {ChatMessageEncoder.class, decoders = {ChatMessageDecoder.class ) public class public void onerror(session session, Throwable cause){ System.err.println("ChatServerEndpoint#onError: "+cause.getmessage()); public void onchatmessage(chatmessage chatmessage, Session session) throws Exception{ Set<Session> sessions = session.getopensessions(); for(session s : sessions){ // if(session!= s){ // この if 文を有効にすると 送信してきたクライアントには配信しない s.getbasicremote().sendobject(chatmessage); // クライアントに JSON を配信 // 図 5.6 の decoders 属性および encoders 属性に 先のデコーダとエンコーダのクラスをそれぞれ指定します これだけで JSON を送受信するたびに ChatMessage オブジェクトとの相互変換を行ってくれます また onchatmessage() では Session クラスの getopensessions() を利用して 接続中のすべてのクライアントのセッションを取得し JSON を一斉配信しています クライアントの Annotated Endpoint を図 5.7 encoders = {ChatMessageEncoder.class, decoders = {ChatMessageDecoder.class ) public class ChatClientEndpoint public void onerror(session session, Throwable cause){ System.err.println("ChatClientEndpoint#onError: "+cause.getmessage()); public void onchatmessage(chatmessage chatmessage, Session session) { String output = String.format("%1$s: %2$tH:%2$tM (%3$s) %4$s", session.getuserproperties().get("name"), chatmessage.gettime(), chatmessage.getname(), chatmessage.getparameter()); System.out.println(output); 図 5.7 カスタムオブジェクトを送受信するクライアントエンドポイントのプログラム 8
9 @ServerEndpoint の decoders 属性および encoders 属性にも デコーダおよびエンコーダのクラスを指定します 図 5.8 は サーバエンドポイントに接続し PRIVMSG を送信するクライアントプログラムです プレイン文字列の送受信 の図 4.2 の main() と内容が似ていますが 特に sendobject() を使ってカスタムオブジェクトを送信している点に注目してください sendobject() を利用すれば サーバエンドポイントに送信する前に エンコーダがカスタムオブジェクトを JSON に変換してくれるわけです class ChatClient { public static void main(string... args) throws Exception { String url = "ws://localhost:8080/websocketsample/chat"; // サーバエンドポイントの URL WebSocketContainer container = ContainerProvider.getWebSocketContainer(); Class<?> clazz = ChatClientEndpoint.class; try(session session = container.connecttoserver(clazz, URI.create(url))){ // 接続 //JSON を送信 session.getbasicremote().sendobject(new ChatMessage("PRIVMSG", "Hello.", "Taro")); // すぐ切断しないよう 暫定的に 3 秒待つ Thread.sleep(3000L); 図 5.8 チャットクライアントのプログラム JSON とバイナリの送受信 先述したとおり 1 個のエンドポイントは 文字列メッセージ受信ハンドラ と バイナリメッセージ受信ハンドラ をそれぞれ 1 個まで持てます そこで 図 6.1 と図 6.2 の onbinarymessage() を それぞれ図 5.6 と図 5.7 の各エンドポイントに追加すれば バイナリの送受信もできます public void onbinarymessage(bytebuffer data, Session session) throws IOException { Set<Session> sessions = session.getopensessions(); for(session s : sessions){ // if(session!= s){ // この if 文を有効にすると 送信してきたクライアントには配信しない s.getbasicremote().sendbinary(data); // クライアントにバイナリを配信 // 図 6.1 サーバエンドポイントのバイナリメッセージ受信ハンドラのプログラム public void onbinarymessage(bytebuffer data) throws IOException { byte[] array = data.array(); // 受信したバイナリをファイルに保存する try(bufferedoutputstream w = new BufferedOutputStream(new FileOutputStream("bin.dat"))){ w.write(array, 0, array.length); 図 6.2 クライアントエンドポイントのバイナリメッセージ受信ハンドラのプログラム 図 6.3 は sendbinary() を利用してバイナリを送信するプログラム例です 図 5.8 の main() に追加す 9
10 れば サーバエンドポイントにバイナリメッセージを送信できます byte[] array = "abc".getbytes("utf-8"); ByteBuffer buffer = ByteBuffer.allocate(array.length); buffer.put(array); session.getbasicremote().sendbinary(buffer); 図 6.3 バイナリメッセージを送信するプログラム 図 6.1 と図 6.2 のプログラムではバイナリを変換せずにそのまま受信しますが 表 6.1 のデコーダおよ びエンコーダを用意すれば JSON の送受信 と同様にエンドポイントでバイナリの代わりにカスタムオ ブジェクトを受信できます クラスカスタムオブジェクト デコーダ エンコーダ 概要バイナリメッセージを表現する POJO です 必要に応じて バイナリの各プロパティを取得 / 設定する getter/setter のメソッドを追加するとよいでしょう このクラスを用意することにより エンドポイントではバイナリを解析 生成する処理が不要になります javax.websocket.decoder.binary インタフェースの実装クラスとして定義します デコーダでは デコート処理を行うかどうかを決定するための boolean 値を返す willdecode() および b バイナリをカスタムオブジェクトに変換するための decode() の decoders 属性で 1 個以上のデコーダのクラスを指定することにより WebSocket ランタイムがデコードの willdecode() および decode() を呼び出してくれます バイナリが送信されてきたら WebSocket ランタイムは まず デコーダの willdecode() を呼び出します willdecode() が true を返した場合は WebSocket ランタイムはそのデコーダの decode() を呼び出し 他のデコーダの willdecode() および decode() は呼び出しません 逆に willdecode() が false を返した場合は そのデコーダの decode() を呼び出さずに 次のデコーダの willdecode() を呼び出します なお WebSocket API の仕様では デコーダの呼び出し順序を明記していませんが GlassFish 4 同梱の WebSocket API のリファレンス実装である Tyrus 1.0 の場合 decoders に指定した順に willdecode() および decode() を呼び出します javax.websocket.encoder.binary インタフェースの実装クラスとして定義し カスタムオブジェクトをバイナリに変換するための encode() の encoders 属性で 1 個以上のエンコーダのクラスを指定できます WebSocket ランタイムはエンコーダのクラス宣言で指定するジェネリクスを見て どのエンコーダの encode() を呼び出すかどうかを決定します 表 6.1 バイナリを送受信するときに作成するクラスの一覧 最後に 以上 WebSocket API について説明しましたが GlassFish 4 同梱の WebSocket API のリファレンス実装である Tyrus 1.0 には多くのバグが報告されています 最新バージョンの Tyrus を入手して 開発 運用を行うのをお勧めします 参考文献 RFC WebSocket プロトコルを策定しています JSR Web Socket API を策定しています 10
11 Java Platform, Enterprise Edition (Java EE) Technical Documentation Java EE 7 チュートリアルや Java EE 7 ドキュメントへのリンクがあります Tyrus GlassFish 4 同梱の WebSocket API のリファレンス実装を開発しているプロジェクトです WebSocket API の仕様書などへのリンクがあります Tyrus の Issue Tracking Tyrus のバグ管理システムです Tyrus のバグ情報がわかります 商標について Java Java HotSpot は Oracle Corporation およびその子会社 関連会社の米国およびその他の国における登録商標です その他の会社名および製品名は それぞれの会社の登録商標もしくは商標です - 以上 - 11
intra-mart Accel Platform — IM-Repository拡張プログラミングガイド 初版
Copyright 2018 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. サンプルコードについて 2.4. 本書の構成 3. 辞書項目 API 3.1. 最新バージョン 3.1.1. 最新バージョンの辞書を取得する 3.2. 辞書項目 3.2.1. 辞書項目を取得する 3.2.2.
Client Client public void sendobject(object message) String String Web Container String RemoteEndpoint String Endpoint throwsioexception, EncodeExcept
@OnMessage public void handlecounter(int newvalue) {... @OnMessage public void handleboolean(boolean b) {... public void sendobject(object message) throws IOException, EncodeException Client Client public
intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書 第3版
Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 改訂情報はじめに本書の目的対象読者本書の構成概要外部ソフトウェア接続モジュールとは仕様外部ソフトウェア接続モジュールの構成サンプルプログラムサンプル内容動作に必要な環境構築プログラムソースログイン セキュリティ環境の構築外部ソフトウェア連携時の認可設定 2 改訂情報 変更年月日 変更内容 2012-12-21
開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]
開発 運用時のガイド [UNIX] JDK8 への移行に伴う留意点 2015.10 O c t o b e r はじめに 本書は 開発 運用フェーズで使用するドキュメントとして Java TM Development Kit 8 への移行に伴う 留意点について記述しています 1. 対象とする読者本書は Java TM Development Kit 8 を使用し システムを設計 構築 運用する立場にある方を対象としています
Android Layout SDK プログラミング マニュアル
プログラミングマニュアル Version 1.3.0 用 更新履歴 年月日 バージョン 履歴 2014.09.08 1.2.0.0 新規 (Layout Utilities ユーザーズ ガイド ) 2016.08.16 1.3.0.0 モバイル端末用レイアウトで直線部品と矩形部品に対応 モバイル端末用レイアウトファイルを CLFX から XML へ変更 Layout Print Engine から
Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac
Actual4Test http://www.actual4test.com Actual4test - actual test exam dumps-pass for IT exams Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN
intra-mart Accel Platform — イベントナビゲータ 開発ガイド 初版
Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform イベントナビゲータ開発ガイド初版 2013-07-01 改訂情報概要イベントフローの作成 更新 削除をハンドリングするイベントフローを非表示にする回答を非表示にするリンクを非表示にするタイトル コメントを動的に変更するリンク情報を動的に変更するナビゲート結果のリンクにステータスを表示する
intra-mart Accel Platform — IM-BloomMaker プログラミングガイド 初版
Copyright 2019 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. サンプルコードについて 2.4. 本書の構成 3. 前処理プログラム 3.1. 前処理を実装する 3.1.1. 前処理の実装方式 3.1.2. 前処理の実行順序と引数 3.1.3. リクエストパラメータの解析
intra-mart Accel Platform — イベントナビゲータ 開発ガイド 初版 None
クイック検索検索 目次 Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform イベントナビゲータ開発ガイド初版 2013-07-01 None 改訂情報概要イベントフローの作成 更新 削除をハンドリングするイベントフローを非表示にする回答を非表示にするリンクを非表示にするタイトル コメントを動的に変更するリンク情報を動的に変更するナビゲート結果のリンクにステータスを表示する
Javaセキュアコーディングセミナー2013東京第1回 演習の解説
Java セキュアコーディングセミナー東京 第 1 回オブジェクトの生成とセキュリティ 演習の解説 2012 年 9 月 9 日 ( 日 ) JPCERT コーディネーションセンター脆弱性解析チーム戸田洋三 1 演習 [1] 2 演習 [1] class Dog { public static void bark() { System.out.print("woof"); class Bulldog
Javaプログラムの実行手順
戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失
JavaプログラミングⅠ
Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double
PowerPoint プレゼンテーション
オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念
1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String
目次 1.SqlCtl クラスリファレンス 2 (1)Connect() メソッド 2 (2)DisConnect() メソッド 3 (3)Commit() メソッド 3 (4)Rollback() メソッド 4 2.SqlStm クラスリファレンス 5 (1)Prepare() メソッド 5 (2)Execute() メソッド 6 (3)Release() メソッド 6 (4)Immediate()
Java知識テスト問題
Java 知識テスト SDAS プログラマ(Java 編 ) 運営事務局 このテストは J2EE プログラマとしての Java の知識を評価するものです 問題は 30 問, テスト時間は J2EE 知識テストとあわせて 90 分です 問題は全て択一式です 選択肢から 1 つだけ選択してください 資料の閲覧は禁止です テストが終わり次第 答案用紙を提出していただいてかまいません テスト終了後, 本テストの内容を他の方に話さないでください
た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name
クラス ( 教科書第 8 章 p.267~p.297) 前回は処理をまとめる方法として メソッドについて学習した 今回はメソッドとその処理の対象となるデータをまとめるためのクラスについて学習する このクラスはオブジェクト指向プログラミングを実現するための最も重要で基本的な技術であり メソッドより一回り大きなプログラムの部品を構成する 今回はクラスにおけるデータの扱いとクラスの作成方法 使用方法について説明していく
Java講座
~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト
Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問
Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問のメソッドを追加する public static void main(string[] args) {
PowerPoint Presentation
ソフトウェア演習 B GUI を持つ Java プログラムの 設計と実装 4.1 例題 :GUI を持った電卓を作ろう プロジェクトCalculator パッケージ名 :example ソースファイル : Calculator.java GUI.java EventProcessor.java 2 4.2 GUI とイベント処理 GUI の構成 :Swing GUI の場合 フレーム JFrame:
- i - org.t_engine.tenet.core.coreerrormessageexception org.t_engine.tenet.core Class CoreErrorMessageException java.lang.object +-java.lang.throwable +-java.lang.exception +-org.t_engine.tenet.core.coreexception
intra-mart Accel Platform — Slack連携モジュール 利用ガイド 初版
Copyright 2018 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform Slack 連携モジュール利用ガイド初版 2018-12-01 1. 改訂情報 2. はじめに 3. システム要件 3.1. intra-mart Accel Platform 3.2. 検証済み環境 3.2.1. サーバ環境 3.2.2.
オブジェクト指向プログラミング・同演習 5月21日演習課題
オブジェクト指向プログラミング 同演習 5 月 21 日演習課題 問題 1 配列の例外処理例外が発生する可能性のある処理を try で囲み その後に catch で例外を捕捉します 例外処理の終了処理として finally が行われます これは書かなくて自動的に行われます 提出課題 1 (Kadai052301.java) 以下のプログラムは例外処理をしていない ArrayIndexOutOfBoundsException
SpringSecurity
Spring Security 1/40 OUTLINE Spring Security Spring Securityを使った認証の仕組み Spring Securityを使った独自認証 認証エラーメッセージの変更 2/40 Spring Security 3/40 Spring Security とは アプリケーションのセキュリティを高めるためのフレームワーク 認証 認可機能 その他 多数のセキュリティ関連の機能を持つ
2
プログラミング応用演習 b 10 月 5 日演習課題 2016/10/05 PAb 演習課題 プログラム仕様書作成課題 課題クラスを読み 次に示すクラスの仕様書を完成させよ なお 仕様書は クラス 1 つに付き 1 つ作成す る 加えて 図 1 のようなクラス継承の模式図を作成せよ < クラス名 のプログラム仕様書 > 作成者 : 学籍番号 名前 (1) クラスクラス名 : クラス名 説明 : クラスが何を表現しているか
Java言語 第1回
Java 言語 第 2 回簡単な Java プログラムの作成と実行 知的情報システム工学科 久保川淳司 [email protected] 簡単な Java プログラム Java プログラムのファイル名 Java プログラムのファイル名命名ルール ファイル名とクラス名は同じでなければならない HelloJava.java public class HelloJava { public
メソッドのまとめ
メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか
Prog2_9th
2013 年 11 月 21 日 ( 木 ) 実施例外処理 Java 言語では, 作成したプログラムを実行する際に, 記述した処理が想定しない事態によって実行できなくなる場合を例外と呼び, その例外への対処, 即ち例外処理が求められる これまでの教材に登場した例外の中で,IOException はコンパイラがチェックするため, 例外処理を必ず記述しなければコンパイルが出来ないものであるのに対して,ArithmeticException
HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど
HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなどを設定できます ソースファイル名 :Sample8_1.java // HP よりインポート文をここへ貼り付けてください
JAVA入門
JAVA 入門後期 10 情報処理試験例題解説 H14 年度秋問 8 次の Java プログラムの説明及びプログラムを読んで, 設問に答えよ プログラムの説明 ディジタル論理回路シミュレータを作成するためのクラスとテスト用クラスである (1) ゲートを表す抽象クラス Gate のサブクラスとして, NOT ゲートを表すクラス NotGate 及び AND ゲートを表すクラス AndGate を定義する
Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド
Brekeke PBX Version 2.1 ARS プラグイン開発ガイド Brekeke Software, Inc. バージョン Brekeke PBX v2.1 ARS プラグイン開発ガイド, 2008 年 2 月 著作権本書の著作権は Brekeke Software, Inc. にあります Copyright 2003-2008 Brekeke Software, Inc. 本書の一部または全部を
プログラミング基礎I(再)
山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全
--- サーバ側処理 Java servlet の例 // 通常の Java servlet での POST で受信と同じ protected void dopost(httpservletrequest request, HttpServletResponse response) throws S
2 サーバとの連携と BlazeDS Flex アプリケーションではクライアント ( ブラウザ ) で処理できる機能が多いですが データベースへのアクセスや クライアントでは負担が大きい処理などはサーバ側で行います また パソコンのローカルディスクへのアクセスのように セキュリティの都合でクライアントで直接処理できない場合は一旦サーバにアップロードするなどして処理します 2-1 ファイルアップロードファイルをアップロードする場合は
HTTP 404 への対処
Sitecore CMS 6 HTTP 404 への対処 Rev: 2010-12-10 Sitecore CMS 6 HTTP 404 への対処 Sitecore を使用して HTTP 404 Page Not Found 状態に対処するための開発者向けガイド 目次 Chapter 1 イントロダクション... 3 Chapter 2 HTTP 404 Page Not Found 状態... 4
JavaプログラミングⅠ
Java プログラミング Ⅱ 8 回目抽象クラスとインタフェース課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) 抽象クラスのオブジェクトは生成できる (2) 抽象メソッドとはメソッドの本体が未定義のメソッドである (3) 抽象メソッドをメンバーにもつクラスは抽象クラスである (4) 抽象クラスを拡張してすべての抽象メソッドをオーバーライドすれば サブクラスのオブジェクトを生成できる
Apache ActiveMQ における認証処理不備の脆弱性
Japan Computer Emergency Response Team Coordination Center 電子署名者 : Japan Computer Emergency Response Team Coordination Center DN : c=jp, st=tokyo, l=chiyoda-ku, [email protected], o=japan Computer
第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ
第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイルの作成方法 コンパイル方法について説明します IDL ファイルの作成にあたっては INTERSTAGE
JavaプログラミングⅠ
Java プログラミング Ⅰ 3 回目変数 今日の講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能です 変数は 型 ( データ型ともいいます ) と識別子をもちます 2 型 変数に記憶できる値の種類です型は 値の種類に応じて次の 8 種類があり これを基本型といいます 基本型値の種類値の範囲または例 boolean 真偽値 true または
WTM2019SingleSignOn
[Java 開発者向け ] シングルサインオンへの対応 - Java カスタマイズコードの書き方 1/45 OUTLINE Spring Security Spring Security を使った認証の仕組み Spring Security を使ったシングル サインオン 2/45 Spring Security 3/45 Spring Security とは アプリケーションのセキュリティを高めるためのフレームワーク
FW ファイルアップロード ダウンロード機能利用ガイド Version 年 9 月 21 日富士通株式会社 i All Right Reserved, Copyright FUJITSU LIMITED
FW ファイルアップロード ダウンロード機能利用ガイド Version 1.1 2016 年 9 月 21 日富士通株式会社 i 改訂履歴改訂 No. 日付 Version 章 No. 項 No. 改訂内容 1 2015/12/02 1.0 - - 新規作成 2 2016/09/21 1.1 4 4.1.3 text/plan を text/plain に修正 章立てを修正 ii 目次 第 1 章
intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書 第2版 2014-04-01
Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目 次 intra-mart Accel Platform 外 部 ソフトウェア 接 続 モジュール 仕 様 書 第 2 版 2014-04-01 改 訂 情 報 はじめに 本 書 の 目 的 対 象 読 者 本 書 の 構 成 概 要 外 部 ソフトウェア 接 続 モジュールとは 仕 様 外 部
問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。
ソフトウェア基礎演習課題 文法理解度確認範囲 問題 1 データ型 ( 変数, データ型 ) 問題 2 制御構造 (switch 文 ) 問題 3 制御構造 (while 文 ) 問題 4 制御構造と配列 ( 総和 ) 問題 5 制御構造と配列 ( 総和, 平均 ) 問題 6 データ型と各種演算子 ( 文字列, 検索 ) 問題 7 クラスの定義 ( メソッドの定義, コンストラクタの定義, キャスト
Javaの作成の前に
メディアプロジェクト演習 1 参考資料 Javaとは JavaScript と Java 言語の違い オブジェクト指向 コンストラクタ サーブレット 本資料内のページ番号は, 以下の参考書のページを引用している 高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに プログラミング言語とは? オブジェクト指向とは? Java 言語とは? JavaとJavaScriptの違いとは?
// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma
HOW DO I ソケットで通信を行うには ここでは以下の手順で説明します ソケットクライアントを作成するデータを送信するデータを受信するソケットクライアントを使用する ソケットクライアントを作成する 1. このコンテンツのサポートファイルの Start フォルダから "UDPClient" プロジェクトを開きます 2. クライアントを動作させるため コンピューターで簡易 TCP/IP サービスを有効にする必要があります
intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド 初版
Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. IM- 共通マスタの拡張について 2.1. 前提となる知識 2.1.1. Plugin Manager 2.2. 表記について 3. 汎用検索画面の拡張 3.1. 動作の概要 3.1.1. 汎用検索画面タブの動作概要 3.2. 実装の詳細 3.2.1. 汎用検索画面タブの実装
TestDesign for Web
発行日 2012/6/21 発行元 株式会社アープ 本書は Web でのテスト自動化における Test Design の一連の操作方法まとめたものです Test Design のメニューの説明やより詳細な使い方については ユーザーズガイド を参照してください 目次 1. はじめに... 1 2. 環境構築... 2 2.1. Selenium のサイトについて... 2 2.2. Selenium
基本情報STEP UP演習Java対策
トレーニング編 1. 予約語 extends アクセスレベル class サブクラス名 extends スーパクラス名 { (1) スーパクラス ( 既存のクラス ) を拡張して, サブクラス ( 新しいクラス ) を定義する場合に extends を利用する (2) extends の後ろには, スーパクラスの名前を一つだけ指定できる (3) サブクラスからインスタンスを生成すると, スーパクラスに定義されたインスタンス変数やメソッドがこのインスタンス内部に引き継がれる
メディプロ1 Javaプログラミング補足資料.ppt
メディアプロジェクト演習 1 Javaプログラミング補足資料 l Javaとは l JavaScript と Java 言語の違い l オブジェクト指向 l コンストラクタ l 継承 抽象クラス 本資料内のページ番号は, 以下の参考書のページを引用している高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに l プログラミング言語とは? l オブジェクト指向とは?
新・明解Java入門
537,... 224,... 224,... 32, 35,... 188, 216, 312 -... 38 -... 38 --... 102 --... 103 -=... 111 -classpath... 379 '... 106, 474!... 57, 97!=... 56 "... 14, 476 %... 38 %=... 111 &... 240, 247 &&... 66,
JavaプログラミングⅠ
Java プログラミング Ⅱ 4 回目クラスの機能 (2) コンストラクタ クラス変数 クラスメソッド課題 確認 問題次の各文は正しいか誤っているか答えなさい (1) コンストラクタはメソッドと同様に戻り値をもつ (2) コンストラクタはオブジェクトが生成されると最初に実行される (3) コンストラクタはメソッドと同様にオーバーロードができる (4) コンストラクタは常に public メンバとしなければならない
はじめに インフォマート API の呼び出しには OAuth2.0 による認証を受ける必要があります OAuth2.0 を使うことで インフォマート API を利用するサービスは インフォマートプラットフォーム ID( 1 以下 PFID) とパスワードを保存したり処理したりすることなく PFID
インフォマート API 利用における OAuth2.0 認証手順 作成日 2017 年 6 月 14 日 更新日 2017 年 9 月 27 日 株式会社インフォマート 1 はじめに インフォマート API の呼び出しには OAuth2.0 による認証を受ける必要があります OAuth2.0 を使うことで インフォマート API を利用するサービスは インフォマートプラットフォーム ID( 1 以下
プロキシ Pac ファイルとそのサンプルについて
プロキシ Pac ファイルとそのサンプルについて 目次 質問 : 質問 : プロキシ Pac ファイルとは何ですか 例を挙げてください 環境 : Cisco Web セキュリティアプライアンス 注 : このナレッジベース記事では シスコによる保守およびサポートの対象でないソフトウェアを参照しています 情報は 利便性のために無償で提供されています さらにサポートが必要な場合は ソフトウェアベンダーに連絡してください
メディプロ1 Javaサーブレット補足資料.ppt
メディアプロジェクト演習 1 Java サーブレット補足資料 CGI の基本 CGI と Java サーブレットの違い Java サーブレットの基本 インタラクティブな Web サイトとは Interactive q 対話 または 双方向 q クライアントとシステムが画面を通して対話を行う形式で操作を行っていく仕組み 利用用途 Web サイト, シミュレーションシステム, ゲームなど WWW = インタラクティブなメディア
[HO-2] NetBeansとGlassFishではじめるJava EE7ハンズオン
Java EE 7 ハンズオン概要 日本オラクル株式会社 Oracle University 野邊 哲男 Java Day Tokyo 2016 2016 年 5 月 24 日 Copyright 2016, Oracle and/or its affiliates. All rights reserved. Safe Harbor Statement The following is intended
$ java StoreString abc abc ed abced twice abcedabced clear xyz xyz xyz bingo! abc bingo!abc ^Z mport java.io.*; ublic class StoreString { public static void main(string[] args) throws IOException{ BufferedReader
文字列操作と正規表現
文字列操作と正規表現 オブジェクト指向プログラミング特論 2018 年度只木進一 : 工学系研究科 2 文字列と文字列クラス 0 個以上の長さの文字の列 Java では String クラス 操作 文字列を作る 連結する 文字列中に文字列を探す 文字列中の文字列を置き換える 部分文字列を得る 3 String クラス 文字列を保持するクラス 文字列は定数であることに注意 比較に注意 == : オブジェクトとしての同等性
10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV
[email protected] [email protected] http://www.misojiro.t.u-tokyo.ac.jp/ tutimura/sem3/ 2002 12 11 p.1/33 10/16 1. 10/23 2. 10/30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20
Microsoft PowerPoint - chap10_OOP.ppt
プログラミング講義 Chapter 10: オブジェクト指向プログラミング (Object-Oriented Programming=OOP) の入り口の入り口の入り口 秋山英三 F1027 1 例 : 部屋のデータを扱う // Test.java の内容 public class Test { public static void main(string[] args) { double length1,
PowerPoint プレゼンテーション
NEC モバイルバックエンド基盤入門応用編 ver 7.5.0 2018 年 10 月 1 日 日本電気株式会社 Push 通知 クライアントへの Push 通知 : APNs / FCM Android / ios で使用可能 ユーザがアプリを起動していなくても サービス提供側からスマートフォンやタブレットにメッセージを送る仕組み モバイル機器はプラットフォーム毎に Push 通知の仕組みが提供されています
