MD5Transform.java2011-09-17 09:04:25

OpenAMのJDBC認証時にMD5パスワードを扱いたかったので作ったもの.探がしかたが悪かったのか,適当なものが見つからなかった.ClearTextTransform以外もはじめから用意しててくれればいいのに.

package com.sun.identity.authentication.modules.jdbc;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
import com.sun.identity.authentication.spi.AuthLoginException;

public class MD5Transform implements JDBCPasswordSyntaxTransform {

	public MD5Transform() {
		
	}
	@Override
	public String transform(String input) throws AuthLoginException {
		System.out.println(input);
		String result = toMD5HexString(input);
		result = result.trim();
		System.out.println(result);
		return result;
	}
	
	private String toMD5HexString(String source) {
		StringBuilder sb = new StringBuilder();
		 MessageDigest md;
		try {
			md = MessageDigest.getInstance("MD5");

			  byte[] data = source.getBytes();
			  md.update(data);
			            
			  byte[] digest = md.digest();
			            
			  
			  for (int i = 0; i < digest.length; i++) {
				  String hex = Integer.toHexString((int) 0x00FF & digest[i]);
				     if (hex.length() == 1) 
				     {
				        sb.append("0");
				     }
			    sb.append(hex);
			  }
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}

	return sb.toString();
	}
}

log4j RollingFileAppenderについてのメモ2010-12-09 07:44:05

課題

Servletでのlog4j.appender.file.Fileでのパス指定の仕方がわからずPermission deniedが発生。フルパスは使いたくない。

対処法

log4j.appender.file.Fileでのパス指定に変数${catalina.home}を利用する。

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/servlet.log
log4j.appender.file.Append=true
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=10  
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %-5p %c - %m [%t] (%F:%L)%n

JNDI経由で取得したuserPasswordをStringに変換する2010-08-24 00:12:30

はまったのでメモ。JNDI経由で取得した「userPassword」値はbyte[]。Stringクラスで文字列に変換しとくと便利。

Object obj = Attribute.getAll().nextElement();
if (obj instanceof byte[]) {
 try {
  obj = new String((byte[]) obj, "US-ASCII");
 } catch (UnsupportedEncodingException e) {
  e.printStackTrace();
 }

DSpace1.6のインストールメモ32010-03-31 22:35:35

DSpaceのコンパイル&インストール

Antを使ってDSpaceをインストールする.

$ ant fresh_install

実験環境では次のようなエラーが表示された.

/usr/bin/build-classpath: error: Could not find xml-commons-apis
 Java extension for this JVM
/usr/bin/build-classpath: error: Some specified jars were not found
Buildfile: build.xml

BUILD FAILED
/home/dspace/dspace-1.6.0-src-release/dspace/target/
dspace-1.6.0-build.dir/build.xml:86: 
No supported regular expression matcher found

はまったのは「No supported regular expression matcher found」.

上記エラーを解決するために,必要なパッケージをインストールする.

# yum install xml-commons-apis
# yum install ant-apache-regexp

antに拡張パッケージがあるとは知らなかった.

Deploy

インストール先ディレクトリに移動し,Tomcatにウェブアプリケーションを配備する. アプリ配備後,Tomcatを起動する.

$ cd /usr/local/dspace/
$ ls
assetstore  config  exports        lib  reports  solr    webapps
bin         etc     handle-server  log  search   upload
$ su
# cp -rvf /usr/local/dspace/webapps/* /var/lib/tomcat5/webapps/
# /etc/init.d/tomcat5 start
Starting tomcat5:                                          [  OK  ]
#

管理者アカウントの設定

DSpaceの管理者アカウントの作成は「create-administrator」コマンドを使用する.

# /usr/local/dspace/bin/create-administrator
Creating an initial administrator account
E-mail address: root@localhost
First name: 
Last name:
WARNING: Password will appear on-screen.
Password: 
Again to confirm: 
Is the above data correct? (y or n): y
Administrator account created
#

DSpaceの起動

以下のURLにアクセスするとDSpaceのUIが表示される.

  • http://localhost:8080/jspui/
  • http://localhost:8080/xmlui/

あとは細かいチューニングか

Dspaceビルド中のエラー2010-03-30 00:17:58

CentOS5.4でDspaceをビルド中に次のエラーが表示された.

# ant fresh_install
/usr/bin/build-classpath: error: Could not find xml-commons-apis 
Java extension for this JVM
/usr/bin/build-classpath: error: Some specified jars were not found
Buildfile: build.xml

BUILD FAILED
/usr/local/src/dspace-1.6.0-src-release/dspace/
target/dspace-1.6.0-build.dir/build.xml:86:
 No supported regular expression matcher found

Total time: 0 seconds

" Could not find xml-commons-apis "と言われてるので,xml-commons-apisをインストールしよう.

# yum install xml-commons-apis

"No supported regular expression matcher found"はインストールされているantが正規表現機能に対応していない場合に発生する.オプションなので,ちゃんとインストールしよう.

# yum install ant-apache-regexp

OpenJDK JAVA_HOME2010-03-29 07:44:24

CentOS5.4+OpenJDKのJAVA_HOME設定について.

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk.x86_64
export CLASS_PATH=$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

JMF2009-09-22 08:33:16

Java Media Framework API (JMF)を使うとUSBカメラの映像を簡単に表示できる.

package jp.mhrz.practice.jmf;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.Vector;

import javax.media.CannotRealizeException;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoDataSourceException;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.format.VideoFormat;
import javax.media.protocol.DataSource;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class WebCamPractice01 extends JPanel {
	private static final long serialVersionUID = -5269451358599021121L;
	private static Player player;

	public WebCamPractice01() {
		setLayout(new BorderLayout());
		setSize(640,480);
		try {
			VideoFormat vf = new VideoFormat(VideoFormat.YUV);
			Vector dl = CaptureDeviceManager.getDeviceList(vf);
			MediaLocator ml= ((CaptureDeviceInfo) dl.firstElement()).getLocator();
			DataSource ds = Manager.createDataSource(ml);
			player = Manager.createRealizedPlayer(ds);
			player.start();
			Component comp;
			if ((comp = player.getVisualComponent()) != null) {
				add(comp, BorderLayout.CENTER);
			}
		} catch (NoDataSourceException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (NoPlayerException e) {
			e.printStackTrace();
		} catch (CannotRealizeException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		JFrame frm = new JFrame("WebCam");
		WebCamPractice01 view = new WebCamPractice01();
		frm.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
				player.close();
				player.deallocate();
			}
		});
		frm.setLayout(new BorderLayout());
		frm.add(view, BorderLayout.CENTER);
		frm.pack();
		frm.setVisible(true);
	}
}

たったのこれだけ.昔,Cでネットワークカメラの映像を表示させていたときとは大違いだ...やっぱり,Javaっは楽だ.久々に画像処理やりたくなってきた.