カテゴリ: java

オンライン開催だとザッピングができて便利だな。近々JavaにもグレーンスレッドもといOSのスレッドにマッピングされない仮想スレッドが追加されるというセッションを聞いた。
I/O待ちで全仮想スレッドを巻き込んで止まるとか(この事象を「PIN」と言うそうな)、使いどころは難しそうだけれど、多分賢い人達がAPサーバとかに組み込んでいい感じにしてくれることだろうから我ら凡夫はそれを待てば特に苦労せずスループットがあがるという訳よ。
その中で、さらりとJava19ではExecutorServiceインターフェースにAutoCloseableが付くというある意味グリーンスレッドよりも重要情報が。マジか。マジだった。まぁ自前でラッパー作って使う人多かったけど。


このエントリーをはてなブックマークに追加 mixiチェック

JDKをアップデートしているうちにいつの頃からか、JavaMailからの文字が文字化け、タイトルが空になる事象が発生した。まぁアフィサイトの更新情報なので別に困らないので放置していた。
最近、全く同じ更新処理を別のバッチから行ったらちゃんとタイトルが入り、文字が化けず、しかもThunderbirdで見ると本文のフォントまで違う。フォントなど指定していないにもかかわらず。
動いてメール送信しているのは全く同じ.classなので一体何が違うのか…。
環境変数が一番怪しいと思うのだけれど見た所差異が見つからない。何せ新バッチファイルは今までのバッチファイルをコピーしてちょっと処理を変えただけだからな。しかも変えた箇所はメールを送付する処理より後。
後はバッチを起動するタスクスケジューラの設定が何か違うのか…しかし元タスクをエクスポートしてインポートして作ったタスクだしな。

JavaMail API: Sending and Receiving Email with Java
Harold, Elliotte Rusty
O'Reilly Media
2013-08-13

このエントリーをはてなブックマークに追加 mixiチェック

Eclipseのコード補完って、こんな具合に
0330
インスタンスのメソッドをリストアップしてくれたりするわけだが、最近こうなったまま何分経っても計算が終らない。
0330b

再起動した直後は正しく動くがその後はまた再発する。
JDKを18にしたせいかな?と思って17.0.2に戻したが相変わらず。
試しに新規に同じバージョンのEclipseを別途インストールしてみたら発生しないので再インストールで解決すると思うのだけれど、何せプロジェクトが多いので、プレアデスだと全プロジェクトの文字コードをMS932にしたり、Ivyを再認識させたり結構面倒臭いのであまりやりたくない…けど週末にやらざるを得ないね。
→eclipse -cleanでも駄目なので再インストールしたら直った。


このエントリーをはてなブックマークに追加 mixiチェック

JDK 11あたりからマジでJDKから削除されたXML→JavaBeanへの変換ライブラリ、JAXB。
普通は標準添付されないなら別の実装をmavenあたりから持ってくるだけでまぁ済むんだけど、これが、パッケージ名の変更が入り、また更に誰得のジグゾーと絡んで結構苦労した記憶が。
ただし、良い事も1つあって、いつのまにか、読み込んだXMLが不正な場合のエラーメッセージが丁寧になっていて、どこが悪いのか一目でわかるようになっていてこれは素晴らしい。
javax.xml.bind.DataBindingException: javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 826; columnNumber: 40; The end-tag for element type "des" must end with a '>' delimiter.]
        at javax.xml.bind.JAXB.unmarshal(JAXB.java:211)
(略)
Caused by: javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 826; columnNumber: 40; The end-tag for element type "des" must end with a '>' delimiter.]
        at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:310)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:548)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:234)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:206)
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:261)
        at javax.xml.bind.JAX

このエントリーをはてなブックマークに追加 mixiチェック

 今度のペットネームは「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上でも需要はある(ソースは私)。

このエントリーをはてなブックマークに追加 mixiチェック

★本当は、e(fx)clipse を入れるのがベスト
プロジェクトかワークスペースJava CompilerのError/Warningのタブを開き、Forbidden reference(access rule)の設定が「Error」になっているので「Ignore」に変更する。しばしば忘れるのでここに記す。

それにしてもなぜ、JavaFXのクラスはforbiddenなんだろうな。jarを配置しているディレクトリがまずいのか。

このエントリーをはてなブックマークに追加 mixiチェック

 先日、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発目から固まっていたのだろう…。

RESTful Webサービス
RESTful Webサービス
posted with amazlet at 17.10.20
Leonard Richardson Sam Ruby
オライリー・ジャパン
売り上げランキング: 46,783

このエントリーをはてなブックマークに追加 mixiチェック

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)

マスタリングJavaEE5 (CD-ROM付) (Programmer’s SELECTION)

に頼る時が来たようだ。分厚いんだよなー。JPAJSF要らないから薄くならないかしら。でもこの本は何かと頼りになるので皆さんお勧め。

このエントリーをはてなブックマークに追加 mixiチェック

こういう次第でちょっと検討。
ロリポップでのWebDAVの設定方法はこちら http://lolipop.jp/manual/user/webdav/
JavaWebDAVクライアント記事は以下
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
この辺に何かあるだろう。

このエントリーをはてなブックマークに追加 mixiチェック

こういう次第でで脱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が登場してからというもの私でも簡単にマルチスレッドが扱えるようになった。

このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ