1. 자신의 hostname 을 확인해 봅니다.
초기에 설정을 안하고 기본값으로 설치 하신분들은 ubuntu로 되어 있을 겁니다.
windpyj@ubuntu:~$ hostname
ubuntu


2. /etc/hostname 파일을 열어보시면 다음과 같이 되어 있을 겁니다.
windpyj@ubuntu:~$ sudo vi /etc/hostname

ubuntu


3. 변경하고자 하는 hostname을 넣어주고 저장하시면 됩니다.

#ubuntu 기존것은 주석처리 하였습니다.

servermaster.pe.kr


4. servermaster.pe.kr 로 변경을 하였습니다.
다음 명령을 수행한 후 다시 로그인을 하면 변경된 것을 확인 할 수 있습니다.
windpyj@ubuntu:~$ sudo /bin/hostname -F /etc/hostname


5. 다시 로그인 하면 프롬프트에 다음과 같이 나옵니다.
windpyj@servermaster:~$

windpyj@servermaster:~$ hostname
servermaster.pe.kr
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

* BootStrap -> Extensions -> System ClassLoader -> Application 별 ClassLoader 순으로 Chain 생성 됨

* Application 을 Deploy 할 때 마다, 별도의 Class Loader 를 생성하며, Parent 를 System ClassLoader 로 지정한다.

* WebLogic 의 Application ClassLoader 는 3가지 종류 임 (EJB-JAR, WAR, EAR)

- EJB-JAR : 각 EJB Jar 파일 당 1개의 ClassLoader 생성함. 그래서 다른 JAR 파일의 클래스 Instance 는 참조 불가 함.

- WAR : 일반적으로, 보통의 ClassLoader 와 같이 우선순위를 갖으나, WEB-INF/classes 와 WEB-INF/lib 디렉토리의 클래스에 한하여, Parent ClassLoader 보다 WAR ClassLoader 가 우선순위를 갖도록 지정할 수 있다. PreferWebInfClasses 옵션을 true 로 설정하면 가능하다.

- EAR : EAR 로 배포 구조를 갖게되면, WAR ClassLoader 와 EJB-JAR ClassLoader 가 Delegation 관계를 갖으며 생성된다. 즉, EJB-JAR ClassLoader 를 통해 WAR ClassLoader 가 생성되어, WAR ClassLoader 가 EJB ClassLoader 의 Child 가 되므로, WAR 가 EJB 를 사용할 수 있게 되는것이다.
* ClassLoading 순서 : cache 점검 -> 없으면 부모에게 로드 위임 -> 부모 로드 못하면 자신이 로드
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

Java 2 에서 부터 (1.3)는, Delegation Model 을 사용한다.

1. Class 가 이미 로드되어있는지 체크
2. Parent 의 Class Loader 에게 Class Load 하도록 위임함
3. 2 과정을 반복하며 최상위 Class Loader 까지 간다
4. 더이상 부모 ClassLoader 가 없으면, BootStrapClassLoader() 에게 요청한다
5. BootStrap 부터 다시 차근히 내려오면서 Class 로딩을 한다.
6. 클래스가 로드 되면 해당 클래스를 리턴한다
7. 이상이 ClassLoader.loadClass() 메커니즘이고, 만약 parent 에서 못찾으면,
    자신의 findClass() method 를 call 해서 클래스를 찾는다

Custom ClassLoader 를 생성할 때, 생성자에 parent classloader 를 지정할 수 있게 되어있음
만약 지정하지 않으면, 기본적으로 getSystemClassLoader() 를 통해, SystemClassLoader 를
parent 로 지정함. 이 system class loader 는 현재 invoking thread 의 context class loader 로 설정된다

* BootStrap 클래스로더 : Java Runtime Library 에 있는 클래스를 로딩하는 역할을 맡고 있음. 클래스로더 체인의
가장 첫번째임. 기본적으로 rt.jar 에 있는 클래스를 Bootstrap ClassLoader 가 로드 한다.

* 하나의 JVM 에 여러 클래스로더가 각각 같은 Package.Class 를 Load 하면, 각각의 인스턴스가 따로 생긴다.
결국, Java 에서의 클래스 생성은 "패키지, 클래스, 클래스로더" 의 3가지의 조합으로 구분되는 것이다

* Java2 의 표준 Runtime Library (jre/lib/rt.jar) 는 공개/내부사용 클래스 로더들이 있다
  - java.net.URLClassLoader
   파일, HTTP, FTP 등을 사용하여 Class 를 Load 할 수 있는 ClassLoader 임

  import java.net.URL;
  import java.net.URLClassLoader;
  
  public class FileSystemTest {
  
   public static void main(String[] args) throws Exception {
   URL[] urls = { new java.io.File("/usr/classes").toURL(); }
  
   URLClassLoader ucl = new URLClassLoader(urls);
   
   Class kalss = ucl.loadClass("javacan.exam.HelloWorld");
   Object obj = klass.newInstance();
   // obj를 사용하여 적절한 것을 한다.
   }
  }

  - BootStrap 클래스로더
   엄밀히 말해 Java 클래스로더가 아니고, 네이티브 로더로, Object 와 같은 코어 자바클래스를 VM 에 로딩할때 사용된다. sun.boot.class.path 프로퍼티에 정의 된 값을 사용하여 자바 런타임 라이브러리를 찾는다. 만약 명시적으로 지정하지 않으면 <JDK>/jre/lib/rt.jar 로 부터 런타임 클래스들을 로딩한다.
  JDK 1.0 이나 1.1.X 대는 CLASSPATH 나 -classpath 에 런타임을 추가해줬어야 하지만, Java2 부터는 BootStrap 클래스로더가 런타임라이브러리를 자동으로 로드해주므로 지정 할 필요가 없다.

  - sun.misc.Launcher$ExtClassLoader
   자바의 확장클래스를 로드할 때 사용한다. ExtClassLoader 는 URLClassLoader 를 상속하며, java.ext.dirs 프로퍼티에 지정한 디렉토리에 위치한 .jar 들로 부터 클래스를 읽어온다. 명시하지 않으면 기본적으로 <JDK>/jre/lib/ext 디렉토리에 있는 .jar 들을 읽어서 클래스를 로드한다

  - sun.misc.Launcher$AppClassLoader
   시스템 또는 어플리케이션 클래스로더라고 불린다. java.class.path 프로퍼티에 명시된 경로에서 코드를 로딩하는 클래스로더이다. URLClassLoader 를 상속한다. CLASSPATH 에 있는 디렉토리나 .jar 파일들은 모두 URL 로 변환되어 AppClassLoader 에게 전달된다.

   ClassLoader.getSystemClassLoader() 를 호출하면 이 클래스가 리턴된다. 개발자가 작성한 대부분의 클래스는 이 클래스로더를 통해 로드된다. AppClassLoader 는 부모 ClassLoader 로 ExtClassLoader 를 지정하고 있으므로, ext 디렉토리에 있는 jar 파일로 부터 클래스들을 로드할 수 있다.

  - sun.applet.AppletClassLoader
  
브라우저가 Applet 의 바이트코드를 다운로드 하고, 그 애플릿을 실행하기 위한 클래스를 로드하는 Class Loader 이다. URLClassLoader 를 상속받고 있어서, HTTP 나 FTP 등을 통해 클래스를 로드 가능 한 것이다. 그러나 IE 나 각 브라우저 별로, 애플릿 클래스로더를 구현하고 있는 경우가 있어, 브라우져 별로 동작이 다를 수 있다.

  - java.security.SecureClassLoader
   JVM 에 바이트코드를 로딩하고 사용하는데에 관한 보안을 제어하는 추상클래스로, URLClassLoader 를 포함한 ClassLoader 가 상속받아서 사용하는 추상클래스이다.

  - java.rmi.server.RMIClassLoader
   ClassLoader 가 아니며, RMI 런타임에서 클래스의 로딩과 마샬링을 처리해주는 래퍼클래스이다. 실제로sun.rmi.serer.LoaderHandler 와의 간단한 브릿지 역할을 하는 클래스이다. 실제 클래스 로딩은 LoaderHandler 의 Inner 클래스가 담당하게 된다. 이때 이 inner 클래스들은 URLClassLoader 를 상속받아 구현되어 있다.

* Custom ClassLoader 는 findClass(String) 를 구현하여 자신만의 클래스 로딩에만 신경쓰면 되며, 나머지는 parent 로 올리면 된다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

보통은 저런 경우는 안생기지만, 하나의 WAS 에서, Context 가 다른 두개의 웹어플리케이션에서 각각 JNI 호출을 통해, 같은 DLL 을 사용하려는 경우 발생한 적이 있다.

이때는, 해당 JNI Java 라이브러리(.jar)나 클래스를 WAR Class Loader 가 아닌, System Class Loader 가 로드할 수 있게, System Class Path 에 두어 사용해야 한다.

웹로직의 경우, 해당 jar 를 Domain 밑의 lib 이나 server 의 lib 에 두고서 사용하면 된다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,


1. java 로 DLL 의 프로토타입 생성

package jnitest.loader;

public class JNILoader {
 public native void greet();
 
 /*
 static {
  System.loadLibrary("HardInfo");
 }
 */
 
 public void loadLibrary() {
  System.loadLibrary("HardInfo");
 }
}

2. javah -jni <위 1번의 class 이름> 해서, C 언어용 헤더파일 생성

3. 위 헤더파일을 CPP 에서 include 하고, JDK 의 include 디렉토리를 Include Path 로 잡아서
cpp 컴파일 진행

4, 만들어진 DLL 이나 so 를 적정 디렉토리에 위치함

5. -Djava.library.path=<dll 패스> 하여 추가하더나, PATH 에 해당 디렉토리 잡히거나, Windows 디렉토리에 넣는다

6. 위 1 예제의 객체를 생성하고, 위의 경우, loadLibrary() 호출하고 (아니면 아예 static{ } 블록에서 System.loadLibrary 사용) JNI 를 사용한다

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

웹로직 9.0 이상에서 가능

EAR 로 배포 되어야 한다.

/EAR_TEST/EarContent/META-INF/weblogic-application.xml 내에

<wls:session-descriptor>
    <wls:sharing-enabled>true</wls:sharing-enabled>
</wls:session-descriptor>

과 같이, 설정 되어야 한다.

WAR 가 EAR 바깥에 있는 경우는, Eclipse 의 플러그인으로 말고는 현재로서는 EAR 안쪽으로
.war 로 묶어 배포하는 것 밖에는 없다(윈도우 기준).

UNIX 에서는 심볼릭링크로 abc.war 라는 이름으로 디렉토리 링크 걸어서 가능하단다.(아직 테스트 못해봄)
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

Linux 용 nmon 은 SourceForge 에서 오픈소스로 공개되어 있음.

다운로드는 http://nmon.sourceforge.net/pmwiki.php?n=Site.CompilingNmon
에서 .c 소스와 makefile 다운 받으면 된다.

makefile 내에 보면, 플랫폼 별로 분기되는 것을 볼 수 있는데,
여기서 적당히 내 플랫폼에 맞는것 고른 후에
make <make 상에 있는 분기 라벨> 하면 된다.

ubuntu 에서는 libncurses5-dev 패키지를 다운받아야 ncurse 헤더 참조하여 컴파일 가능하다.


위 그림처럼 그래피컬한게 쫌 이뻐졌다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

사용자 계정추가.

1.사용자 계정명과 ID(식별번호)는 유일해야 합니다.

2.모든사용자는 하나의 그룹에 속해야 합니다.

 

위의 두가지를 확인하기 위해 /etc/passwd /etc/group 파일의 내용을 확인하셔서

중복되는 계정명과 ID는 없는지, 어느 그룹에 속할것인지를 결정하시면 됩니다.

 

말씀하신 100번이란 ID는 식별번호를 말하는것이고 계정명(user name)은..물론 숫자로도 가능하지만

일반적으로는 영문으로 만들죠.^^

 

예) 계정명 - user1, 식별번호 - 100

      소속그룹 - staff, 식별번호 - 10 -> 기본그룹 말고 추가하시겠다면[ #groupadd -g 100 '그룹명' ]이렇

                                                        게 추가 하시고 /etc/group 파일을 확인하시면 생성된 내용을 보실수

                                                        있습니다.

      홈디렉토리 - /export/home/user1 -> 계정의 홈디렉토리가 됩니다.

      사용 shell - /bin/csh -> 기본제공되는 sh,csh,ksh 중에 택일하시면 됩니다.

 

위와 같이 결정이 되셨다면,

#useradd -u 100 -g 10 -d /export/home/user1 -m -s /bin/csh user1

 

이렇게 하시면 됩니다.

 

*사용자계정및 사용자그룹의  ID(식별번호)중에서 0~99번까지는 시스템에서 특별계정용으로 예약이 되었습니다.

일반계정은 100번 이후부터 사용하시면 됩니다


반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

 

solaris도 많은 UNIX계열의 OS와 같이 터미널이나 콘솔창을 이용하여 작업한다.

(터미널을 열기위해서는 Xwindow에서 바탕화면에서 마우스 오른쪽 -> 도구 -> 터미널을 실행하면 된다.)

 

★ ifconfig

   => ifconfig는 주로 내가 사용하는 OS의 네트워크 주소를 알기 위해서 사용한다.

    (그냥 ifconfig라고 입력하게되면 ifconfig의 기본적인 사용법에 대해 나온다(옵션이 필요한 명령어)

 

     ● ifconfig <interface>

        =>현재 설정되어있는 interface(랜카드) 네트워크의 주소에 대한 설정값을 확인할 수있다.

      (ex)# ifconfig pcn0 (pcn0랜카드에 설정된 주소값을 보여준다)

           # ifconfig -a (모든 랜카드에 설정된 주소값을 보여준다.)

 

     ● ifconfig <interface> <plumb/unplumb>

       =>인터페이스 연결을 <연결함/비연결>을 설정한다.

       (ex)# ifconfig pcn0 unplumb (일단 기본적으로 연결되어있기 때문에 먼저 비연결을 설정해본다.)

            # ifconfig -a (연결이 해제되었는지 확인)

            # ifconfig pcn0 plumb (다시 연결해보자~)

            # ifconfig -a (다시 연결이 되어있는지 확인)

 

     ● ifconfig <interface> <ip address> netmask <netmask value> <up/down>

       => 인터페이스의 IP주소의 값을 변경시에 사용 (up은 활성화이고, down은 비활성화이지만

          대부분 down은 잘 사용하지 않는다.)

    (ex)# ifconfig pcn0 192.168.40.65 netmask 255.255.255.0 up (pcn0인 랜카드의 주소값을 변경하였다)

         # ifconfig -a (주소가 제대로 변경되었는지 확인)

 

   ※ ifconfig로 주소 변경시 하드가 아닌 메모리에 저장되므로 리부팅시 모든 변경사항이 다시 초기화된다.

       (변경전 설정사항으로 변경)

 

 

★ netstat

    => 각각의 프로토콜을 가진 활성화된 소켓의 리스트를 보여준다.

 

  netstat -a => 물리적인 인터페이스와 논리적인 인터페이스의 모든 소켓과 모든 라우팅테이블의 정보를 보여준다.

  netstat -g => 모든 인터페이스가 가진 멀티캐스트 그룹 구성원들을 보여준다.

  netstat -i => IP 경로가 사용하는 인터페이스의 정보를 보여준다.

  netstat -m => STREAMS 메모리 통계를 보여준다.

  netstat -n => 네트워크 주소를 숫자로 보여준다.(netstat는 기본적으로 상징적인 주소를 보여준다.)

  netstat -p => 미디어 테이블의 통신망을 보여준다.

  netstat -r => 라우팅 테이블을 보여준다.

  netstat -s => per-protocol 통계를 보여준다.

  netstat -v => 소켓과 STREAM 메모리 통계, 라우팅 테이블을 가진 추가적인 정보를 보여준다.

  netstat -I <interface> => 개별적인 인터페이스의 상태를 보여준다.

  netstat -M => 멀티캐스트 라우팅 테이블을 보여준다.

  netstat -P protocol => 적용되는 프로토콜의 모든 소켓과 통계를 제한적으로 보여준다.

  netstat -D => 인터페이스를 설정한 DHCP의 상태를 보여준다.

 

 (ex) # netstat -rn => 라우팅 테이블을 숫자로 보여준다.

       # netstat -an => 모든 소켓과 모든 라우팅 테이블의 정보를 숫자로 보여준다.

 

 

★ PING

   => 입력한 주소로 ICMP를 보내 연결이 되는지 확인한다.

   ▶ PING [옵션] <주소> (옵션이 없는 경우 간단하게 alive(연결됨) , no answer(응답없음)으로 표현

   ※ 여러 옵션이 있지만 그다지 사용하는 것은 없고, 리눅스를 사용하신 분들이라면

        -s 옵션을 이용해 리눅스에서 핑을 날리는 것과 같이 출력되는 것을 볼 수 있다.

 

  (ex) # ping -s 168.126.63.1 => KT DNS로 핑을 날린다.

          (실패시 네트워크 설정 확인해볼것. (가상머신 사용시에는 메인 OS의 방화벽이 존재하는지 확인해보자~!))

          (핑을 중간에 멈추지 않으면 무한대로 날리게 되니 "ctrl + c"를 눌러 멈추자)

 

★ DNS client 설정 파일

    => 웹페이지를 열기위해서는 도메인 이름 서비스를 제공하는 DNS 서버로 접속해야한다.

        솔라리스에서는 DNS로의 접속 설정을 환경설정 파일을 이용하여 접근이 가능하다.

 

     # vi /etc/resolv.conf => 아마도 막 설치를 하신분은 이 파일이 없을 가능성도 있으니, 새로만들자.

      nameserver 168.126.63.1  => KT DNS로 접근한다.

       (vi에디터를 처음 쓰시는 분들은 "i"버튼을 누르면 입력이 되고 모든 입력이 끝나면 "Esc"버튼을 누르고

        ":wq"(저장후 나감)입력하고 엔터를 눌러 빠져 나오자~!)

       ※ 읽기 전용 파일의 경우 ":wq"로 저장후 빠져나오지 못하므로 ":wq!"를 입력해 강제로 저장하구 빠져나오자

     # cat /etc/resolv.conf => 제대로 설정이 되었는지 확인하자.

     # vi /etc/nsswitch.conf => DNS를 사용하려면 이 환경설정파일을 변경해주어야 한다.


      이런 화면이 보여지는데 (이 화면은 vi를 실행하고, ":set nu"를 입력하면 위의 화면과 동일하게 나온다.)
      이 화면에서 12번째 줄에 있는 "hosts:    files""hosts:    files   dns"라고 입력한 다음
       저장하고 빠져나오자.(저장하는 방법은 위에서 잠깐 언급했다.)
 
 
★ 네트워크 관련 파일 확인하기
 
 # cat /etc/hosts => 아이피와 컴퓨터 이름이 저장 되어 있는 파일 (간이 네임서버 파일로 사용 가능)
 
 위의 그림과 같을 경우, ping이나 telnet등을 접속할 때 xp주소를 192.168.40.1이라고 직접 입력하지 않고 "xp"라고만 
 입력해도 192.168.40.1과 같은 주소로 인식한다.(이런식으로 자주 통신하는 주소를 별칭으로 만들어서 작업하면 편하다.)
 
 # cat /etc/defaultrouter => Default Gateway 주소가 저장되어 있는 파일
 # cat /etc/netmasks => Netmask 값이 저장되어 있는 파일
 # cat /etc/resolv.conf => 네임서버의 주소가 저장되어 잇는 파일
 # cat /etc/nsswitch.conf | grep hosts => 네임 서비스 사용 순서가 보인다.
   (여기서 "|"은 \버튼을 shift와 같이 누르면 나온다. 헷갈리지 말자~!)
 # cat /etc/hostname.pcn0 => 부팅시에 랜카드에 설정할 아이피를 가리키고 있는 호스트 네임이 저장된 파일
    ※hostname다음에 붙는 pcn0는 랜카드이므로 만약 다른 이름을 가진 랜카드를 사용한다면 hostname다음에
       현재 설치된 랜카드이름을 넣으면 된다.(대부분 pcn으로 잡힌다. vmwaretool설치시 vmxnet0로 잡힌다.)
 
==> 부팅시 /etc/hostname.pcn0 파일의 컴퓨터 이름을 /etc/hosts 파일에서 찾고 그 아이피를 랜카드에 할당한다.
 
 
★ 호스트 네임 변경 파일
  => 호스트 네임을 변경하기에 앞서서 자신의 호스트가 무엇인지 알아보고,
    아래의 파일들을 변경하여 네임을 변경하자~!
 
   # hostname => 현재 자신의 호스트 네임이 무엇인지 보여준다.
   # hostname <변경할 네임> => 현재 자신의 호스트 네임을 변경할 네임으로 바꾼다. (터미널을 다시 열어서 확인)
                                        단, 이방법은 재부팅시에는 다시 바뀌기 전의 이름으로 설정된다.
   # cat /etc/hosts => 위에서도 한번 언급되었지만, 부팅시 컴퓨터 이름을 이곳에서 찾는다.
  ◎다음 아래의 파일들을 살펴보면 다 같은 호스트 네임을 가지고 있는 것을 확인할 수 있다.
   # cat /etc/nodename
   # cat /etc/hostname.pcn0
   # cat /etc/net/ticlts/hosts
   # cat /etc/net/ticots/hosts
   # cat /etc/net/ticotsord/hosts
   => 호스트 네임을 변경하고자 한다면 일단 /etc/hosts에 호스트네임과 IP주소를 지정하고,
      아래 5개파일에서 호스트 네임을 변경하고자 하는 호스트 네임으로 변경해주면 된다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
이노무 Tomcat 은 JNDI 등록때문에 받는 스트레스가 심하다. 버전에 따라 JNDI 등록하는 방법이 다르기 때문인데
이번에는 Tomcat 5.5 를 기준으로 한다.

인터넷 검색 해보면 각양 각색으로 설명이 틀린데, 뭐 META-INF 에 context.xml 을 작성해라, server.xml 만 작성하면 된다는 등등.. 그런데 왜 난 잘 안되는걸까..

결론부터 말하자면, Tomcat 5.5 에선, server.xmlweb.xml 에 모두 설정을 해줘야 한다.

server.xml 설정

<GlobalNamingResources> ... </GlobalNamingResources> 내 이건, <Host> 내의 <Context>... </Context> 이건 관계 없이 아래와 같이 설정한다

[Derby]

<Resource description="Test database connection" name="jdbc/testDs"
 auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30"
 maxWait="10000" username="userid" password="password" driverClassName="org.apache.derby.jdbc.ClientDriver"
 url="jdbc:derby://localhost:1527/C:/MyDevTool/bin/db-derby-10.4.2.0/officedb" />

[MySQL]
<Resource description="Test database connection" name="testDs2"
 auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30"
 maxWait="10000" username="userid" password="password" driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://localhost:3306/my_db?autoReconnect=true" />

web.xml 설정

server.xml 만 설정해서 되는건 아니고, web.xml 도 설정 해줘야 하는데, 이놈때문에 좀 해멨다.
web.xml 의 가장 마지막 정도에 아래와 같이 정의해줘야 한다.

[Derby]

 <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/testDs</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

[MySQL]
 <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/testDs</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

이렇게 server.xml / web.xml 두가지를 해줘야 정상 작동 한다.

그리고, Tomcat 에서도, name 을, jdbc/testDs 로 하지 않고
testDs 로만 설정 해줘도 잘 동작 한다.


반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,