Archive for 12月, 2005

Creator2でJSF Fileuploadアプリケーション


さて本日は、Creator2 EAを使用したファイルアップロードWebアプリケーションを
作成します。
まず、今までと同様新規プロジェクトを作成し下記の画面を作成してください。

ここで”アップロード”ボタンを押下します。
すると、”button1_action()”メソッドを実装する画面が表示されますので
下記のコードを記述します。
下記はファイルサイズを取得し1M未満のファイルであれば、
Applicationサーバが動作するマシンの”c:\tmp”ディレクトリにファイルを出力する
コードです。
(ただし、下記はファイルアップデートサンプルを記述するために、
 かなり手抜きに書いています。例:日本語ファイル名のファイルをアップロードした
 場合、下記はサーバ側でファイル名が文字化けします。)
 下記で重要な点は、fileUpload1というインスタンス変数を使用し
 アップロードされたファイルの操作を行うということです。

public String button1_action() {
UploadedFile upFile = fileUpload1.getUploadedFile();
//ファイルサイズの取得(バイト)
long fileSize = upFile.getSize();
if(fileSize <= 1048576){ //1M以下ならOK
//オリジナルファイル名の取得
String origFileName = upFile.getOriginalName();
//バイト配列の取得
byte[] data = upFile.getBytes();
try{
//オリジナルファイル名で書き込み
FileOutputStream fout = new FileOutputStream("c:\\tmp\\" + origFileName);
fout.write(data);
fout.flush();
fout.close();
}catch(IOException ioe){
return "error"; //エラーページへ
}
}else{
return "sizeerror"; //エラーページへ
}
return null;
}

上記の他、UploadedFileクラスのインスタンスメソッドには
下記のようなメソッドがあります。例えばコンテントタイプを取得し型に応じた処理を
行う場合にはgetContentType()メソッドを使用します。
また、取得するデータはgetBytes()メソッドの他、InputStreamを利用して
取得することも可能です。

//コンテントタイプの取得
String contentType = upFile.getContentType();
if(contentType.equals(“text/plain”)){
String stringData = upFile.getAsString();
//文字列処理を記述
}
try{
//InputStreamの取得
InputStream inStream = upFile.getInputStream();
}catch(IOException ioe){
return “error”; //エラーページへ
}

如何でしょう?
ファイルアップロードのWebアプリケーションも非常に簡単に作成できることが
御理解いただけたかと思います。

広告

2005年12月14日 at 12:45 AM

Apache Derby DatabaseをJava Enterprise Systemへ

先日、弊社よりopen sourceのApache Derby Databaseを

Java Enterprise SystemやNetBeans5.0(次期Java統合開発環境)の

プラグインとして組み込まれることが正式に発表されました。

NetBeans5.0(Beta)ではメニューよりアップデートセンターへ問い合わせして

いただければ使用可能になります。(下記はNetBeans5.0 Beta2の画面の抜粋)














今まで、弊社のApplicationサーバやNetBeansではPointBaseという簡易DBが

付属で組み込まれていましたが、これに変わり今後Derbyも使用可能です。

そこで今後、開発案件の規模・システム要件に併せてOracle、PostgreSQLに加え

Apache Derbyも選択肢に入れていただき御使用いただければと思います。





Apache Derby Databaseの詳細http://db.apache.org/derby/




2005年12月13日 at 9:50 PM

LDAPコンテキストのディレクトリ配下全削除用コード


JNDI/LDAPによるエントリの削除は、ディレクトリを構成する

ノードの葉(一番最下層)から順に削除しなければなりません。

つまり、子ノードを持つエントリは直接削除することができないのです。

そこで、ノードの葉から順に再起的に削除する必要があるのですが、

下記は、指定したDN配下全てのエントリを再起的に削除するための

サンプルコードになります。。

赤線で示したコードが実際にLDAPサーバから削除するコードになります。


/**
* 指定したDN以下のノードを再起的に削除する。
*
* @param ctx ディレクトリコンテキスト
* @param dn 削除対象のルートノードのDN
*/
private void deleteAll (Context ctx,String dn) {
try {
NamingEnumeration list = ctx.listBindings(dn);
//現在のDNの配下にサブコンテキストが存在するか
while (list.hasMore()) {
Binding item = (Binding)list.next();
String className = item.getClassName();
String name = item.getName();
String subdn = name + “,” + dn;
Object o = item.getObject();
if (o instanceof javax.naming.Context){
Context subctx = (Context)o;
//さらにその下にサブコンテキストが存在するか
NamingEnumeration sublist = ctx.listBindings(subdn);
if(sublist.hasMore()){
//存在する場合、再起的呼び出し
deleteAll (ctx, subdn);
}else{
//存在しない場合、コンテキストを削除
ctx.destroySubcontext(subdn);
logger.info(“DN: ” + subdn + “is deleted from LDAP”);
}
}
}
ctx.destroySubcontext(dn);
logger.info(“DN: ” + dn + “is deleted from LDAP”);
}catch (NamingException ex) {
logger.error(“Failed to delete entry on LDAP”,ex);
}
}

2005年12月7日 at 12:59 AM

LDAP接続用コード

ちょいと、今日は覚え書きです。
弊社は、いろんなツールを提供しておりますが、
Directoryサーバも提供しております。
今回は、DirectoryサーバにJavaで接続するための手順を書きます。
LDAPへの接続用サンプルJavaコード(例外処理は除く)


下記のコードのように、LDAPへの接続にはホスト名・ポート番号を指定してください。

そして、dnはLDAPに接続し操作するユーザのDNとパスワードを指定します。

パラメータについては様々なパラメータが用意されているので別途 JavaDocを参照して
ください。

LDAPサーバに接続が完了した後、DirContextクラスのインスタンスdirconを使用して

LDAPの検索・登録・変更・削除処理等を行う。


host = “ldap_server.sun.com”;
port = “389”;
dn = “cn=Directory Manager”; //DIR操作が可能な接続ユーザ
password = “secret”; //パスワード
Properties env = new Properties();
env.put(DirContext.INITIAL_CONTEXT_FACTORY,
“com.sun.jndi.ldap.LdapCtxFactory”);
// LDAP URLの生成
env.put(DirContext.PROVIDER_URL, “ldap://” + host + “:” + port);
if (dn != null) { // バインドユーザとパスワードの設定
env.put(DirContext.SECURITY_PRINCIPAL, dn);
env.put(DirContext.SECURITY_CREDENTIALS,password);
}
//接続タイムアウトの設定(3秒)
env.put(“com.sun.jndi.ldap.connect.timeout”, “3000”);
// コネクションプールを有効化
env.put(“com.sun.jndi.ldap.connect.pool”, “true”);
//アイドル接続のコネクションを自動的に削除する設定5分
//本クラスでは明示的にclose()を呼び出していないため、
//5分間コネクションプーリングされる。
env.put(“com.sun.jndi.connect.pool.timeout”, “300000”);
//デバッグを全て
env.put(“com.sun.jndi.connect.pool.debug”, “all”);
// LDAPサーバへの接続&Directory Contextの作成
dircon = new InitialDirContext(env);
    ……..(何らかの処理の記述)
    dircon.close();

2005年12月7日 at 12:50 AM


Java Champion & Evangelist

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2005年12月
« 11月   1月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

カテゴリー

Twitter

clustermap

ブログ統計情報

  • 997,572 hits

Feeds