Macintosh Developer Online (MDOnline)


2001年11月29日発行号 - AppleのJava担当者インタビュー



JavaOneに来ています。ほんとにまじめな開発者会議ですので、他の媒体の人と話していたりするのですけど、記事が書きにくいという感じはありますね。ある意味ではキャッチーな新ネタがあるわけではありませんので、その意味ではJavaOne全体を取材というのはきついかもしれません。私はApple関連だけと決めてきたので、それはそれでなんとかまとめているというところです。Mac OS Xに絡むデスクトップの話のセッションもありますけど、全体で見ればごく一部です。もし、おもしろい話があれば、セッションのレポートよりもそのネタを元に記事を作ろうかと思います。たとえば、Java Web Start関連ってそれほど難しくはないみたいなので、改めて解説記事を作ろうかと考えています。
JavaOneのセッションは、50分と短いものが連続して行われるため、移動が多いという印象を持ってしまいました。それに、一度部屋をきれいに空けてから、次のセッションの受講者を入れるので、入れ代わりの時間はかなりごった返します。実はAppleのセッションは部屋に入ったらもう始まっていましたけど、もっとも、予定の時間より早く始めたみたいです。朝の基調講演はあまり人がはいっておらず、少し遅れて行ったのですけど、前から2列目に座れました。ジョン・ゲージ氏が司会をしながら、J-PhoneやKDDIの人がデモをして、後半はサンのCTOのグレッグ・パパドプラス氏の話でした。記事にはしませんでしたけど、基本的にはネットワークの進展が世界を変えて行くというようなメッセージだったのですが、おもしろい話もありました。インターネットの世界では、70年代はFTPとメール、80年代はDNS、90年代初頭のWeb、90年代後半のインスタントメッセンジャーといったムーブメントがあるとしました。そして、2000年代初頭ではストリーミング、2000年代中盤にはストレージがムーブメントになるとしました。なるほど、そうした予想があるから、Sunはネットワークストレージのようなソリューションを積極的に展開しているということが見えてきますね。今後のチャレンジは、中央に集約されたシステムと、分散システムのどちらかといった問題だと締めくくりましたけど、詳細は語られませんでした。
で、今、こんな時間までプレスルームが開いているのは助かります。プレスルームはほとんど人がいないので、Ethernetは使いたい放題です。インタビュー記事はホテルの部屋で執筆して、プレスルームに戻ってきて、配信しています。パビリオンだと大量にワイアレスのネットワークが立ち上がってますけど、会場には電波は飛んでいませんでした。
(新居雅行 msyk@mdonline.jp


AppleのJava担当者にインタビュー:日本語システムでの問題は認識している

2001年11月28日から開催されているJavaOneでのセッションに向けて、AppleのWorld Wide Relationsより何人かの担当者が来日しているが、DirectorのRichard Kerris氏と、Java Technology ManagerのAlan Samuel氏がインタビューに応じてくれた。Richard Kerris氏はUNIX/Java/Cocoa担当となっており、Alan Samuel氏はJavaOneでのセッションでプレゼンテーションも行っている。WWDCへ参加している人はお馴染みの顔かもしれない。

◇左がAlan Samuel氏、右がRichard Kerris氏
 

MDOnline新居雅行(以下、M):Mac OS XでJavaをサポートしたいちばん大きなメリットって何でしょうか?
Richard Kerris氏(以下、R):Javaだけでなく、CarbonやCocoaなどいろいろな開発の手法を用意したため、いろいろなタイプのデベロッパーを取り込むことができました。つまり、デベロッパーなら誰でもMac OS X向けの開発ができるような下地を提供できたと言うわけです。
M:Mac OS Xのデベロッパーの数は増えているのですか?
R:1年前にはまだなかった市場だけに今現在の数値はあまり意味はないでしょう。でも、数は毎月、急激に増えています。1年後は、Mac OS XでのCocoaやJavaのプログラマーはもっと増えているでしょうね。
M:Javaが開発者にとってメリットがあることは、今日のセッションでもお話がありましたけど、一般ユーザにとってもメリットがあることなんでしょうか?
Alan Samuel氏(以下、A):もちろんありますけど、一番のメリットは、Javaかどうかを気にしないで一般ユーザが使えるようになっている点がまず挙げられます。JavaのアプリケーションでもAquaですし、ダブルクリックで起動します。つまり、JavaでもMac OS Xの使いやすいというメリットが生きてくるわけです。また、Java Web Startのように、アプリケーションをサーバからダウンロードして実行するという仕組みが使えるのは、Javaの特徴だと言えますね。

――――ハードウエアアクセラレーションはオフだけど…
M:Javaという切り口ではCocoa-JavaとPure Javaがありますが、デベロッパはどちらのフレームワークを使うべきなのでしょうか。
A:それはデベロッパーのニーズ次第です。たとえば、クロスプラットフォーム対応を目指すならPure Java、一方Mac OS Xの機能をふんだんに使いたいとなるとCocoaということになりますね。
R:Cocoaは、新たに参入した開発者が新しいアプリケーションを作ろうとしたときでも、少人数のチームで開発することが可能ですね。RAD機能としても充実しているので、開発効率も高いのです。
M:今回のセッションでは、あまりCocoaは強調されませんでしたけど、やはりJavaOneというMacではないプラットフォームではない人たちに対してアピールする必要があるからですか?
A:もちろん、そうです。
M:WebObjectsはすべてがJavaで構築されていますが、同じようにCocoaのフレームワーク自体をJavaで書き直すことはしないのでしょうか?
R:ユーザの声を聞いて検討したいですね。強い要望があれば考えるというところでしょうか。
M:今日のセッションでは、Swingのハードウエアアクセラレーションをメリットとして強調されていましたけど、Mac OS X 10.1ではデフォルトではオフになっていますね。なぜですか?
A:実は、ハードウエアとソフトウエアを同じ1人のエンジニアが担当しているのです。それで、先にソフトの作業が進みそれがMac OS X 10.1に反映されたわけです。だから、ハードウエア側の開発ももちろんすすめていますが、Mac OS X 10.1のタイミングではデフォルトでオフにして出荷することに決めました。もちろん、デベロッパに対しては危険を承知で試してもらえるようにスイッチはつけておいたので、試していただいてかまいませんよ。
R:ハードウエアアクセラレーションの機能は、バグを直してアップデートするタイミングで、もとからオンになるようにするでしょう。きちんとテストをしてから提供するということです。
M:「プラグインのサポート」というのはどういうことを意味していますか?
A:これは、アプレットのプラグインです。Internet ExplorerではAPPLETタグでのアプレット利用には対応しましたけど、プラグインを利用したアプレットの実行に対応するということです。このとき、Java 1.3.1 Pluginに組み込まれているキャッシュなどの機能も組み込まれます。また、Netscape Navigatorでもプラグインを利用してのアプレット実行に対応します。もちろん、クライアントがWindowsでもMacintoshでも同じHTMLソースでアプレットが実行できるようになります。

――――日本語システム上での問題も解決する方向へ
M:SwingのアプリケーションをMac OS Xで実行すると、インプットメソッドが使われているときの問題がありますが、これは直るのでしょうか?
A:Mac OS X 10.1でかなり改善しましたし、この問題はしっかり認識しています。大丈夫です。(M注:話ぶりはもうすぐ直るという雰囲気だった)
M:Swingのコンポーネントの既定のフォント設定だと、日本語が文字化けし、メニューなどがきちんと表示されません。Windowsからやってきた人はびっくりしてしまいますけど、これはどうなんでしょうか?
A:そうした話は、ぜひともバグレポートとして寄せてください。
M:Java 2 Enterprise Editionの対応という点については?
R:調査中ということです。VMとしては対応していませんが、JBuilderのように、Java 2 EEベースのVMで稼働するようなプログラムを開発するツールも登場していますから、何もないわけではないですよ。
M:Java 2 Micro Editionの対応とは?
R:これはニーズがあるかどうかを調べているという程度ですね。動かすということについてはさして難しい話じゃないです。
M:もしかして、AppleがJava 2 MEベースのPDAを開発しているんじゃないかと思ってしまいます。
R:将来の製品については残念ながらお話はできません。
M:でも、iPodみたいなデバイスにJava 2 MEがのっかるとか考えれば、これは何かあるんじゃないかと思いますよね。
R:なかなかいい質問ですが、やはり答えられません。
M:来年はJava 1.4対応ということですが、もっと早く対応しろという声もあります。
A:Sun Microsystemsだって正式出荷は来年2月ですし、それはあくまで予定ですから。
M:Java 1.4は大きく変わるのでしょうか?
A:すでに、Sun Microsystemsから公表されているように、インプットメソッド関連の機能が増えるなど、機能的にも充実しますよ。
M:最後になりますが、MacでJavaということが、Mac以外のプラットフォームの人には理解してもらえない状況のような気がしますが?
R:それは、Macで使えるJavaということで、メリットは示すことができますよ。Javaという開発プラットフォームを開発者が利用でき、そうして作成した結果をMacのシンプルさで使いやすく利用できるということです。もちろん、こうしたメリットはこれからも強調していきますよ。

 

カテゴリ:Java, Cocoa, 業界動向


Mac OS XのJava 1.4対応は2002年5月にプレビューで8月に正式版(JavaOneレポート)

米国以外の国で初めてのJavaOneが2001年11月28〜30日の日程で、横浜で開催された。JavaOneは、Javaの開発者向けのセミナーを中心としたイベントである。米国で開催されるときには数万の参加者になり、開発者向けのイベントとしては最大級のものだ。96年から開催されているが、Javaがフォーカスするものは年とともに変化しているということも確かである。今現在は、Javaと言えばサーバソリューションと携帯電話である。基調講演でも、J-PhoneやKDDIの担当者が壇上に登場して、新しい携帯電話をアピールするなどが目立った。JavaOneのプラチナスポンサーの6社のうち半分が携帯電話会社であることが、趨勢を物語るだろう。その結果、Mac OS XなどのPC/デスクトップでの話題は全面には出ない結果とはなっているが、セミナーでも関連セッションも用意されており、Java2 Standard EditionベースのJavaも決してなくなったわけではない。

そのJavaOneでは、Mac OS Xに関するセッションも開催された。セッションの内容を示す前に、そこで示された新しい事実をまずはまとめておこう。まずは、Java VMの2002年のロードマップが示された。2002年1月には、Java Ver.1.3.1のアップデート1、5月にはVer.1.3.1アップデート2がリリースされる予定である。さらに、Java 1.4については2月にSunより正式版が公開される予定だが、2002年5月のWWDCではVer.1.4のプレリリース、8月にVer.1.4のGMがリリースされる予定となっている。
さらに、Mac OS XでのJavaの高速化技術についても説明があった。ポイントは、ハードウエアによるグラフィックスのアクセラレーションをSwingで利用できるようにしたことや、Swingのリソース利用をいくつかのアプリケーションで共有化するよな手法が組み込まれており、パフォーマンスの向上を図っているということである。

2001年11月29日にJavaOne内で開催されたセッション「Mac OS XにおけるJava技術:Java 2 Platform Standard Editionをめぐって」の内容は次のようなものであった。まず、Apple ComputerのAlan Samuel氏の話からセミナーは開始された。Mac OS Xの紹介として、UNIXのパワーと、Macのシンプルさを兼ね備えたとして、アピールした。強力なグラフィックス機能として、Quartz、OpenGL、QuickTimeそしてあらゆるフォントをサポートしていると紹介した。Unicodeサポートなどを日本語の文書で示した。そして、キラーアプリケーションを作成できる強力なフレームワークがあるとして、Java、BSD、Carbon、Cocoaの4つを示した(もはや、Classicは示されていない)。Cocoaについては、Objective-CとJavaでのプログラミングができることを紹介した。Javaは6年しか経過していないが、Mac OSの頃からサポートしている。そして、Mac OS Xは、Javaによるアプリケーション開発や利用のナンバーワンのデスクトップを目指す。現在の言語のマインドシェアは、VB, Cobol, C++, Javaの順になっているが、2005年ごろにはJavaは2番目になるだろうとした。そして、Java2 Platformを紹介して、MacがStandard Editionに対応することを示した。Mac OS XでのJava2 SEでは、SwingでAquaのルック&フィールを実現するとともに、Quartz 2Dを統合し、ダブルクリック可能なアプリケーションを作成可能である。また、スピーチやスペルチェック、QuickTimeといったコアのAPIを利用することができる。CocoaのSpelling ServiceをJavaBeansとして利用できることも紹介した。アプレットのサポートも、Internet Explorerで可能である。BorlandのVPによって、“…out-of-the box integration for the Java”と紹介もされている。
Mac OS X 10.1での新しい点としては、Appletタグによるアプレットのサポート、Aqua Swing Look & Feelの向上、Java Web StartやJSSEの統合、デバッグやプロファイリングの改良、パフォーマンスの向上、数多くのバグ修正となっている。
今後のロードマップが示されたが、それは最初に紹介した通りだ。さらにJava2 Pluginサポート、Java 3DやJava Advanced Imaging(JAI) APIについても検討している。さらに、Java2 ME, EEについても調査を行っている。

続いて、Steve Lewallen氏によりデモが行われた。最初に、FinderやDockなどのMac OS Xのルック&フィールを説明したが、これは、Macユーザではない人もいると思われるJavaOne向けの説明だろう。そして、UtilitiesフォルダにあるJava Web Startを紹介した。また、JBuilderを起動してAquaにルック&フィールを切り替えるなどのデモを行った。そして、JBuilderの使い勝手やNewsクライアントのアプリケーションをビルドするなどのデモを行った。Pure Javaのアプリケーションで、アプリケーションメニューで環境設定を利用するところも示された。ユーザインタフェースも、JBuilderのデザイナを使うところを示したが、ボタンをクリックすると、スピーチフレームワークを使って内容を読み上げることや、スペルチェッカ機能を組み込むことについてもデモ行われた。また、Swingの機能を使ってのドラッグ&ドロップが可能だが、ドラッグ中のオブジェクトが透明に表示されるといった機能が実現できていることも紹介された。そして、Java Web Startの機能を使い、Webページからワンクリックでアプリケーションが起動することが示された。

続いて、パフォーマンスの向上を行っていることについて解説が行われた。Shared Swingとして、アプリケーション間でのメディアデータの共有や起動時間の改良、そしてアクセラレートしたSwingといった方針が示された。シェアリングを行うことによって、2つのアプリケーションで使うメモリが30%減少するという結果が出ているという。そして、ハードウエアのアクセラレートを行っているSwingとしては業界初だとした。ハードウエアアクセラレーションにおり55%もの高速化が可能になったと紹介した。デモとしては、写真画像を回転させたり、切り替えたりといったアプリケーションを示した。
さらに開発環境についての解説が行われた。各種のツールや、WebObjects 5について紹介し、JBuilder 6が12月に出荷されることや、ADCメンバーはディスカウントされることも紹介した。また、CodeWarrior Pro7はJava 2をサポートし、RADツールを含むものがすでに出荷されている。Sunとは協力をしているとしてForte等の存在を示し、Install Anywhereについても紹介した。また、JBuilderと統合されたVM Gearなどのパフォーマンスツールについても紹介した。
最後に、Javaのさまざまな標準をサポートするとともに、Mac OS Xで享受できるメリットを並べて示し、Mac OS Xで開発し利用する理由を示した。Javaが最初から組み込まれていること、コアAPIを利用できる、Aquaに対応しハードウエア開く世良レートしたSwing、イエとの統合、マルチプロセッサに対応すること、VM共有の技術を理由として挙げた。

Appleによるセッションは以上の通りだが、JavaOneで開催されたさまざまなセッションは、やはりSun Microsystemsの担当者からのものが多く、Javaの技術面を紹介するものが中心となっている。もちろん、製品レベルでのメーカー担当者による紹介もあるのだが、やはりデスクトップでのJavaの盛り上がりが見られない中では、残念ながら多くの人を集めたセッションにはならなかった点は残念なところだ。Macintoshのプラットフォームでのデベロッパーに対しては、これまでさまざまな機会でJavaやMac OS Xをアピールしてきたが、JavaOneとなると、Macintosh環境とは関係のない開発者に対するアピールとなる。その意味では、Mac OS XのJavaというあまり知られていない世界を効果的に見せたセッションであったことは、今後につながるものとなるだろう。

カテゴリ:Java, イベント


Java Watch on the X》3 - 今度こそ「JavaからAppleScript」を実行する(2)

【MDOnline読者様限定コンテンツ】
AppleScriptのプログラムを実行するAppleScriptRunnerの解説を行うが、ポイントになるのはdoScriptだけになるだろう。AppleScriptうんぬんというよりも、Javaから外部のプロセスを動かす一般的な手法の解説が中心だ。

まず、ここではAppleScriptのプログラムを動かすために、osascriptコマンドの内容を知っておく必要がある。詳細はTerminalでman osascriptを実行して見てもらいたいが、まずはスクリプトプログラムを標準入力で受け取り、それを実行することができる。また、ファイルにあるプログラムの実行もできるようになっている。そして、出力結果についてのいくつかのスイッチがあるが、デフォルトで使うことにする。すると、Human Readableつまり人間が読みやすい形式となる。ただ、場合によってはある部分のスクリプトの実行結果を、別のスクリプトで使うのであれば、「-s s」というフラグをつけて実行するのもよいだろう。
たとえば、デフォルトの状態で実行したとき、Finderに対してselectionで選択項目を取り出すと、戻り値(result)は、フォルダ項目を選択していれば、

folder OS_Mail_Environment

のようになる。選択しているフォルダ名と、クラス名のfolderだけが表示されている。同じプログラムを「-s s」というスイッチをosascriptにつけて実行すると、以下のように、スクリプトプログラム中でそのまま使える形式で、Finderで選択されているフォルダへの参照形式の文字列が得られる。

{folder "OS_Mail_Environment" of folder "msyk" of folder "Users" of startup disk of application "Finder"}

また、「-s o」というスイッチだと、エラー出力と結果が同じく標準出力に出てくる。今回のプログラムはスクリプトのエラーを検知するために、エラーはエラー出力に出すデフォルトのままにしてある。

スクリプトを動かす部分の根幹のプログラム部分を抜き出しておこう。以下の通りだ。


public class AppleScriptRunner {

private static String osascript = "/usr/bin/osascript";
//スクリプトを実行するコマンドのへのパス
private static String errorMessage = null;
//スクリプトのエラーメッセージを保持する変数
private static boolean isPrintScript = false;

public static synchronized String doScript(String script) throws Exception {
errorMessage = null;

if(isPrintScript) { //スクリプトを標準出力に書き出す場合
System.out.println("========== Execute the following script:");
System.out.println(script);
System.out.println("==========");
}
StringBuffer resultStr = new StringBuffer(""); //実行結果を得るための文字列
StringBuffer errorStr = new StringBuffer(""); //実行エラーを得るための文字列
try {
Process doProcess = Runtime.getRuntime().exec(osascript);
//osascriptコマンドを実行する
InputStream errStd = doProcess.getErrorStream();
//標準入出力、エラー出力へのストリームを参照
InputStream inStd = doProcess.getInputStream();
OutputStream outStd = doProcess.getOutputStream();
outStd.write(script.getBytes());
//スクリプトプログラムを、出力し、osascriptの標準入力へ突っ込む
outStd.close(); //スクリプトが終了したことを標準出力に教える
byte buffer[] = new byte[1024]; //バッファを用意
int readLength; //バッファから読み取ったデータ長
while((readLength = inStd.read(buffer, 0 , 1024)) >= 0)
resultStr.append(new String(buffer, 0, readLength));
//osascriptの標準出力を取得
while((readLength = errStd.read(buffer, 0 , 1024)) >= 0)
errorStr.append(new String(buffer, 0, readLength));
//osascriptのエラー出力を取得
if(errorStr.length() > 0) //エラー出力から文字列の出力があれば、
// エラーであるとみなし、エラー文字列を保持
errorMessage = errorStr.toString();
}
catch(Exception e) {
//内部で起こった例外は、呼び出し元にそのままスルー
throw e;
}
return resultStr.toString(); //出力結果を文字列として戻す
}

(続く)

カテゴリ:開発情報, Java, AppleScript, Java Watch on the X


Java Watch on the X》3 - 今度こそ「JavaからAppleScript」を実行する(3)

【MDOnline読者様限定コンテンツ】
まず、外部プロセスとして動かすコマンドを変数osascriptに代入している。値は、"/usr/bin/osascript" となっているが、必要なら、ここにスイッチなどを記述してもかまわない。
そして、実際のプログラムは、java.lang.Runtimeクラスにあるexecを使う。execメソッドもさまざまなバリエーションがあるが、引数がたくさんあってそれぞれプログラムで指定する場合にはStringの配列を引数に与えるのも便利だろう。今回は、単にコマンドラインを引数に与えるシンプルなタイプのexecメソッドを使った。なお、RuntimeのインスタンスはJava VMが自前で用意してくれているのを使うので、それへの参照を得るには、クラスメソッドのgetRuntimeを使う。いずれにしても、この書き方はお決まり的な手法だ。

☆Runtimeクラスへのインスタンスを得る(Static)
 java.lang.Runtime RunTime.getRuntime();
 戻り値:Runtimeクラスのインスタンスへの参照

(以下、《》はそのクラスのインスタンスへの参照を指定することを意味する。)

☆引数に指定したコマンドなどをもとにしてプロセスを起動する
 java.lang.Process 《Runtime》.exec(String command);
 java.lang.Process 《Runtime》.exec(String[] cmdarray);
 java.lang.Process 《Runtime》.exec(String command, String[] envp);
 java.lang.Process 《Runtime》.exec(String[] cmdarray, String[] envp);
 java.lang.Process 《Runtime》.exec(String[] cmdarray, String[] envp, File dir);
 戻り値:起動したプロセスを参照するProcess
 引数:command:プロセスを起動するコマンドライン
    cmdarray:文字列の配列で要素を合成してコマンドラインを形成
    envp:起動するプロセスに与える環境変数
    dir:プロセスの作業ディレクトリを指定する
 例外:java.io.IOException:入出力でのエラー発生時

なお、execでのコマンドラインは、Terminalのコマンドラインとはまったく同一ではないことに注意しよう。たとえば、Terminalのコマンドラインだと、> によってリダイレクトさせることができるが、execの引数に > があると、それ自体を引数ないしはパラメータと認識してしまう。コマンドが思った通りに動かない場合には、そうした点もチェックが必要だ。
execで指定するコマンドの引数には、日本語をそのまま指定するのもアリのようだ。ただ、必ずしもOKかどうかは難しい。実例で示そう。まず、以下のプログラムは動く。もちろん、引数に指定したテキストファイルは存在しており、TextEditでそのファイルを開くかどうかで実行できたかどうかを判断した。(例外処理は省略)


Runtime.getRuntime().exec("open -e ~/日本語のファイル名.txt");

ところが、以下のプログラムはきちんと動かなかった。指定のファイルは開かずに、単にTextEditが起動しただけとなった。

String cmdarray[] = {"open", "-e", "~/日本語のファイル名.txt"};
Runtime.getRuntime().exec(cmdarray);

しかしながら、以下のプログラムは動く。いずれにしてもシェルによって展開される情報については要注意であることは確かである。

String cmdarray[] = {"open", "-e", "/Users/msyk/日本語のファイル名.txt"};
Runtime.getRuntime().exec(cmdarray);

execメソッドの戻り値はProcessクラスのオブジェクトへの参照となる。実際には、Processクラスを継承したクラスとなるのだが、プログラマにとって使えるのはjava.lang.Processクラスということになる。Process Viewerを起動した状態でデバッガでステップ動作をすれば分かるが、execメソッドにより、osascriptを実行するプロセスが起動するのが見えるだろう(もっとも、Terminalでtopメニューの方が手軽かもしれない)。つまり、Processのインスタンスは実際に実行しているプロセスと見ていいわけだ。
ここでは、AppleScriptRunnerクラスを実行しているプロセスがosascriptのプロセスを起動したことになる。これらのプロセス間での標準入出力やエラー出力を使った情報のやりとりは、以下のように、それぞれのストリームを得て行うことができる。ストリームの処理については、次回以降のJava Watch on the Xで紹介する。

☆プロセスからの標準出力を受け取るストリーム
 java.io.InputStream 《Process》.getInputStream();
 戻り値:標準出力からの出力を受け取るインプットストリーム

☆プロセスからのエラー出力を受け取るストリーム
 java.io.InputStream 《Process》.getErrorStream();
 戻り値:エラー出力からの出力を受け取るインプットストリーム

☆プロセスの標準入力で送出するストリーム(Static)
 java.io.OutputStream 《Process》.getOutputStream();
 戻り値:標準入力へ入力するアウトプットストリーム

以上のメソッドの名前が分かりにくいが、命名はプロセスを起動した側のプロセスを基準にしていると思えば良く、結果的には処理対象となるProcessクラスのインスタンスから見れば、入力と出力が逆になる。
ここでは、スクリプトのプログラムを、osascriptのプロセスの標準入力に送り込みたいので、getOutputStreamで得られたOutputStreamに対して、スクリプトプログラムのテキストを送りだせばよい。ちなみに、writeメソッドで書き出しを行い、closeメソッドでストリームの終了を指定する。writeメソッドの引数はbyte型配列でないといけないので、String型からgetBytesメソッドでbyte型配列に変換している。なお、closeメソッドを実行した後ただちにスクリプトの実行が行われて、スクリプトの処理が終われば、osascriptのプロセスは終了してしまう。その後に、標準出力やエラー出力からのデータを得ることも可能である。
InputStreamからの入力はreadメソッドを使うが、まずここでは得られたデータをbyte型配列に入れることにする。byte配列として1024バイトの領域を確保し、readメソッドで、この配列にいったん取り込む。readメソッドの戻り値は、取り込んだバイト数であるが、もう取り込むデータがないときには-1を戻すので、すべてのデータを取り込んで、StringBufferに溜め込むようにループを回している。AppleScriptの処理結果やエラーくらいだとたぶん1024バイトもbyte配列を用意しておけば、1回のreadメソッドで全て読み込むだろうけど、いちおうこのあたりはまじめにプログラムを作ってみた。
(続く)

カテゴリ:開発情報, Java, AppleScript, Java Watch on the X


KBase》Mac OS X Server 10.1でネットワークアダプタのエイリアス設定

Mac OS X Server 10.1で、1つのEthernetのアダプタに複数のIPアドレスを割り当てるエイリアスの方法が、Knowledge Baseで掲載された。/etc/IPAliasesというファイルに、設定を追加するとともに、/etc/hostconfigファイルについては「IPALIASES=-NO-」となるように修正が必要となっている。いずれも、手順が詳しく書いてある。なお、Mac OS X Server 10.0.xとはやり方が変化しているのであるが、よりシンプルな方法での設定が可能になったと言えるだろう。hostconfigにいては、10.0.xでのエイリアスの設定が残っている場合に元に戻すということである。
エイリアスによって、たとえば1つのEthernetポートに複数のIPアドレスを割り当てることができる。1台で複数のドメインのWebサーバを管理したり、あるいは、IPマスカレードを行なうなどの場合にこの設定の必要が出てくる。

関連リンク:Mac OS X Server 10.1: How to Set up Multiple IP Addresses on a Single Network Interface
カテゴリ:ネットワーク管理, ネットワーク, Mac OS X Server


KBase》Windows版のWebObjects 5を稼働するWebサーバを変更する手順

Knowledge Baseに、Windows版のWebObjects 5を使う場合に、Webサーバアプリケーションを差し換えたとときの処置について解説が掲載された。スクリプトフォルダの内容を、新たなWebサーバの対応するフォルダに移動するとか、WebObjects関連のファイルでの修正ポイントが示されている。C:\APPLE\Library\Frameworks\JavaWebObjects.framework\Resources\WebServerConfig.plistにあるDocumentRootやWOAdaptorURLのプロパティを設定しなおすことなどが、詳細に記載されている。

関連リンク:WebObjects 5 (Windows): How to Change the Web Server after Installation
カテゴリ:Knowledge Base(旧TIL), Windows, WebObjects