タグ:Java ( 6 ) タグの人気記事
Java7 Update51 にアップデートしたらJavaアプレットが動かなくなった
今まではJavaアプレットを使おうとすると、セキュリティ警告がでても実行するかどうか選べていました。
しかし、Java7 Update51 にしたら「ご使用のセキュリティ設定により、信頼出来ないアプリケーションの実行がブロックされています」と有無を言わさずに実行できなくなりました。
e0091163_4301811.jpg


どうやら、信頼された認証局が発行する署名がないと動作させない仕様にしてしまったようです。
確かにセキュリティ的観点からはそれでいいと思うんですが、サーバやネットワーク管理ツールで署名されていないJavaアプレットを使う時には非常に困ります。


対処法はJavaコントロールパネルから、動かしたいアプレットのサイトを例外登録することです。

具体的には コントロールパネル → Java → セキュリティ タブ → サイト・リストの編集 で、サイトのURLを登録すればいいようです。


参考:
Java7 Update51 署名のないJavaアプレット実行をブロック 対処方法 | saka-en
Java公式サイト:どうすれば例外サイト・リストを構成できますか。
[PR]
by jehoshaphat | 2014-01-22 04:31 | Java | Trackback | Comments(0)
Java,AdobeReader,FlashPlayerで更新通知を出さない方法
ターミナルサーバで、AdobeReaderやFlashPlayerを入れていると、一般ユーザがログインするたびに更新を促すメッセージが表示される場合があり、ユーザを困惑させかねない場合が少なく有りません。


ということで、AdobeReader,FlashPlayer関連で更新通知等の情報を表示させない方法です。

AdobeReaderの更新通知
管理者権限で、AdobeReaderを起動し、メニューバーの編集→環境設定→アップデータ→アップデートのダウンロードやインストールを自動的に行わない にチェックを付けます。
これは以下のレジストリでも設定できるようです。

HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Adobe ARM\1.0\ARM
"iCheck"の値
0: アップデータのダウンロードやインストールを自動的に行わない
1: (使用されていません)
2: アップデートを自動的にダウンロードするが、インストールするときは指定する
3: 自動的にアップデートをインストールする。


参考:
Adobe:アップデータの自動チェックを変更または無効にする方法

AdobeReaderの品質向上ダイアログ
AdobeReaderでまれに品質向上にご協力ください的なダイアログが出ることがあります。
これも管理者権限でAdobeReaderを起動し、メニューバーのヘルプ→製品向上プログラム で、「いいえ、必要ありません」を選べばOKです。

もしくは、管理者権限のコマンドプロプントで、以下のレジストリを追加するといいようです。

reg add HKLM\SOFTWARE\Policies\Adobe\APIP /v enabled /t reg_dword /d 00000000


参考:
Adobe: 製品向上プログラムのダイアログボックスを停止するには

AdobeReaderのEULA同意する
アップデート後AdobeReaderを起動すると、EULAの同意するかどうかを聞いてきます。
これも管理者権限で最初に同意してしまえば問題ないようです。


FlashPlayerの更新通知
Flashはログインするたびにダイアログウィンドウが出てくるので非常に邪魔くさいです。(特に11.2より前)
Flash Player 10.3以降であれば、コントロールパネルにFlashPlayer設定マネージャーがあるので、それの 高度な設定→アップデートの有無をチェックしない にしておけばいいようです。
Flash Player 10.3より前であれば、グローバル通知設定パネル から設定する必要あるようなので、http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager05.htmlで、リリース情報通知のチェックをのけてしまえばいいようです。

また、mms.cfgを使う方法もあります。
これについての詳細はAdobe Flash Playerをグループポリシーで自動展開したいを参照ください。

参考:
Adobe:設定マネージャー
Adobe:Flash Player による自動更新の通知を無効にする方法


Javaの更新通知
Javaもアップデートの情報をタスクトレイのバルーン表示で通知します。
これは、コントロールパネルの Javaコントロールパネル→アップデートタブ→アップデートを自動的にチェック をOFFにしてしまうといいようです。

参考:
Windows Vista(R)でJavaの最新バージョン更新通知を非表示にする方法


ただ、更新通知を解除する場合は管理者が責任をもって、新しいセキュリティパッチがでたら更新するべき必要がありますね。
[PR]
by Jehoshaphat | 2013-03-28 22:52 | 豆知識 | Trackback | Comments(0)
Javaランタイム(JRE)をグループポリシーで自動展開したい
Adobe FlashPlayerやReaderをグループポリシーで展開しようとすると、入手が面倒だったり、MSIとMSPがあったりと厄介でしたが、Javaはすんなり行きました。

手順は、Active Directory を使ってネットワーク経由で Java を配布する方法に書いてくれています。

全オペレーティングシステムの Java のダウンロード一覧からWindowsオフライン用インストールファイルをダウンロードし、実行します。
すると以下のテンポラリフォルダにMSIファイルが解凍されるのでそれを、グループポリシーの[ソフトウェア]インストールで設定するだけでOKでした。
・Windows Vista,7
C:\Users\ユーザー名\AppData\LocalLow\Sun\Java\jreバージョン名\jreバージョン名.msi
・Windows XP/2000
C:\Documents and Settings\ユーザー名\ApplicationData\Sun\Java\jreバージョン名\jreバージョン名.msi


参考:
Java のサイレント (無人) インストールの方法 バッチファイルで展開する場合はこのオプションが役立ちます。
[PR]
by Jehoshaphat | 2013-03-20 22:09 | 豆知識 | Trackback | Comments(0)
(Java)Java Web Startを使ってみた
Java Web Start ってのはブラウザから JAVA プログラムを起動する仕組みのことみたいです。
Javaプログラム本体もサーバから自動ダウンロードされ、最新版のチェックとかも勝手にやってくれるようですね。
旧来のファットクライアント方式は、配備が非常に面倒でしたが、それを解決できるリッチクライアントの一つとされているようです。
(ここら辺の歴史は、@IT:リッチクライアント”に至るまでの軌跡と現在(いま)がわかりやすいです。)
Java Web Start自体は JRE の中に含まれているので、クライアントは JRE さえ入っていれば問題ないようです。
ちょうど .Net の ClickOnce に近いものですね。。


さて、今回この Java Web Start のサーバ環境の構築をやってみました。
サーバは CentOS 5.3です。(RedHat系のディストリビューションの確認は /etc/redhat-release ファイルを見ればわかります)

■Sun製Javaのインストール
(Linux)Java Web Start補足1[Sun製Javaのインストール。]を参照してください。

■WEBサーバの設定
ここからが本題です。

Java Web Start(以下JWS)は JNLP というファイルから起動をかけるようです。
このため、Webサーバ(Apache)に JNLP の MIME タイプを登録します。
>
httpd.conf に下記を追加。
AddType application/x-java-jnlp-file JNLP


■JNLPファイルの作成
これが、起動する jar ファイルやクラス、ライブラリを指定するファイルですね。
実体は XML です。
JNLPの構文は、Sun:JNLP ファイルの構文でわかります。

今回は Sun のサンプルをベースに下記のように書いて見ました。
ファイル名は hello.jnlp
<?xml version="1.0" encoding="utf-8"?>
<jnlp
spec="6.0+"
codebase="http://xxx.xxx.com/jws/"
href="hello.jnlp">

<information>
<title>Java Web Start Sample</title>
<vendor>3流PG, Inc.</vendor>
<offline-allowed/>
<shortcut online="false">
<desktop/>
<menu submenu="Java Web Start Sample Apps"/>
</shortcut>
</information>
</information>-->
<security>
<all-permissions/>
<!--<j2ee-application-client-permissions/>-->
</security>
<resources>
<j2se version="1.6+" java-vm-args="-esa -Xnoclassgc"/>
<!-- 動かすJARへのパス -->
<jar href="jws_sample.jar"/>
<jar href="lib/libname.jar"/>
</resources>
<!-- public static void mainのあるクラス -->
<application-desc main-class="test"/>
</jnlp>

重要なのは、codebase でパス指定、security、jar href= で動かしたいJARやライブラリ用JAR指定、application-desc main-class= でメインメソッドのクラス指定くらいだと思います。


■JARの作成
Java アプリケーションを JAR で出力します。
今回は Swing アプリケーションで、ただ単にラベルを張り付けただけにしました。
IDE は Eclipse を使ったので、GUIデザイナツールとして、Visual Swing for Eclipseを使いました。(詳細は【コラム】イマドキのIDE事情 (60) Swing用Eclipseプラグインの決定版! Visual Swing for Eclipse | エンタープライズ | マイコミジャーナル)
で、実行可能なJARファイルとして出力します。(最初ただの JAR で出力してると Visual Swing for Eclipse のライブラリが含まれておらず、NoClassDefFoundError,ClassNotFoundException が発生したの凡ミス注意です)
e0091163_1321621.jpg




■JARに署名がいる
上記で作成したJARですが、デジタル署名が必要なようです。
デジタル署名していないと、下記のようなエラーとなります。
e0091163_13246100.jpg


ということで、テストのため自前のオレオレ証明書を作成します。(正規に運用するんだったら、認証局から発行された証明書使わないといけませんけどね。)
まず、証明書を作らないといけないので、JDK付属の keytool を使って作成します。(keytool の使い方は、Sun:keytool - 鍵と証明書の管理ツールJava/keytool - 備忘録参照)

C:\Program Files\Java\jdk1.6.0_16\bin<keytool -genkey -alias thirdPGtest
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
姓名を入力してください。
[Unknown]: 3流PG
組織単位名を入力してください。
[Unknown]: 3流PG
組織名を入力してください。
[Unknown]: 3流PG
都市名または地域名を入力してください。
[Unknown]: xxxx
州名または地方名を入力してください。
[Unknown]: xxxx
この単位に該当する 2 文字の国番号を入力してください。
[Unknown]: jp
CN=3流PG, OU=3流PG, O=3流PG, L=xxxx, ST=xxxx, C=jp でよろしいですか?
[no]: yes
<thirdPGtest> の鍵パスワードを入力してください。
(キーストアのパスワードと同じ場合は RETURN を押してください):

そして、作成した証明書を jarsigner を使って署名をします。(jarsigner の使い方は、Sun:jarsigner - JAR 署名および検証ツールJavaKey-03 JARファイルに署名をしてみよう。参照)

C:\Program Files\Java\jdk1.6.0_16\bin<jarsigner -keypass abcdpass -storepass abcdpass k:\jws_sample.jar thirdPGtest
警告:
署名者の証明書は 6 か月以内に期限切れになります。



■HTMLの作成
クライアントに JRE 入っていれば JNLP ファイルさえブラウザから叩けば動くんですが、JRE が入ってない場合はJREダウンページに誘導させたほうがいいみたいなことが Sun の開発者ページにあったんで、そのサンプルそのままんで、JNLP呼び出し用HTMLを作ります。
HTMLの内容は(Java)Java Web Start補足2[JNLP呼び出し用、JRE無に呼び出されるhtml]1を参照してください。

上記HTMLからJRE未インストール時に呼び出される download.html はこんな感じです。
HTMLの内容は(Java)Java Web Start補足2[JNLP呼び出し用、JRE無に呼び出されるhtml]2を参照してください。



■配備
これで、できた jnlp , 署名されたjar , html を WEBサーバにアップします。
後はブラウザでアクセスするだけ。
Javaのスプラッシュスクリーンが出た後、オレオレ証明書なので警告が出ます。
e0091163_1332280.jpg

"実行"を押下するとちゃんと動きました。
e0091163_133523.jpg

ただ、テストの時はブラウザのキャッシュをクリアしながらやったほうがいいですね。
特にJNLPファイルを変更してサーバにアップしたときはキャッシュクリアしないとハマります。
Javaのスプラッシュスクリーンがでて動かない時とかは、JNLP のパス関係設定を正しいか疑ったほうがいいようです。

また、ダウンロードされたJARアプリケーション自体も JRE によりキャッシュされてるっぽいので、下記コマンドでクリアできるようです。

C:\Program Files\Java\jdk1.6.0_16\bin<javaws -uninstall


■キャッシュの場所
上記でJARのキャッシュがクリアできることを書きましたが、実際にどこにキャッシュされているか調べてみました。
キャッシュ場所はJava Web Startのキャッシュファイルの行方 - cactusman日誌によると、コントロールパネル→Java→基本タブ→インターネット一時ファイルの設定から見れるようです。
e0091163_1342370.jpg

同じく、インターネット一時ファイルの表示ボタンからはキャッシュされているアプリの一覧を見ることができ、ここからGUI操作で実行したり削除したりできるようです。
e0091163_1344913.jpg

ただ、インターネット一時ファイルの設定からキャッシュフォルダの"変更"ボタンが押下できないんですよね。
Sun:システムおよびユーザレベルのプロパティによると、deployment.properties ファイルからキャッシュフォルダを定義できるようです。
(ユーザーレベルの deployment.properties ファイルは Vista 以降だと C:\Users\ユーザ名\AppData\LocalLow\Sun\Java\Deployment にあります)
試しに deployment.properties ファイルに下記設定を追加してみました。

deployment.user.cachedir=C\:\\c

すると、コンパネからJavaのGUI設定ツールから開いたときもインターネット一時ファイルの設定がちゃんと C:\c になっていました。


参考:
Sun:Java Web Start 1.5.0 開発者ガイド
デベロッパーズコーナー:Javaプログラミングを極める 第3回:Java Web Start
Java Web Start にさわる
[PR]
by jehoshaphat | 2010-01-09 22:01 | Java | Trackback | Comments(2)
(Java)Java Web Start補足2[JNLP呼び出し用、JRE無に呼び出されるhtml]


(Java)Java Web Startを使ってみたの補足資料です。

■JNLP呼び出し用HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 
<html>
<head>
<title>Java Web Start Sample</title>
</head>
 
<body>
 
<SCRIPT LANGUAGE="JavaScript">
var javawsInstalled = 0;
var javaws142Installed=0;
var javaws150Installed=0;
var javaws160Installed = 0;
isIE = "false";
if (navigator.mimeTypes && navigator.mimeTypes.length) {
x = navigator.mimeTypes['application/x-java-jnlp-file'];
if (x) {
javawsInstalled = 1;
javaws142Installed=1;
javaws150Installed=1;
javaws160Installed = 1;
}
}
else {
isIE = "true";
}
</SCRIPT>
 
<SCRIPT LANGUAGE="VBScript">
on error resume next
If isIE = "true" Then
If Not(IsObject(CreateObject("JavaWebStart.isInstalled"))) Then
javawsInstalled = 0
Else
javawsInstalled = 1
End If
If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.4.2.0"))) Then
javaws142Installed = 0
Else
javaws142Installed = 1
End If
If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.5.0.0"))) Then
javaws150Installed = 0
Else
javaws150Installed = 1
End If
If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.6.0.0"))) Then
javaws160Installed = 0
Else
javaws160Installed = 1
End If
End If
</SCRIPT>
 
 
<script language="JavaScript">
if (javaws160Installed || (navigator.userAgent.indexOf("Gecko") !=-1)) {
document.write("<a href=http://xxx.xxx.com/jws/hello.jnlp>Launch the application(Java Web Start テスト)</a>");
} else {
document.write("Click ");
document.write("<a href=http://java.sun.com/PluginBrowserCheck?pass=http://xxx.xxx.com/jws/download.html&fail=http://java.sun.com/javase/downloads/ea.jsp>here</a> ");
document.write("to download and install JRE 6.0 and the application.");
}
</SCRIPT>
 
</body>
</html>




■JRE未インストール時に呼び出される download.html

<HTML>
<BODY>
<OBJECT codebase="http://java.sun.com/update/1.6.0/jinstall-6-windows-i586.cab#Version=6,0,0,0"
classid="clsid:5852F5ED-8BF4-11D4-A245-0080C6F74284" height=0 width=0>

<PARAM name="app" value="http://xxx.xxx.com/jws/hello.jnlp">
<PARAM name="back" value="true">
<!-- Alternate HTML for browsers which cannot instantiate the object -->
<A href="http://java.sun.com/javase/downloads/ea.jsp">
Download Java Web Start</A>
</OBJECT>
</BODY>
</HTML>

[PR]
by jehoshaphat | 2010-01-09 21:05 | Java | Trackback | Comments(0)
(Linux)Java Web Start補足1[Sun製Javaのインストール。]
(Java)Java Web Startを使ってみたの補足資料です。

まず、CentOS の Java のバージョンを確認してみました。

# java -version
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-44)

1.4になってます。まぁ Java Web Start で Javaプログラムを配信するだけではサーバ側に Java はいらないようですが、気になったので、一応最新版にしてみました。

調べてみると、CentOS(RedHat)に元から入っている Java は GCJ(GNU Compiler for Java) という物のようです。
ここを見ると、yum でもこれ以上のバージョンアップはできないということで、Sun 純正のJDKを入れることにしました。

まず、Sun から最新版のJDKをダウンロードします。(*-rpm.binのほう)
ダウンしたファイルは jdk-6u17-linux-i586-rpm.bin なんですが、これのインストールは rpm -ih コマンドじゃなくて、実行権限与えて、直に実行してやればいいようです。

# ./jdk-6u17-linux-i586-rpm.bin

インストール終わったんですが、java -version しても /usr/bin/java はまだ 1.4 のほうを見てます。

さらに調査すると、CentOSでは update-alternatives によって複数のバージョン(または似たような機能)を持つプログラムを切り替えるよう管理されてるっぽいです。
update-alternatives の詳細はコマンドを便利に切り替える update-alternatives 使いこなし講座がわかりやすいです。

/usr/bin/java を1.6 のほうに切り替えるために、まず update-alternatives にさっきインストールした Sun の Java を登録します。

# alternatives --install /usr/bin/java java /usr/java/default/bin/java 30

そして、update-alternatives を使って 1.6 の方に切り替えます。

# update-alternatives --config java
2 プログラムがあり 'java' を提供します。

選択 コマンド
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java
2 /usr/java/default/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

これで2を選択すればOKです。

# java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)

[PR]
by jehoshaphat | 2010-01-09 20:03 | Linux | Trackback | Comments(0)