솔라리스(Solaris)10 에서 자바 6 패키지 기반(package-based)으로 설치

0

Written on 오전 6:07 by 강여사(J.Y.Kang)

솔라리스 10 u7 을 기본 설치하게되면 자바 5 버전이 번들로 설치되어 있다.

따라서 이 환경에다 자바 6 버전을 패키지 기반(package-based)으로 설치해보고자 한다.

우선 http://java.sun.com/ 의 download (http://java.sun.com/javase/downloads/index.jsp)에서 적절한 파일을 다운로드 받는다.

현재(2009.09.03) 자바 6 버전은 업데이트 16 며, 패키지 기반 설치를 위해서는 *tar.Z 을 다운로드 받는다.

관련 링크: (*tar.Z)

https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter

다운로드후 다음과 같이 처리

# chmod +x jdk-6-solaris-i586.tar.Z

# zcat jdk-6-solaris-i586.tar.Z | tar -xf -




압축이 풀리면 다음과 같이 패키지 추가
# pkgadd -d . SUNWj6rt SUNWj6dev SUNWj6cfg SUNWj6man SUNWj6dmo

팁. 기존에 6 버전이 설치되어 있다면 삭제방법
# pkgrm SUNWj6rt SUNWj6dev SUNWj6cfg SUNWj6man SUNWj6dmo






패키지 설치 후 심볼릭링크 걸기
# cd /usr
# rm java
# ln -s jdk/jdk1.6.0_16 java
# java -version



자바버전 확인
# java -version



Installation & System Requirement : Summary

0

Written on 오전 4:35 by 강여사(J.Y.Kang)

인스톨은 OS 별로..

Solaris OS Installation 의 경우는 2종류 (self-extracting installation 과 package-based installation)

Microsoft windows 의 경우는 self-extracting installation )

Linux 의 경우는 2종류 (self-extracting installation 과 RPM Package Manager (RPM) package-based installation)

시스템 요구사항..이게 중요한 데

음..표로 하렸더니 꽤 귀찮은 지라..걍 링크..

http://java.sun.com/javase/6/webnotes/install/system-configurations.html

시스템요구사항 문서에서 가장 중요한 거는 바로바로바로바로~~

안되는 건 안되는 거.
없는 것도 안되는 거.

음..심오해..

itanium 이 현재는 지원 된다는 거지(jdk6u7부터).. 하위버전도 꼼꼼히..체크 또 체크

JDK 6 - 09: Splash Screen : HelloSplash

1

Written on 오전 7:02 by 강여사(J.Y.Kang)

JDK 6 - 09: Splash Screen (스플래시 스크린) 사용하기 - 01: HelloSplash

JDK 6 버전의 new feature 중 하나입니다. 시리즈 별로 올라갈 텐데.. 언제 다 올라갈지는 오직 신만이 아신다는... ^^;;

스플래시 스크린은 간단히 말하면 넷빈 시작하면 중간에 퍼억~ 뜨는 그림 보셨을 겁니다. 그겁니다. ^^
간단히는 그림만 띠우는 수준부터 프로그래시브(상태바) 표시까지도 가능하지요. ^^

자바 프로그램을 완벽 로딩하기까지 멀뚱~히 있던 지루함을 달래주기엔 딱입니다. ㅋ

뭐 언제나 그러하듯이 저의 접근법은 넷빈을 최대한으로..(인즉은 '노가다를 최대로 줄여보자'..--;) 입니다.

그럼 시작하죠.
new project - java - java application
next



프로젝트 이름은 splash_test 로 줬습니다. (뭐 적당히 알아서 주시면 됩니다)
경로도 역시 적당히 알아서
finish



최종 결과 프로그램 화면이 GUI 이기 때문에 JFrame Form 을 이용해서 최종 프로그램 샘플을 만들겠습니다.
프로젝트에서 오른쪽 클릭 - new - JFrame Form



클래스 이름은 HelloSplash
패키지 이름은 test
finish



그럼 디자인 창이 나오는데 이 JFrame 에 제목을 넣고 싶으면 오른쪽 중간에 JFrame- Properties 에 보시면 title 이 있습니다.
거기에 적당히 넣으시면 됩니다.
저는 Splash Test 라고 줬습니다.



이제 디자인을 할 차례인데 뭐 간단히 라벨 작업만 할 예정입니다.
파레트에서 Label 를 선택하고 디자인창의 적당한 곳에 놓습니다.



그런 다음 적당한 문구를 넣고.. 저는 Did you see Splash Screen? :-) 이라고 줬습니다.
그런 다음 JFrame 사이즈를 적당히 줄여 그림과 같이 만들었습니다.
저게 나중에 최종 프로그램으로 뜰 모습입니다.



자 그럼 이제 스플래시를 동작시키기 위해 소스부분에 적절한 처리를 하겠습니다.
Source 탭을 눌러 아래 run() 메소드 아래에다 적절한 타이밍 작업을 합니다.

======================================================================

try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}

======================================================================


라고 줬습니다. 저 시간만큼 지연되겠군요. ^^

그런 다음 스플래시로 사용할 이미지를 프로젝트 폴더에 탐색기를 사용하여 넣습니다. (넣고난후 넷빈의 Files 탭을 눌러 확인해 보실 수도 있습니다.)

이때 그림의 경로가 문제인데, 그림을 넷빈에서 실행시키고자 할 때에는 프로젝트 바로 아래 두셔야 정상동작합니다. 그러나 이것만 하게되면 나중에 배포판(dist)를 만들경우 그림이 들어가질 않죠. 해서 src 폴더 아래에도 두시게 되면 배포판을 만들 경우 그림이 자동으로 들어갑니다. src 에 넣을 경우 그림은 default package 아래 놓이게 되겠죠.





그럼 이제 스플래시를 구동시킬 vm 옵션처리를 하겠습니다.
프로젝트에서 오른쪽 마우스 클릭 - properties 클릭



Run 카테고리에서 메인 클래스를 찾아 넣고(작업한 클래스: test.HelloSplash 가 되겠군요) browse 버튼을 누르면 팝업창이 뜨고 찾아 OK 하면 됩니다.



VM 옵션에 다음과 같이 적습니다.

-splash:splashtest_350W.gif

OK



그럼 이제 해당 파일을 실행(Run file)하겠습니다. (파일차원으로 실행하시거나 아니면 프로젝트 run 하셔도 됩니다)



아래 그림에 있는 DUKE 이미지가 바로 스플래시 스크린으로 지정한 이미지 파일입니다. 저게 한참을 보이다 최종 프로그램이 보여지면 자동 없어집니다.



아까 작성한 최종 GUI 프로그램입니다.



이게 스플래시의 베이직입니다.

수고하셨습니다. ^^

JDK 6 - 08: Scripting : MultiScopes

0

Written on 오전 4:46 by 강여사(J.Y.Kang)

스크립트 변수 예제에서, 스크립트 전역 변수로 어플리케이션 객체를 표현하는 방법을 봤었다. 스크립트를 위한 다중 전역 “영역”을 표현할 수 있다. 단일 영역은 javax.script,Bindings의 인스턴스다. 이 인터페이스는 java.util.Map에서 파생되었다. A scope a set of name-value pairs where name is any non-empty, non-null String. 다중 영역은 javax.script,SriptContext 인터페이스에 의해 지원된다. 디폴트로, 각 스크립트 엔진은 기본 스크립트 context를 가진다. 기본 스크립트 context는 소위 “ENGINE_SCOPE” 라고 불리는 적어도 하나의 영역을 가진다. 스크립트 context에 의해 지원되는 다양한 영역은 getScopes 메소드를 통해 사용가능하다.

=================================================================================
package test;

import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.SimpleScriptContext;

public class MultiScopes {

public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");

engine.put("x", "hello");
// print global variable "x"
engine.eval("println(x);");
// the above line prints "hello"

// Now, pass a different script context
ScriptContext newContext = new SimpleScriptContext();
Bindings engineScope = newContext.getBindings(ScriptContext.ENGINE_SCOPE);

// add new variable "x" to the new engineScope
engineScope.put("x", "world");

// execute the same script - but this time pass a different script context
engine.eval("println(x);", newContext);
// the above line prints "world"
}
}
=================================================================================

JDK 6 - 07: Scripting : RunnableImplObject

0

Written on 오전 4:33 by 강여사(J.Y.Kang)

만약 스크립팅 언어가 객제 기반이거나 객체 지향이라면, 스크립트 객체에 스크립트 메소드에 의한 자바 인터페이스를 구현할 수 있다. 인터페이스 메소드를 위한 전역 함수 호출을 회피할 수 있다. 스크립트 객체는 인터페이스 구현자에 의한 “상태” 를 저장할 수 있다.

====================================================================================
package test;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class RunnableImplObject {

public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");

// JavaScript code in a String
String script = "var obj = new Object(); obj.run = function() { println('run method called'); }";

// evaluate script
engine.eval(script);

// get script object on which we want to implement the interface with
Object obj = engine.get("obj");

Invocable inv = (Invocable) engine;

// get Runnable interface object from engine. This interface methods
// are implemented by script methods of object 'obj'
Runnable r = inv.getInterface(obj, Runnable.class);

// start a new thread that runs the script implemented
// runnable interface
Thread th = new Thread(r);
th.start();
}
}
====================================================================================

JDK 6 - 05: Scripting : InvokeScriptMethod

0

Written on 오전 2:46 by 강여사(J.Y.Kang)

만약 스크립팅 언어가 객체 기반(자바 스크립트와 같은) 혹은 객체 지향이라면, 스크립트 객체에 스크립트 메소드를 호출할 수 있다.

===================================================================================
package test;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class InvokeScriptMethod {

public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");

// JavaScript code in a String. This code defines a script object 'obj'
// with one method called 'hello'.
String script = "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }";
// evaluate script
engine.eval(script);

// javax.script.Invocable is an optional interface.
// Check whether your script engine implements or not!
// Note that the JavaScript engine implements Invocable interface.
Invocable inv = (Invocable) engine;

// get script object on which we want to call the method
Object obj = engine.get("obj");

// invoke the method named "hello" on the script object "obj"
inv.invokeMethod(obj, "hello", "Script Method !!");
}
}
===================================================================================

JDK 6 - 04: Scripting : InvokeScriptFunction

0

Written on 오전 2:38 by 강여사(J.Y.Kang)

스크립트 함수와 메소드 호출하기

때때로 특정 스크립트 함수를 반복하여 호출하고자 할 때가 있다 – 예를 들어, 스크립트로 구현된 어플리케이션 메뉴 기능 등등. 여러분의 메뉴 액션 이벤트 핸들러 안에, 특정 스크립트 함수를 호출하길 원할 경우, 다음 예제의 자바코드로부터 특정 스크립트 함수를 호출하는 방법으로 사용하면 된다.

===============================================================================
package test;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class InvokeScriptFunction {

public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");

// JavaScript code in a String
String script = "function hello(name) { print('Hello, ' + name); }";
// evaluate script
engine.eval(script);

// javax.script.Invocable is an optional interface.
// Check whether your script engine implements or not!
// Note that the JavaScript engine implements Invocable interface.
Invocable inv = (Invocable) engine;

// invoke the global function named "hello"
inv.invokeFunction("hello", "Scripting!!");
}
}
===============================================================================

JDK 6 - 03: Scripting : ScriptVars

0

Written on 오전 2:09 by 강여사(J.Y.Kang)

스크립트 변수(Script Variables)

여러분의 자바 어플리케이션에 스크립트 엔진과 스크립트를 embed 했을 때, 스크립트에 전역변수(global variables)로써 어플리케이션 객체를 원할 때가 있다. 이번 예제에서는 스크립트에 전역변수로써 어플리케이션 객체를 제시하는 방법에 대해 알아보자. 우선, 어플리케이션에 java.io.File 을 생성하고, 같은 이름의 “file”을 전역 변수로 처리할 수 있다. 스크립트는 변수(“file”)에 접근 가능하다 – 예를 들어, public 메소드 호출이 가능하다. 자바 객체, 메소드, 그리고 필드를 액세스하는 문법은 스크립트 언어에 의해 달라지는데, 자바스크립트는 대부분 “natural” 자바와 비슷한 문법을 가지고 있다.

==================================================================
package test;

import java.io.File;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class ScriptVars {

public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");

File f = new File("test.txt");
// expose File object as variable to script
engine.put("file", f);

// evaluate a script string. The script accesses "file"
// variable and calls method on it
engine.eval("print(file.getAbsolutePath())");
}
}
==================================================================

JDK 6 - 02: Scripting : EvalFile

0

Written on 오전 1:26 by 강여사(J.Y.Kang)

스크립트 파일(File) 사용(Evaluate)

이번 예제에서는, java.io.Reader로 입력 소스를 읽어오는(accept) eval 메소드를 호출한다. Reader에 의해 읽혀진 스크립트가 실행된다. 이 방법은 파일, URLs 그리고 readers 로써 입력 스트림 객체로 랩핑된 자원들로부터 스크립트를 실행 가능케 한다.

------------------------------------------------------------------------------------
package test;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class EvalFile {

public static void main(String[] args) throws Exception {
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
// evaluate JavaScript code from given file - specified by first argument
engine.eval(new java.io.FileReader(args[0]));
}
}

------------------------------------------------------------------------------------

파일이름 "test.js" 로 주어진 스크립트 소스는 다음 내용으로 작성:

println("This is hello from test.js");

터미널에서 실행

java EvalFile test.js

JDK 6 - 01: Scripting : EvalScript

0

Written on 오전 12:39 by 강여사(J.Y.Kang)

Examples - 01 : Hello World

ScriptEngineManager 인스턴스로 부터, getEngineByName 메소드를 사용, 자바 스크립트 엔진 인스턴스 요청. 스크립트 엔진에, eval 메소드는 자바스크립트 코드로 주어진 문장(문자열)을 수행하기 위해 호출된다. 예제엔 단순화하기 위해 Exception 핸들링은 하지 않았다. Javax.script API에 의해 컴파일 시/실행 시 오류 처리가 되며, 물론 원래 Exceptions은 적절히 핸들링되야 한다.
-----------------------------------------------------------------------------------
package test;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class EvalScript {

public static void main(String[] args) throws Exception {
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
// evaluate JavaScript code from String
engine.eval("print('Hello, World')");
}
}
-----------------------------------------------------------------------------------