こんにちは、Chatwork 株式会社のソフトウェア開発者、立野と申します。 2021 年 7 月に アマゾン ウェブ サービス ジャパン (AWS) さん主催のイベント「そろそろマネージド、クラウドネイティブで行こう ! サーバーレスへのチャレンジ」にて、Chatwork におけるサーバーレス開発事例をお話しました。 弊社事例に対して「エンタープライズ開発でおなじみの Java/Scala で、高速・低コストの AWS Lambda 関数を実現する技術」が興味深い、という反応をいただきました。 この点を「ぜひ深堀りして紹介してみませんか」と AWS のソリューションアーキテクトの方々にお誘いを受けましたので、皆さんでも お試しいただけるソースコード つきの実践形式でご紹介いたします。 なお弊社事例の背景やアーキテクチャ詳細などにご興味のある方は、ぜひブログ記事や発表資料をご覧ください。
目的 Java アプリケーションから外部プロセスを実行する 外部プロセスを実行した結果を取得する 実行環境 OS:Windows 7 言語:Java 8 開発環境:eclipse 今回呼び出す外部プロセス:notepad, mecab 外部プロセスを実行する(サンプル:メモ帳を起動する) メモ帳が起動したら成功 SystemCall.java import java.io.IOException; public class SystemCall { public static void main(String[] args) { String[] Command = { "cmd", "/c", "notepad.exe"}; // 起動コマンドを指定する Runtime runtime = Runtime.getRuntime(); // ランタイムオブジェクトを取得する try { r
Jar は ZIP形式の圧縮を行ってアーカイブ化された Java のライブラリや実行モジュールです。 Jar 内にあるファイルを更新する場合、ZIP形式で解凍してファイルを上書きなどし再度圧縮してもよいのですが、 これは無知蒙昧な精神論ですが Java のコマンド群で解決できるのであればそれがベストだと思い、 その方法を探してみました。 結論からいうと、下記のオプションで jar コマンドで可能です。 jar -uf JARファイル名 注入するファイル/ディレクトリ名 上記にて任意のファイル/ディレクトリが注入可能です。 なお、jar 内の任意のファイル/ディレクトリを抽出するのは下記となります。 jar -xvf JARファイル名 抽出するファイル/ディレクトリ名 もし、jar 内のパッケージされているクラスファイルを1ファイルのみ更新したい場合は、下記のオペレーションとなります。 1.
なぜ Go では何百万もの Goroutine を作れるのに Java は数千のスレッドしか作れないのか? (この記事は Why you can have millions of Goroutines but only thousands of Java Threads の翻訳です) 経験のあるエンジニアならば JVM 言語で次のようなエラーを見たことがあるでしょう。 [error] (run-main-0) java.lang.OutOfMemoryError: unable to create native thread: [error] java.lang.OutOfMemoryError: unable to create native thread: [error] at java.base/java.lang.Thread.start0(Native Method) [erro
Java 8はついにラムダ式を導入します。ラムダ式自体は2009年からProject Lambdaで利用することができました。当時はラムダ式はJava Closuresと言われていました。サンプルコードを紹介する前に、ラムダ式がJavaプログラマにとってなぜ歓迎すべき機能なのかを説明しましょう。 なぜラムダ式を使うのか ラムダ式の一般的な使い方はGUI開発においてです。一般的に、GUIプログラミングではイベントと結びつく振る舞いを解決する必要があります。例えば、ユーザがボタンを押したとき(イベントが発生したとき), プログラミングは何らかの処理を実行する必要があります。例えば、Swingでは、次のコードで示すようにActionListenersを使います。 class ButtonHandler implements ActionListener { public void actionP
GoFデザインパターンの一覧表と,活用のためのコメント,および入門者が独学するためのリンク集(サンプルコード付き)。 入門者の独学を支援するために,このページのURLを提示して熟読させ,各パターンを短時間で効率よく学んでもらう。 デザインパターンはプログラマの常識だ。 Java使いかどうかは問わない。 にも関わらず,入門書を買ったまま,途中で挫折する人が多い。 挫折の原因は,パターンの数が23もあって,多いからだろう。 全パターンをすんなり覚えてもらうためには,各パターンごとに 「要するにこういう目的のパターンなんだ。」 「10文字で表現すると,パターンの意味はこうなんだ。」 という要点・本質を,短いコメントで伝えれば助けになるだろう。 こういった学習を通して,Java言語の「設計思想」も併せて感じ取ってゆけるはず。 全パターンの一覧表(要約コメント付き) 全パターンについて,10文字以内
前置き Java において、メソッドへの引数はプリミティブ型だろうが参照型だろうが値渡しで渡されるのですが、いつまでたっても参照渡しという人が後をたちません。悲しい。 その理由 「参照渡し」と主張する人は、以下の二点のどちらか(あるいは両方)について誤解していることが多いように思われます。 Java における「参照」とは何かがわかっていない そもそも「値渡し」と「参照渡し」が何なのかわかっていない なので、その二点について説明してみます。 説明 Java における「参照」とは JLS - 4.3.1 より An object is a class instance or an array. The reference values (often just references) are pointers to these objects, and a special null refere
Scalaの良いところ 現代的なプログラミングについて学べる 実用的なアプリケーションが作成できる 関数型言語、オブジェクト指向言語(C++, Java)などの良いところを吸収している 関数定義のための簡潔な構文 オブジェクトを使ってデータ構造、コンテキストを定義 Syntaxが簡潔(コードを短く書けるのは武器) そのため、言語の不備と戦うための技術から解放される テンプレートによるHack (Modern C++ Design) 言語の不備を乗り越えるためのデザインパターン JavaでのVisitorパターンなどはScalaでは不要。パターンマッチを使えば良い ただし、Scala特有のデザインパターンはある (Loan, concept, cake pattern, monadなどなど) Rubyもprimitive型を捨て、オブジェクト指向に徹することで良いデザインの言語になっている
あなたとスレッドダンプ - スレッドダンプ入門 - この国では犬が が非常にわかりやすく、自分でブログエントリを書く必要はないが、Oracle Database や Linux の性能分析に携わる者の観点から Java のスレッドダンプについて整理してみた。具体的なスレッドダンプの分析方法はサポートエンジニアが語るWebLogic Serverトラブルシュートのノウハウがとてもわかりやすい。 WebLogic のスレッドダンプの見方については id:yamadamn さんの スレッドダンプから見るWebLogic Serverの世界 #javaee - yamadamnのはてな日記 がわかりやすい。 スレッドダンプとは Javaのスレッドのスナップショット。 取得した瞬間のJava仮想マシン(JVM)内に存在するスレッド(ID、名前、状態、タイプなど)とコールスタックを見ることができる。
まえがき ずっとJava11を使っていました。そのためすっかりラムダ式やStreamAPIでの書き方に慣れていたのですが、最近Java7を使って稼働しているプロジェクトに異動したので、何ができて何ができないのか、ちょっと調べてみました。 Javaの変遷 私見ですが主要だと思う仕様変更を並べてみました。アプリ実装に関係する部分のみピックアップしています。 このバージョンのこれは入れておいたほうが良いよ!との意見がありましたらコメントにぜひお願いします。 Java8 2014/03/18 正式リリース(GA) https://openjdk.java.net/projects/jdk8/ ラムダ式 https://openjdk.java.net/projects/lambda/ https://qiita.com/sano1202/items/64593e8e981e8d6439d3 pub
概要 AndroidをJavaで書くマンしている 今まで、staticに突っ込んだ値は、アプリのプロセスが終わるまでは生きていると思っていた プロセスが終わるまで生きてるんだから、staticに値つっこんで管理せばええやろ〜〜〜と思って、そういったコードを書いている箇所があった 今回の場合、staticフィールドに状態を持たせるようなコードを書いていた 「staticの値って、ホントにプロセス終わるまで生きてるの?」「その理解、ホント?」とレビューで突っ込まれた 先に書いていた理解してた事柄は、学生の時に「そうなんだ〜。ふ〜ん。」程度に覚えていた知識で自信もなかったので、調べたのでそのメモ 先に結論 staticも初期化される可能性は普通にある staticとするのは定数のみにして、状態管理に使わないほうが良さそう (この理解に間違いがあれば、何かしらでツッコミを入れてもらえると、とてもあ
aws-sdk-java 1.11.179 を参照して書いています。 AWS SDK for Java はデフォルトでいろんな場所から認証情報を読み込みます。 DefaultAWSCredentialsProviderChain の JavaDoc を見ると結構書いてあります。これと各 Provider の実装を見ながらどうなっているか見ていきます。 次のものを順番に試して最初に見つかった認証情報を利用するようになっています。 環境変数 EnvironmentVariableCredentialsProvider AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY 環境変数 (Java 以外の SDK でも利用しているのでこちらのほうがオススメ) AWS_ACCESS_KEY と AWS_SECRET_KEY 環境変数 AWS STS を利用する場合は AW
オブジェクトとプリミティブ型の値の保持方法の違い Javaのオブジェクト(Classや配列など)はスタック領域にヒープ領域の参照情報を持ちます。 実際の値はヒープ領域に保持します。 プリミティブ型はオブジェクトとは異なるメモリ管理が行われます。 プリミティブ型の変数を作成するとスタック領域に値を保持します。 ※ただしプリミティブ型の配列はオブジェクトとして扱われる為ヒープ領域に値を保持します。 メソッドの引数に渡す時の挙動 メソッド引数へオブジェクトやプリミティブ型の変数を渡す際 スタック領域の内容が別のスタック領域にコピーされます。 上記の様な場合、argAの参照は変数aと同じになる為 method1の内部で参照先の値を変更すると変数aにも影響を与えます。 ※argBはプリミティブ型なので変数bとは切り離されています。 ソースコードサンプル ここまで記載した内容が正しいか確認するため、ソ
説明 依存関係には、とりあえず logback-classic を追加すれば動かせる。 推移的な依存関係の解決で、 logback-core や slf4j-api などが付いてくる。 Logback を使う場合、 API はログファサードである SLF4J を使用する。 設定ファイル(logback.xml)が存在しない場合、デフォルトでコンソールにログが出力される。 ロガーの取得には、 LoggerFactory#getLogger() を使う。 引数にはロガーを特定するための名前を渡す。 普通は、ロガーを使うクラスの Class オブジェクトを渡す。 すると、クラスの FQCN を名前にしたロガーを取得できる。 Logger インターフェースの使い方 ログレベル package sample.logback; import org.slf4j.Logger; import org.s
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く