Javaのjava.nio.file.Filesで作った一時ファイルをプログラム終了時に削除するのにFilesクラスにそれ用のAPIがあるかと思っていたけどなかったので以下のようにして対応した。

Java 14が2020/3/17にリリースされました。 Java SE 14 Platform JSR 389 ダウンロード OpenJDKサイトからダウンロードできます。 https://jdk.java.net/14/ MacやLinuxでのインストールにはSDKMAN!をお勧めします Oracle OpenJDK以外に無償で商用利用できるディストリビューションとしては、次のようなものがあります。 AdoptOpenJDK Azul Zulu Community Liberica JDK LTSではないのでAmazon Correttoではリリースされないようです。 アップデートは4月に14.0.1が、7月に14.0.2がリリースされることになります。 Oracle JDKは開発用途には利用できますが、商用利用にはJava SE Subscriptionを購入する必要があります。 J
はじめに この記事はJava Advent Calendar 2019の13日目の記事です。13日の金曜日です。不吉ですね。 不吉といえば、OS依存ってなんか不吉な感じがしませんか? たとえばWindows環境で動作確認を行った時は問題なかったけど、Linux環境で動かしたらエラーになった…なんてことがあったりします。Write once, run anywhereなJavaですが、OSごとの違いを考慮しなくていいわけではありません。 そこでこの記事では、Javaの標準ライブラリでOS依存が隠れている例をいくつか紹介してみます。 この記事における「OS依存」 一口にOS依存といっても色々なことが考えられますが、この記事ではプログラムの実行結果がOSによって変わってしまう場合のことを「OS依存」と表現することにします。 内部的にOSネイティブなAPIを呼ぶメソッドはたくさんありそうですが、ど
2017年9月に登場したJava 9以降、Javaは6カ月ごとに「フィーチャーリリース」と呼ばれるメジャーアップデートが行われています。Java 13は、今年3月に登場したJava 12に続くメジャーアップデートです。 Java 13のおもな新機能は、Application Class-Data Sharing機能を拡張した「Dynamic CDS Archives(JEP 350)」、ZGCガベージコレクタを改善し使われていないヒープメモリを返却する「ZGC: Uncommit Unused Memory(JEP 351)」、Project Loomの一部として既存のSocket APIを再実装した「Reimplement the Legacy Socket API(JEP 353)」、Switch式を可能にする「Switch Expressions(JEP 354)」(プレビュー)、J
タイトルで何を言ってるかわからないって? 自分もイマイチわからないよ。 詳しく言うと、 Tomcatサーバを動かしていてサーバサイドJavaやJSPにHTML等から日本語(マルチバイト文字)をGETで投げるときに文字化けしてしまう問題 結構はまりました。 http://example.jp/foo.jsp?item=はてなこんな感じでURL内に日本語を使うとき GETで日本語を含むマルチバイト文字を送るのはあまりよろしくないが、 そのページをブックマークする可能性があったりするとどうしてもURLに対し一意なページにしたい。 じゃぁ英数字の文字列でもいいじゃん・・・ってなるけど日本語の方が見たときにわかりやすいってのはあると思う。 はじめは何も考えずに下みたいな感じでしてたけど (※HTML側もJSP側も文字コードはUTF-8) HTML側 <form method="get" action
Use of # (pound sign) OGNL is used to refer to objects in the ActionContext as follows: objectName: object in the ValueStack (default/root object in the OGNL context), such as an Action property #objectName: object in the ActionContext but outside of the ValueStack, specifically... #objectName: ActionContext object that has been created using the Struts2 data tags with the default action scope (e.
Javaフレームワーク「Quarkus」登場。Javaコードからネイティブバイナリを生成し瞬時にJavaアプリが起動、コンテナへの最適化を実現。Red Hatがリリース Red HatはQuarkusの目的を、Kubernetesやサーバレス環境においてJavaを先進的なプラットフォームにすることだと説明しています。下記はQuarkusを発表したブログの記事から引用。 The goal of Quarkus is to make Java a leading platform in Kubernetes and serverless environments while offering developers a unified reactive and imperative programming model to optimally address a wider range of d
(この記事は 地平線に行く とのマルチポストです) Arrays.asList(T... a) というメソッドについてググると、「このメソッドで返ってくる List は、add や remove ができないので注意しましょう」ということが良く書かれています。 でも、「なぜできないのか?」という点については書かれていないことが多いので、理由を説明します。 一言でまとめると「配列を List として扱えるようにラップするためのものだから」です。 (「変換するもの」ではないです) そもそも、どう使うもの? 配列を List<T> として扱いたいときに使います。 例えば、シャッフルするのに Collections.shuffle(List<?> list) という引数に List を取るメソッドはあるのですが、引数に配列を取るメソッドがありません。 そういうときに、 Collections.sh
Javaで日付/時間を扱うには従来はDate/Calendar/DateFormat等のクラスを使っていたが(以下、旧API)、Java8からはjava.timeパッケージに新しくAPIが追加された(以下、新API)。 しかし新APIはパッケージ数が5、クラス数は69もあり最初はどれをどう使うのか戸惑ってしまう。 そこで最低限これだけ覚えておけば旧APIと同じ事ができるという程度の情報をまとめてみた。 新APIの特徴 旧APIとは全く別のAPI。 データを格納するクラスは、日時/日付のみ/時間のみなど保持する要素やタイムゾーンの有無などで、複数のクラスから選べるようになった。 データ保持と日付操作(年/月/日フィールドの取得/変更など)が1クラスで出来るようになった。 (旧APIではデータ保持はDateクラス、日付操作はCalendarクラスと分かれていた) 日時クラスはImmutable
タイトルの通り。 @RunWith(SpringJUnit4ClassRunner.class) を指定していると JUnit4 で @Theory とか @Parameterized したいときに困るわけだけども、SpringClassRule と SpringMethodRule を使えば、RunWithにTheories.classとかを指定できる。 サンプル的なものはこちら。 参考:Spring Framework Reference Documentation 14.5.8 TestContext Framework support classes 比較的新しいらしい@FromDataPointsも使ってみたよ。 なお、Spring 4.2からのようなので注意。 testCompile 'org.springframework:spring-test:4.2.0.RELEASE'
Scheduledアノテーションを使うと、スケジュールされたタイミングでメソッドを実行することができます。 これで周期実行的なものは、簡単に実装できます。 Getting Started · Scheduling Tasks 34. Task Execution and Scheduling 実装方法 実行したいメソッドにScheduledアノテーションを付けます。 @Component public class Scheduler { @Scheduled(fixedRate = 5000) public void doSomething() { // 5秒周期で行いたい処理 } } Scheduledアノテーションによる実行を有効とするためには、EableSchedulingアノテーションを付けます。 @SpringBootApplication @EnableScheduling p
ざっくり言うと リスト構造のデータに対してランダムアクセスはしちゃだめだぞ。お兄さんとの約束だ! 発端 数年前に他部署の支援で作ったJavaのシステムに、ちょっとデカめのデータを突っ込んだらありえないほど遅いので助けてくれ、と連絡が入った。 まぁクエリとかインデックスをちょっと見れば直るっしょ・・・と鼻をほじりながら支援に向かった。 処理内容 遅い部分の処理は以下のようなものであった。 処理対象のデータをListで受け取る。 それをforループで1件ずつ前処理する。 処理結果をオブジェクトに格納し、ORマッパーでDBにINSERTする。 これだけ? そう、これだけだ。並列処理なんて高級なことはもちろんやってない。 インフラ調査 処理中のサーバのようすを調査する。今回のインフラは典型的な3層3サーバ構成。 WEBサーバはなにもかもが余裕。 APサーバではCPUを1つ使い切っている。 14コア
@irofさんのエントリーで、GradleでEnclosedのテストが二回実行されるんだ。 「あとではまる」とブックマークしたらば、3ヶ月後にちゃんとはまりましたw で、原因ですが、Groovyでコンパイルされた後のネストクラスが、トップレベルのクラスとして認識されるため、Eclosedで実行され、かつ通常のJUnitテストとして実行されるのが、おそらくは原因。 回避策は2つ。 1つはEnclosedテストランナーを利用しないw というか、@RunWithの部分をコメントアウトすればOK。 もう一つは、テストの実行時に除外クラスを指定すること。つまり、build.gradle に次のように設定する。 test { exclude '**/*$*' } ネストクラスやインナークラスは、「アウタークラス$インナークラス」となるため、$で判断してます。 exclude '**/*Test$*'
struts.xmlの修正 に以下を追記 <interceptor name="annotationInterceptor" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"/> に以下を追記 <interceptor-ref name="annotationInterceptor"/> Actionクラス public class BeforeAfterAction extends ActionSupport { @Before public void before(){ System.out.println("@before"); } @After public void after() { System.out.println("@after"); } @Befo
でんさんの開発部屋 自分がつまずいた点の解決法や、技術動向などをメモ書きとして残しつつ 見てくれた人の知識として役立ってくれればいいなと切に願っているサイトです。 Tomcat でWeb アプリを作成していて煩わしく思うことがあります。 それは、アプリを更新したときのTomcat の再起動です。 アプリ自体はほんの1部しか書き換えてないのに、再起動って… 時間かかりすぎです。 しかし、Tomcat にはTomcat 自体を再起動しなくてもアプリを読み直す機能があります。 それが、Web Application Manager です。 Web Application Manager を利用するには、 http://localhost:8080/manager/html にアクセスしてください。 上記のURLにアクセスすると、ユーザ名、パスワードが聞かれると思います。 どんなユーザがアクセスで
通常、サーブレットやJavaBeansなどに代表される「.class」ファイルを新規に作成(または更新)した場合、コンテナの再起動が必要となります。 しかし、コンテナの停止と起動の作業は、開発時における「.class」ファイルを頻繁に差し替える環境下では非常に面倒な作業といえるでしょう。 そこで、Tomcatではサーバ設定ファイル「server.xml」を編集することで、特定のフォルダ配下の「.class」ファイルが更新された場合には再起動を行わなくても済む方法が用意されています。 ただし、この処理を有効にした場合、コンテナは常に特定のフォルダ配下を監視するため、サーバに余計な負荷を強いることになります。実運用環境ではサイトのパフォーマンスに影響を与える可能性もありますので、あくまで開発環境でのみ使用するTIPSとして覚えておくとよいでしょう。 操作手順 「conf」フォルダ下の「serv
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く