I/O待ちで全仮想スレッドを巻き込んで止まるとか(この事象を「PIN」と言うそうな)、使いどころは難しそうだけれど、多分賢い人達がAPサーバとかに組み込んでいい感じにしてくれることだろうから我ら凡夫はそれを待てば特に苦労せずスループットがあがるという訳よ。
その中で、さらりとJava19ではExecutorServiceインターフェースにAutoCloseableが付くというある意味グリーンスレッドよりも重要情報が。マジか。マジだった。まぁ自前でラッパー作って使う人多かったけど。
今度のペットネームは「Photon」だそうで。火星だのネオンだの酸素だの光子だの脈絡無いなーと思ったら、アルファベット順に何かカッコよい物体の名前を付けていたそうで成る程。
インストーラから会社のパソコンに入れたらしばらくして起動しなくなった。これ、前にも起きたな。
確か、会社パソコンのセキュリティソフトがディスクを巡回して「何かテキストっぽいファイル」があると見境なく暗号化してしまうので起こる。
なので暗号化対象外のディレクトリにインストールしないといけないのだが、どうもEclipseはインストーラを使うと、指定したディレクトリの他のC:\Users\ユーザ名のディレクトリ配下のどこかに何か設定ファイルを作っちゃうんだよな。以前は、インストーラではなくzipを展開する形でインストールしたら解決したんだが、まだ試していない。
余りに素早く再起不能になったので、4.7とどこが変わったかも良く判らない。既存のPJのビルドを通しただけ。Java 9,10の文法への対応が目玉と聞くが、Java は8の次は11が本番、9,10はスルーが賢明というもの。まぁ自宅では、レンタルVMのメモリが1GBなので当分の間、最後の32bitなJVMたる8だがな。どこかの誰かある程度信用ある団体が、Windows 32bit版の配布をしないものだろうか…。32bitの方が省メモリなので、64bitOS上でも需要はある(ソースは私)。
先日、VMのメモリが枯渇してどうにもならので、ActiveMQサーバプロセスを別VM上に切り出してクライアントとの間の通信はREST経由としたんだが、どうもたまに電文が欠落しているような気がして、まぁTwitterへの投稿なので別に良いけど、一応ログを見た。
やっぱり欠落していた。クライアント側でPOSTが3発目毎に固まっているように見える。HTTPSサーバ側では2発しか受けていない。おそらく、何かFlashとかCommitとか何か終末的処理が抜けているのだろうと思って調べたら
HttpClient - HttpClient Tutorial
method.releaseConnection();
が行われていなかった。
This is a crucial step to keep things flowing. We must tell HttpClient that we are done with the connection and that it can now be reused. Without doing this HttpClient will wait indefinitely for a connection to free up so that it can be reused.
http://hc.apache.org/httpclient-legacy/tutorial.html
とのこと。
こんなものがあったとは。迂闊。毎回1発しか試してなかったから見つからなかったんだな。しかし1発目成功、2発目から固まるなら分かるが、なんで3発目から固まっていたのだろう…。
WebLogicでは可能らしい。やったことないけど。いつも外からHTTPで受けてJMSキューに自分で書いてたからなー。
同一サーバ上ならJMSバインディングでも良い気もする。HTTPって「ポートに穴が空いてることが多い」だけが取り得だし。
9.2のドキュメント
http://otndnld.oracle.co.jp/document/products/wls/docs92/webserv/advanced2.html
11gのドキュメント
http://docs.oracle.com/cd/E21043_01/web.1111/b61634/jmstransport.htm#i225309
Webサービススタートガイド http://docs.oracle.com/cd/E21043_01/web.1111/b61647/toc.htm
んー。BEAの文書もあんまり判りやすくは無かったが、Oracleよりはマシだった…。サンプルも日本語だったし。今より量もあったような。
つかWebLogicは8.1の頃が何かと一番良かったなー。
SOAPって今はドキュメント指向・リテラルなんだっけか?JAX-WSはそれがデフォだったよな、たしか。
久々に
マスタリングJavaEE5 (CD-ROM付) (Programmer’s SELECTION)
こういう次第でちょっと検討。
ロリポップでのWebDAVの設定方法はこちら http://lolipop.jp/manual/user/webdav/
JavaでWebDAVクライアント記事は以下
http://syo.cocolog-nifty.com/freely/2010/10/javawebdav-8cd5.html
http://syo.cocolog-nifty.com/freely/2010/10/jackrabbitssl-1.html
http://syo.cocolog-nifty.com/freely/2010/10/jackrabbitwebda.html
Javaの良い所は、やろうと思った事は大概誰かが先行してやっていて、あまつさえライブラリ化されサンプルも一杯あること。
…Jack Rabbitでけえー。jarが30MB.
http://www.apache.org/dyn/closer.cgi/jackrabbit/2.2.8/jackrabbit-standalone-2.2.8.jar
でももしや、エクスプローラ側でうまいこと設定すると、自作プログラム側からはファイルコピーな感じでうまく行ったりしないだろうか?FileのAPIだとダメでも、copy コマンド発行ならできそうな気がしないでもない。
→とりあえず上記のソースのコピペでそのまんまファイル名一覧取得はできた。あとは更新時刻取得と、PUTができれば。
http://wiki.apache.org/jackrabbit/WebDAV
この辺に何かあるだろう。
こういう次第でで脱Pythonを推進中。次はXML処理。
JavaでDOM使うとNodeの山になって、目が、目が…。で、「Javaで書くとこんなに長い処理がこのスクリプト言語で書くとこんなに簡潔に」のネタにされる訳だけど、このJDOMを使えばコレクションフレームワークに対応してるのもあって実に簡潔になる訳。これからはワンライナーもJavaか。
Document doc = new SAXBuilder().build(new File(inputFileName)); Element root = doc.getRootElement(); Namespace ns = root.getNamespace(); List<Element> janls = (List<Element>)root.getChildren("janl",ns); for(Element janl:janls){ String janlId = janl.getAttributeValue("id"); System.out.println("Janl"+janlId); List<Element> items = (List<Element>)janl.getChildren("item",ns); for(Element item:items){ String text=item.getAttributeValue("text"); String type = item.getAttributeValue("type"); System.out.println(" Item text="+text+" type="+type);
dom4jというものもあるそうだけど、先に出会ったこっちを使った。
まぁこれでPython製ツールは大体移植できそう。ついでだからマルチスレッド化するか。ExecutorServiceが登場してからというもの私でも簡単にマルチスレッドが扱えるようになった。