달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2008. 1. 22. 14:23

제9회 한국 Java 개발자 컨퍼런스 그거/Seminar2008. 1. 22. 14:23

사용자 삽입 이미지

'그거 > Seminar' 카테고리의 다른 글

제 10회 한국 자바 개발자 컨퍼런스  (2) 2009.02.18
JSP & Servlet 교육 Day 5th.  (0) 2007.10.26
JSP & Servlet 교육 Day 4th.  (0) 2007.10.25
JSP & Servlet 교육 Day 3rd.  (0) 2007.10.24
JSP & Servlet 교육 Day 2nd.  (0) 2007.10.23
:
Posted by 뽀기
2007. 11. 5. 15:47

IDE & ATA & SCSI 그거/기타2007. 11. 5. 15:47

IDE
Integrated Drive Electronics 의 약자.
일반적인 메인보드에서 지원되는 하드디스크 / ODD(CD&DVD장치) 등등의
장치들의 인터페이스를 총칭.

ATA
Advanced Technology Attachment 의 약자.
CD-ROM 드라이브나 하드디스크 장치등을 IDE 인터페이스에 접속하기 위한 규격.

  o P-ATA : 하드와 CD-ROM의 규격 (E-IDE)
  o S-ATA : 최근 개발됨

P-ATA
Parallel - ATA
여러개의 케이블로 나란히 병렬로 데이터가 움직이는 방식.

  o ATA_100 : 최대전송률 100MB/s
  o ATA-133 : 최대전송률 133MB/s

병렬방식으로 Master/Slave 로 한케이블에 두개의 장치의 연결이 가능합니다.
IDE / E-IDE / ATA-100 / ATA-133 모두 같은 방식의 40Pin 케이블로 연결됩니다.


S-ATA
Serial - ATA
최근에 나온 ATA의 장치규격으로 하드디스크에 주로 이용.
직렬데이터 이동방식으로 기존 P-ATA보다 빠른 전송률을 나타냅니다.

  o S-ATA I  : 최대전송률 150MB/s
  o S-ATA II : 최대전송률 300MB/s
  o ATA-150

한케이블과 포트에 하나씩의 장치밖에 연결이 되지 않습니다.

S-ATA II 
최근 개발된 새로운 인터페이스.
하드디스크의 성능이 개선되고 발전된다면 빠른 전송률을 보여줄 인터페이스.

SCSI(스카시)
Small Computing System Interface 의 약자.
서버환경이나 워크스테이션등에 주로 이용되는 장치.

  o 빠른 RPM - 10,000rpm ~ 15,000rpm
  o 빠른전송률
  o 긴 수명
  o 안정적인 데이터 보존률
  o 낮은 시스템 점유율
  o 높은 가격
  o 컨트롤러 구입을 위한 부가 비용 발생


FROM : 네이버 지식인

'그거 > 기타' 카테고리의 다른 글

SW 기술자 신고제도라는게 있다는데.  (0) 2009.04.30
HP 이벤트 진행중~~  (0) 2008.07.02
AJAX 사이트  (0) 2007.10.26
15 Exercises for Learning a new Programming Language  (0) 2007.07.24
FUD(Fear, Uncertainty, Doubt)  (0) 2007.05.31
:
Posted by 뽀기
2007. 11. 5. 10:45

[JDK 1.4 VS JDK 1.5] Boolean.TRUE 와 true 그거/Tech2007. 11. 5. 10:45

public class BooleanTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Boolean bl = new Boolean(true);
 
  if( Boolean.TRUE == true ) {
   System.out.println("# " + Boolean.TRUE );
  } else {
   System.out.println("# " + true);
  }
 }
}



자자자...


1) 위 소스를 JDK 1.4 에서 컴파일 하면~~~~??
2) 위 소스를 JDK 1.5 에서 컴파일 하면~~~~??



<답>
1) Incompatible operand types Boolean and boolean
2) 아~~~~~~~무 이상 없이 잘 됨. ㅋ



<원인>
JDK 1.5 에서는 Autoboxing 기능이 추가됐다.
Object와 primitive type 간에 형변환이 자동이다~~~~


<뽀나스>
  List<Integer> list = new ArrayList<Integer>();
 
  list.add(0, 1);
  list.add(1, 2);
  list.add(2, new Integer(3));
 
  int j = 0;
  for(int i : list) {
   System.out.println("# " + (j++) + " : " +  (i + j));
  }
 }


위 소스를 JDK 1.5 에서 컴파일 하면~~?????

아~~~~~무 문제 없다. ㅋ
Generic을 이용해서 ArrayList에 Integer 만 넣도록 했지만 Autoboxing 기능에 의해
primitive type 인 int 를 넣어도 된다는거! ㅋ

'그거 > Tech' 카테고리의 다른 글

iBatis 따라하기 2 (중고차 정보)  (0) 2008.01.23
iBatis 예제 따라하기~!  (0) 2008.01.22
[Network] OSI 7 Layer  (0) 2007.10.31
Tomcat에서 JDBC driver 설정~!  (0) 2007.10.22
JavaScript를 이용해서 Class 작성하기  (0) 2007.10.16
:
Posted by 뽀기
2007. 10. 31. 11:37

[Network] OSI 7 Layer 그거/Tech2007. 10. 31. 11:37

두 시스템간의 복잡한 통신과정을 여러개의 프로토콜로 나누어 동시에 수행하도록 제안한 컴퓨터 통신 아키텍쳐이다. 프로토콜의 계층화는 상위 계층이 하위 계층의 서비스를 제공받는다는 원리에 근거하며, 계층별로 작업을 분산시킴은 물론, 각 계층이 독립적으로 구현될 수 있도록 해준다.

OSI Reference Model

Layer 7 Application
Layer 6 Presentation
Layer 5 Session
Layer 4 Transport
Layer 3 Network
Layer 2 Data Link
Layer 1 Physical
* OSI : Open System Interconnection

■ Physical Layer (물리 계층)
1과 0의 연속으로 이루어진 비트의 전송에 관여하며, 다음의 4가지 사항에 관한 규정을 다룬다.
□ 기계명세 (mechanical specification) : 통신 장비의 모양 및 치수를 정의
□ 전기적 특성 (electrical characteristic) : 비트 1은 -3V 이하의 전압을, 비트 0은 +3V 이상의 전압을 규정하는 것과 같은 전기적인 성질을 정의
□ 기능명세 (functional specification) : 접속 회로에 데이터, 제어, 타이밍, 접지 등의 의미를 부여
□ 절차명세 (procedural specification) : 기능명세에 근거하여 데이터 전송에 필요한 사건의 순서를 정의

X.21, RS-232C, RS-449/422-A/423-A 등이 물리계층 프로토콜의 예이다.

■ Data Link Layer
통신 경로상의 지점간 (link-to-link)의 오류없는 데이터 전송에 관한 프로토콜이다.
전송되는 비트의 열을 일정 크기 단위의 프레임으로 잘라 전송하고, 전송 도중 잡음으로 인한 오류 여부를 검사하며, 수신측 버퍼의 용량 및 양측의 속도 차이로 인한 데이터 손실이 발생하지 않도록 하는 흐름제어 등을 한다.

HDLC, CSMA/CD, ADCCP, LAP-B 등이 데이터 링크 계층 프로토콜의 예이다.

■ Network Layer
패킷이 송신측으로부터 수신측에 이르기까지의 경로를 설정해주는 기능과 너무 많은 패킷이 한쪽 노드에 집중되는 병목 현상을 방지하기 위한 밀집제어 (Congest control) 기능을 수행한다. 또한 이질적인 네트워크를 연결하는 데서 발생하는 프레임의 크기나 주소 지정방식이 다른 데서 발생하는 문제를 극복해 주는 기능을 수행한다.

IP, X.25 등이 네트워크 계층 프로토콜의 예이다.

■ Transport Layer
수신측에 전달되는 데이터에 오류가 없고 데이터의 순서가 수신측에 그대로 보존되도록 보장하는 연결 서비스 (Connection oriented service) 의 역할을 하는 종단간 (end-to-end) 서비스 계층이다. 한편, 패킷의 순서에 무관하게 수신되며, 에러 처리도 하지 않는 비연결 서비스 (Connectionless service) 와 다중 목적지에 메시지를 전송하는 서비스도 있다.

TCP 와 UDP 는 각각 연결지향 및 비연결지향 트랜스포트 프로토콜의 예이다.

■ Session Layer
두 응용프로그램 (Applications) 간의 연결설정, 이용 및 연결해제 등 대화를 유지하기 위한 구조를 제공한다. 또한 분실 데이터의 복원을 위한 동기화 지점 (sync poing) 을 두어 상위 계층의 오류로 인한 데이터 손실을 회복할 수 있도록 한다.

LU6.2는 잘 알려진 세션 계층 프로토콜이다.

■ Presentation Layer
전송되는 정보의 구문 (syntax) 및 의미 (semantics)에 관여하는 계층으로, 부호화 (encoding), 데이터 압축 (compression), 암호화 (cryptography) 등 3가지 주요 동작을 수행한다.

ANSI.1, XDR 등이 프로토콜의 예이다.

■ Application Layer
네트워크 이용자의 상위 레벨 영역으로, 화면배치, escape sequence 등을 정의하는 네트워크 가상 터미널 (network virtual terminal), 파일전송, 전자우편, 디렉토리 서비스 등 하나의 유용한 작업을 할 수 있도록 한다.

FTAM, TELNET, FTP, SMTP 등이 응용계층 프로토콜의 예이다.

OSI 모델에서의 데이터 전송

사용자 삽입 이미지


송신 측의 프로세스는 전송 데이터를 애플리케이션 계층에 보내고 애플리케이션 계층에서는 여기에 헤더 (null 이 될 수 있다)를 맨 앞에 첨가하여 다시 프레젠테이션 계층에 전달한다. 이때 프레젠테이션 계층에서는 애플리케이션 계층으로부터 보내진 데이터의 어떤 부분이 헤더이고 어떤 부분이 데이터 인지를 알 필요가 없다.

데이터가 물리계층에 도달할 때까지 이러한 과정이 되풀이 되며, 물리계층에서 실제로 수신장치에 데이터가 전송된다. 수신측에서는 전송 데이터가 맨 위의 수신 프로세스에 도달 될 때까지 여러가지 헤더 정보가 하나씩 벗겨져 나가는 과정을 거치게 된다.


다음의 예는 미국에 있는 친구에게 편지 보내는 일을 OSI 7 Layer를 적용시켜서 설명한 것이다. 미국에 있는 친구는 불행하게도 한국어를 모르며, 편지를 보내는 나 또한 영어를 모른다(이 예제는 대학교 시험에 나왔던 문제이기도 하다).

Sending

Receiving

 

Application Layer (Layer 7)

편지를 쓰는 것을 의미한다. 본인이 편지를 읽는다.

Presentation Layer (Layer 6)

한글로 작성한 편지를 미국 친구가 알아 볼 수 있게 영어로 변역하는 작업이다. 편지를 보내는 과정에서 이미 작업을 하였을 경우에는 이과정은 필요가 없다. 만약에 작업을 하지 않았을 경우에는 한국어로 된 편지를 영어로 번역하는 작업을 해야 한다.

Session Layer (Layer 5)

미국 친구의 집 주소를 적는 일이다. 우체부에 의해서 배달되는 작업을 의미한다.

Transport Layer (Layer 4)

우체국에 편지를 접수시키기 위한 절차, 즉 배 또는 비행기 등의 운송수단을 결정하는 등의 일이다. 각 우체국에서 주소에 따라 분류하는 작업을 의미한다.

Network Layer (Layer 3)

우체국에 있는 여러 편지들을 같은 목적지별로 분류하는 작업이다. 해당 주소지에 따라 각각의 편지를 각 우체국으로 분류하는 작업을 의미한다.

Data Link Layer (Layer 2)

해당되는 목적지와 운송 방법에 따라 분류하며, 해당되는 목적지와 직접 연결이 되지 않는 경우 중간 경 유지를 선택하여 분류하는 작업이다. 중간 경유지를 거친 운송물과 그렇지 않은 운송물을 분류한다.

Physical Layer (Layer 1)

실제적으로 편지가 배, 비행기, 자동차 등의 운송순단에 의하여 운송되는 것을 의미한다. 실제적으로 편지가 배, 비행기, 자동차 등의 운송순단에 의하여 운송되는 것을 의미한다.

사용자 삽입 이미지


OSI 모델 계층 구조

OSI 계층

정의

기능

Application Layer

사용자가 OSI 환경을 억세스 할 수 있는 능력을 제공

응용 프로세스간의 정보교환

Presentation Layer

데이터 표현에 차이가 있는 응용 프로세스들에게 연결 제공

정보의 형식설정과 코드변환

Session Layer

응용간 통신에 대한 제어구조를 제공

응용 프로세스간의 송신권 및 동기제어

Transport Layer

노드 대 노드 간의 신뢰성있고 투명한 데이터 전송 제공

송수신 시스템간의 논리적인 접속과 균일한 서비스 제공

Network Layer

상위 계층에게 시스템을 연결하는데 필요한 데이터 전송과 교환 기능 제공

정보교환과 중계기능

Data link Layer

물리적인 링크를 통하여 신뢰성 있는 정보를 전송하는 기능 제공

인접장치간의 정보전송

Physical Layer

구조화되지 않는 비트스트림을 물리적 매체를 통하여 전송

전송매체로의 전기적 신호전송


 




















출처 : 네이버
:
Posted by 뽀기
2007. 10. 26. 15:26

AJAX 사이트 그거/기타2007. 10. 26. 15:26

케이(lee256)님께서 추천      http://wwwm.meebo.com/index-ko.html
재미이써(vnfldp1)님께서 추천     http://www.flickr.com
세상살이(simsking)님께서 추천     http://www.dhtmlgoodies.com/index.html
bj1603님께서 추천       http://cgv.co.kr(그런데 여긴....ajax가 아니라 플레쉬로 되어있는거 같은데요..제가 잘못봤나?)
맥(mac00sd)님께서추천      http://www.tattertools.com/ko/
우리나라(bluedew1)님께서추천     http://ajax.asp.net
펜리르(baldr46)님께서추천      http://www.challenger.se/
승햐(seunghaa02)님께서 추천     http://www.panic.com/goods/(저희사이트에서 저도 처음봤었던...사이트네요..^^)
shsdol님께서 추천       http://www.modernmethod.com/sajax
huni1067님께서 추천       http://www.pageflakes.com
수보이(sidney77)님께서 추천     http://earth.google.com/(젤 유명한곳이죠..ㅋㅋ)
hackingstar님께서 추천      http://www.backbase.com/demos/explorer/#examples/fx-move.xml[55]
hpycom님께서 추천       http://www.asp.net(유명한 사이트죠....밑에 사이트랑 링크만 틀림)
devzzaang님께서 추천      http://ajax.asp.net
tigastyle님께서 추천       http://www.ohpy.com
연남남(yjheum)님께서 추천      http://jquery.com/demo/thickbox/
머리통(head1ton) 님께서 추천     http://extjs.com/
아서(dlwnsrjs6421) 님께서 추천     http://www.fxug.co.kr/live/index.html
wannapure 님께서 추천      http://kr.sun.com/developers/ajax/
러뱀씨(luvmc4u) 님께서 추천     http://www.gucci.com/
수연사랑(artes),사삭(ziniboy) 님께서 추천   http://www.wzd.com/
newport1179 님께서 추천      http://cafe.naver.com/ajaxdev.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=29(다른카페네요..ㅋㅋ 이쪽도 좋은글이 많네요...^^)
freehyun 님께서 추천       http://www.likejazz.com/29692.html
써니(pretty9967) 님께서 추천     http://www.challenger.se/
무지개(mindware) 님께서 추천     http://mochikit.com/
오비완(tow5532)  님께서 추천     http://javacan.madvirus.net/
독고릴라(angelos1127) 님께서 추천    http://www.netvibes.com/
장훈(whoney) 님께서 추천      http://meebo.com
학부모씨(ybnakira) 님께서 추천     http://www.cnn.com
애플(apple9575) 님께서 추천     http://dnshop.daum.net/
디지맥(ghochujang) 님께서 추천     http://www.watercafe.co.kr
홍세진(passion_25),뷁쉃(bumpkinr) 님께서 추천  http://www.ajaxian.org
앙마닷(zupper) 님께서 추천      http://www.hotscripts.com/
조조할인(updols) 님께서 추천     http://kr.sun.com/developers/ajax/
잠수부(csi_stone) 님께서 추천     http:www.goby.pe.kr
노력가(sevenwind) 님께서 추천     http://www.dhtmlgoodies.com
제제(monjeje) 님께서 추천      http://www.ajaxrain.com
데이지(minhyades) 님께서 추천     http://blog.naver.com/jinoxst/140021707807
떵려니(head1ton) 님께서 추천     http://Extjs.com

# FROM 네이버 카페(aspajax)

'그거 > 기타' 카테고리의 다른 글

HP 이벤트 진행중~~  (0) 2008.07.02
IDE & ATA & SCSI  (0) 2007.11.05
15 Exercises for Learning a new Programming Language  (0) 2007.07.24
FUD(Fear, Uncertainty, Doubt)  (0) 2007.05.31
당신의 블로그는 얼마짜리 입니까?  (0) 2007.05.03
:
Posted by 뽀기
2007. 10. 26. 11:30

JSP & Servlet 교육 Day 5th. 그거/Seminar2007. 10. 26. 11:30

장소 : 썬 교육센터
날짜 : 10.22 ~ 10.26
시간 : 09:30 ~ 17:30
내용 : Web Component Developement with Servlet and JSP Technologies


# Day 5

Session Bean 과 Entity Bean(BMP)을 이용해서 게시판 작성

DTO (Data Transfer Object)
  - BoardData.java
    Board Table의 각 column에 대응하는 변수에 대한 getter/setter 정의

Entity Bean(BMP)
  - Board.java
    실제 client(jsp)가 호출할 method들 정의
  - BoardBean.java
    Board Table의 한 row에 대한 CRUD 로직 정의
  - BoardHome.java
    Board 객체 생성을 위한 method 정의

Session Bean
  - BoardManager.java
    client(jsp)가 호출하여 사용할 BoardData 객체를 사용하는 method 정의
  - BoardManagerBean.java
    BoardData 객체를 사용하여 Board Table에 CURD 하는 로직 정의
  - BoardManagerHome.java
    BoardManager 객체 생성을 위한 method 정의

Client(JSP)
  - delete.jsp
    BoardManager.isWriter(int, String), BoardManager.deleteBoardData(int) 사용
  - deleteform.jsp
    삭제위한 비밀번호 입력
  - list.jsp
    BoardManager.getBoardDataList(int) 사용하여 BoardData 객체의 Collection 얻어와서 화면에 Display
  - read.jsp
    BoardManager.updateReadCount(int), BoardManager.getBoardData(int) 사용
  - update.jsp
    BoardManager.isWriter(int, String), BoardManager.updateBoardData(int) 사용
  - updateform.jsp
    BoardManager.getBoardData(int) 사용하여 화면에 정보 보여주고, 수정 정보 입력
  - write.jsp
    BoardManager.addBoardData(BoardData) 사용
  - writeform.html
    글 입력

  * DTO에 값을 설정하고, 해당 DTO를 Session Bean을 이용해서 넘기면
    Session Bean 에서는 DTO의 각 값들을 이용해서 Entity Bean 을 호출한다.

'그거 > Seminar' 카테고리의 다른 글

제 10회 한국 자바 개발자 컨퍼런스  (2) 2009.02.18
제9회 한국 Java 개발자 컨퍼런스  (0) 2008.01.22
JSP & Servlet 교육 Day 4th.  (0) 2007.10.25
JSP & Servlet 교육 Day 3rd.  (0) 2007.10.24
JSP & Servlet 교육 Day 2nd.  (0) 2007.10.23
:
Posted by 뽀기
2007. 10. 25. 09:55

JSP & Servlet 교육 Day 4th. 그거/Seminar2007. 10. 25. 09:55


장소 : 썬 교육센터
날짜 : 10.22 ~ 10.26
시간 : 09:30 ~ 17:30
내용 : Web Component Developement with Servlet and JSP Technologies

# Day 4

# Web Application 에서 EJB 사용하기

<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="javax.rmi.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.transaction.*" %>
<%@ page import="kr.co.ejb.examples.*" %>

<%
 Context ctx = null;

 try {
  ctx = new InitialContext();
  Object h = ctx.lookup("HelloWorldBean");
  HelloWorldHome home = (HelloWorldHome)PortableRemoteObject.narrow(h, HelloWorldHome.class);
  HelloWorld helloWorld = home.create();

  out.println(helloWorld.helloWorld());
 } catch(Exception e) {
  out.println(e);
 }
%>


1. 위 내용의 jsp 파일을 생성하여 web application 디렉토리 위치(C:\bea\user_projects\domains\mydomain\applications\webtest)에 복사한다.
2. jsp 페이지에서 helloworld.jar 내용을 import하여 사용하기 위해서
   helloworld.jar 파일을 C:\bea\user_projects\domains\mydomain\applications\webtest\WEB-INF\lib 에 복사한다.
   (classpath 잡아주기 귀찮으니까 WebLogic 서버가 시작하면서 알아서 jar 파일 물고 올라오도록 설정한 것이다.)


## 엔티티 빈
  Home Interface
    javax.ejb.EJBHome 또는 javax.ejb.EJBLocalHome 를 상속받는다.
    빈 클래스를 생성, 검색, 삭제할 수 있는 메소드를 선언한다.

    public interface XXX extends EJBHome {
      // insert 담당
      public XXX create(xx) throws CreateException, RemoteException;  
      // PK를 이용하여 table에서 한 row 가져옴
      public XXX findByPrimaryKey(xx) throws FinderException, RemoteException;
    }


  Remote Interface
    javax.ejb.EJBObject 또는 javax.ejb.EJBLocalObject를 상속받는다.
    클라이언트가 호출할 비즈니스 메소드를 정의하고 있다.

    public interface XXX extends EJBObject {
      // Table의 특정 column에 대해 접근할 수 있도록 하는 getter/setter
      public XXX getXX() throws RemoteException;
      public void setXX(xx) throws RemoteException;
    }


  Bean class
    javax.ejb.SessionBean 인터페이스를 구현한다.
    원격 인터페이스에서 선언한 비즈니스 메소드를 구현해야 한다.
    (EJB 클래스는 원격 인터페이스를 구현하지 않는다.)

    public abstract class XXX implements EntityBean {
      private EntityContext context;
      // Home Interface에 있는 getter/setter method 추상화 선언
      public abstract XXX getXX() throws RemoteException;
      public abstract void setXX(xx) throws RemoteException;

      // Table에 한 row를 insert 하는 역할을 담당
      public String ejbCreate(xx) throws CreateException {
        setXX(xx);
      }

      // CMP 에서는 method의 몸체 없이 정의, BMP 에서는 각 method 몸체 구현
      // ejbCreate, ejbPostCreate -> insert 구현
      // ejbRemove -> delete 구현
      // ejbStore -> update 구현
      // ejbLoad -> where 조건을 이용한 특정 한 row select 구현
      // ejbFindByPrimaryKey -> PK를 이용한 특정 한 row select 구현
      public void ejbPostCreate(XX) throws CreateException {}
      public void ejbStore() {}
      public void ejbLoad() {}
      public void ejbRemove() {}

      public void ejbActivate() {}
      public void ejbPassivate() {}
      public void setEntityContext(EntityContext ctx) { context = ctx; }
      public void unsetEntityContext() { context = null; }
    }


  CMP 개발 (Container Managed Persistence)
    Source에 SQL 이 보이지 않는다.
    create(), findByPrimaryKey() method 등 Spec에 정의된 사항을 이용하여 DB 작업을 한다.
    WebLogic Builder에서의 설정
      1. Persistence 설정
      2. CMP fields 각각에 대해서 type 설정
      ( 3. Resources -> Resource References에 Add를 해줘야 한다는데, 안해도 잘된다.
           이유....는 나도 모른다 -_-;
           물어보니... 소스에 해당 resource에 대해서 lookup이 박혀있음 안해도 된단다.
           그래도 모르겠다 ㅜㅜ.
      )
      3. 저장하여 descriptor 파일 생성
      4. jar cvf xxxx.jar * 해서 class 파일과 META-INF 디렉토리를 jar로 압축

  BMP 개발 (Bean Managed persistence)
    Source(Bean)에 SQL을 직접 사용한다.
    WebLogic Builder에서의 설정
      1. Persistence 설정
      2. CMP fields 각각에 대해서 type 설정
      ( 3. Resources -> Resource References에 Add를 해줘야 한다는데, 안해도 잘된다.
        이유....는 나도 모른다 -_-; )
      3. 저장하여 descriptor 파일 생성
      4. jar cvf xxxx.jar * 해서 class 파일과 META-INF 디렉토리를 jar로 압축


  * EntityBean 에는 Persistence Data 그 자체에 대해서만 구현
    SessionBean 에는 EntityBean에서의 Data에대한 가공 및
    각종 Business Logic 을 구현
  * EJB 는 MVC 패턴에서 Model 이다.
    Model 은 Data와 Business Logic 역할로 구성되어 있다.

## 메세지 드리븐 빈
    Source(Bean)에 SQL을 직접 사용한다.
    WebLogic Builder에서의 설정
      1. Persistence 설정
      2. CMP fields 각각에 대해서 type 설정
      ( 3. Resources -> Resource References에 Add를 해줘야 한다는데, 안해도 잘된다.
        이유....는 나도 모른다 -_-; )
      3. MessageDrivenBean에 대해서 Destination Type & JNDI Name을 설정한다.
      4. MessageDrivenBean에 대해서 Resource -> EJB Refs 설정
      5. 저장하여 descriptor 파일 생성
      6. jar cvf xxxx.jar * 해서 class 파일과 META-INF 디렉토리를 jar로 압축
   
   


EJB 복잡하다.. 헷갈린다..  해야 될 것들이 너무 많다..
SessionBean, EntityBean, MessageDrivenBean
대체 이런건 왜 만든거여. -_-; ㅜㅜ
어흑. 먼 Spec이 이모양이야!!!!!!!!!!!!!!!!!
메세지 드리븐 빈은 더 복잡하네 -_-;

'그거 > Seminar' 카테고리의 다른 글

제9회 한국 Java 개발자 컨퍼런스  (0) 2008.01.22
JSP & Servlet 교육 Day 5th.  (0) 2007.10.26
JSP & Servlet 교육 Day 3rd.  (0) 2007.10.24
JSP & Servlet 교육 Day 2nd.  (0) 2007.10.23
JSP & Servlet 교육 Day 1st.  (0) 2007.10.22
:
Posted by 뽀기
2007. 10. 24. 14:22

JSP & Servlet 교육 Day 3rd. 그거/Seminar2007. 10. 24. 14:22


장소 : 썬 교육센터
날짜 : 10.22 ~ 10.26
시간 : 09:30 ~ 17:30
내용 : Web Component Developement with Servlet and JSP Technologies

# Day 3


## EJB
  SessionBean -+- Stateful, Stateless
               |
  EntityBean  -+- CMP(Container Managed Persistence) -+- CMR
               |                                      |
               |                                      +- EJB-QL
               +- BMP(Bean Managed Persistence)
  Message Driven Bean


## JMS (Java Message Service)
  : 비동기 메시지 처리
  : Mail, Log 기록에서 유용
  : P2P(Peer-to-Peer)
    message 생산자 여러개, message 소비자 한개
  : pub/sub (publisher/subscriber)
    message 생산자 한개, message 소비자 여러개

   * 동기 메시지 처리
     메세지 생산자가 메시지 소비자의 응답을 기다린다.
     ex) HTTP 웹 프로그램
   * 비동기 메시지 처리
     메시지 생산자가 메시지 소비자의 응답을 기다리지 않는다.
     ex) AJAX

운영도구
  : WebLogic 콘솔 관리자

Connection Factory
  : P2P => javax.jms.QueueConnectionFactory
  : pub/sub => javax.jms.TopicConnectionFactory

목적지
  메세지를 처리하기 위한 자원
  : P2P -> Queue
  : pub/sub -> Topic

Connection
  : P2P -> QueueConnection
  : pub/sub -> TopicConnection

Session(통신 라인)
  메시지를 생성하고 소비하기 위한 단일 스레드 환경
  : P2P -> QueueSession
  : pub/sub -> TopicSession

메시지 생산자
  : P2P -> QueueSender.send()
  : pub/sub -> TopicPublisher.publish()

메시지 소비자
  : P2P -> QueueReceiver.receive()
  : pub/sub -> TopicSubscriber.setMessageListener()

메시지
  Header, Porperty, Body
  TextMessage
  MapMessage
  ByteMessage
  StreamMessage
  ObjectMessage
  Message


## JMS 서비스 설정
 
  Store 설정
    WebLogic 콘솔 -> Services -> JMS -> Stores -> create new File Store
    디렉토리명 : myjmsfilestore
    위치       : C:\bea\user_projects\domains\mydomain\myjmsfilestore
    store name : MyJMSFileStore
  Server 설정
    WebLogic 콘솔 -> Services -> JMS -> Servers -> create new server
    Persistence Store : 위에서 생성한 Store 명 지정
    server name : MyJMSServer
  Server에 목적지(Destination - queue/topic) 설정
    WebLogic 콘솔 -> Services -> JMS -> Servers -> 위에서 생성한 Server -> Destination -> configure new JMS Queue
    queue name : MyJMSQueue
    WebLogic 콘솔 -> Services -> JMS -> Servers -> 위에서 생성한 Server -> Destination -> configure new JMS Topic
    topic name : MyJMSTopic


    * JMS Server -> Destination (queue/topic) -> File Store -> myjmsfilestore(C:\bea\user_projects\domains\mydomain\myjmsfilestore)
    * 생산자 --> JMS Server
                    |
                    +---> Destination ( queue / topic )
                             |
                             +---> File Store
                                     |
                                     +---> myjmsfilestore
                                              |
                                              +---> 소비자


## Queue에 메세지 보내기

import java.io.*;
import javax.jms.*;
import javax.naming.*;
import java.util.Properties;

public class MessageQueueSender {
 public static void main(String[] args) {
  if( args.length != 1 ) {
   System.out.println("Usage : java MessageQueueSender [Message]");
   System.exit(0);
  }

  try {
    // HTTP protocol을 이용하여 WegLogic에 접근하는 것이 아니기 때문에
    // java application에서 WegLogic을 사용하기 위해 설정하는 부분

   Properties p = new Properties();
   p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
   p.put(Context.PROVIDER_URL, "t3://localhost:7001");

   Context ctx = new InitialContext(p);

   QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("weblogic.jms.ConnectionFactory");

   Queue queue = (Queue)ctx.lookup("jmsqueue");
   QueueConnection con = factory.createQueueConnection();
   QueueSession session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
   QueueSender qsender = session.createSender(queue);

   TextMessage message = session.createTextMessage();
   message.setText(args[0]);
   qsender.send(message);
   qsender.send(session.createMessage());

   con.close();
  } catch(Exception e) {
   e.printStackTrace();
  }
 }
}


# Queue에서 메세지 읽어오기

import java.io.*;
import javax.jms.*;
import javax.naming.*;
import java.util.Properties;

public class MessageQueueReceiver {
 public static void main(String[] args) {
   Queue queue = null;
   QueueConnection con = null;
   QueueSession session = null;
   QueueReceiver qreceiver = null;
   
  try {
   Properties p = new Properties();
   p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
   p.put(Context.PROVIDER_URL, "t3://localhost:7001");

   Context ctx = new InitialContext(p);

   QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("weblogic.jms.ConnectionFactory");

   queue = (Queue)ctx.lookup("jmsqueue");
   con = factory.createQueueConnection();
   session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
   qreceiver = session.createReceiver(queue);
   
   con.start();
   
   while(true) {
    Message msg = qreceiver.receive(1);
   
    if( msg != null ) {
     if( msg instanceof TextMessage ) {
      TextMessage tmpMsg = (TextMessage)msg;
      System.out.println("읽어온 메시지 : " + tmpMsg.getText());

      if( "exit".equals(tmpMsg.getText()) ) {
       break;
      }
     }
    } else {
     Thread.sleep(500);
    }
   }
  } catch(Exception e) {
   e.printStackTrace();
  } finally {
   try {
    con.close();
   } catch(Exception e) {
   }
  }
 }
}


# Topic 에 발행하기

import java.io.*;
import javax.jms.*;
import javax.naming.*;
import java.util.Properties;

public class MessageTopicPublisher {
 public static void main(String[] args) {
  BufferedReader br = null;

  try {
   Properties p = new Properties();
   p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
   p.put(Context.PROVIDER_URL, "t3://localhost:7001");

   Context ctx = new InitialContext(p);
   TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("weblogic.jms.ConnectionFactory");

   Topic topic = (Topic)ctx.lookup("jmstopic");
   TopicConnection con = factory.createTopicConnection();
   TopicSession session = con.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
   TopicPublisher publisher = session.createPublisher(topic);

   String line = null;
   br = new BufferedReader(new InputStreamReader(System.in));

   while( (line = br.readLine()) != null ) {
    TextMessage message = session.createTextMessage();
    message.setText(line);
    publisher.publish(message);

    if( "exit".equals(line) ) {
     break;
    }

    message = null;
   }

   con.close();

  } catch(Exception e) {
   e.printStackTrace();
  }
 }
}



# Topic 에서 구독하기

import java.io.*;
import javax.jms.*;
import javax.naming.*;
import java.util.Properties;

public class MessageTopicSubscriber {
 public static void main(String[] args) {
  BufferedReader br = null;

  try {
   Properties p = new Properties();
   p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
   p.put(Context.PROVIDER_URL, "t3://localhost:7001");

   Context ctx = new InitialContext(p);
   TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("weblogic.jms.ConnectionFactory");

   Topic topic = (Topic)ctx.lookup("jmstopic");
   TopicConnection con = factory.createTopicConnection();
   TopicSession session = con.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
   TopicSubscriber subscriber = session.createSubscriber(topic);
   subscriber.setMessageListener(new MessageListener() {
    public void onMessage(Message message) {
     try {
      if( message instanceof TextMessage) {
       TextMessage m = (TextMessage)message;
       System.out.println("구독 내용 > " + m.getText());
      }
     } catch(Exception e) {
      e.printStackTrace();
     }
    }

   });

   con.start();
   while(true) {
    char c = (char)System.in.read();
    if( c == 'q') break;
   }
   con.close();

  } catch(Exception e) {
   e.printStackTrace();
  }
 }
}


 # 세션 빈의 구성과 용도

  원격 인터페이스
    javax.ejb.EJBObject 또는 javax.ejb.EJBLocalObject를 상속받는다.
    클라이언트가 호출할 비즈니스 메소드를 정의하고 있다.

  홈 인터페이스
    javax.ejb.EJBHome 또는 javax.ejb.EJBLocalHome 를 상속받는다.
    빈 클래스를 생성, 검색, 삭제할 수 있는 메소드를 선언한다.

  빈 클래스
    javax.ejb.SessionBean 인터페이스를 구현한다.
    원격 인터페이스에서 선언한 비즈니스 메소드를 구현해야 한다.
    (EJB 클래스는 원격 인터페이스를 구현하지 않는다.)



# 세션 빈 테스트

package kr.co.ejb.examples;

/**
 * Remote Interface
 *
 * Client가 호출할 원격 인터페이스
 * Client가 호출할 메소드만 정의함
 *
 * @author Lucky
 */

import java.rmi.RemoteException;
import javax.ejb.EJBObject;

public interface HelloWorld extends EJBObject {
 public String helloWorld() throws RemoteException;
 public String hello(String param) throws RemoteException;
 public String getTime() throws RemoteException;
}



 

package kr.co.ejb.examples;

/**
 * Bean Class
 */

import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class HelloWorldBean implements SessionBean {
 private SessionContext ctx;

 public void setSessionContext(SessionContext c) {
  ctx = c;
 }

 public String helloWorld() {
  return "Hello World";
 }

 public String hello(String param) {
  return "Hello " + param;
 }

 public String getTime() {
  return (new java.util.Date().toString());
 }

 public void ejbCreate() {}
 public void ejbRemove() {}
 public void ejbActivate() {}
 public void ejbPassivate() {}
}



 

package kr.co.ejb.examples;

/**
 * Home Interface
 *
 * Client가 EJB를 생성시킬 때 사용하는 메소드 정의
 *
 *
 * @author Lucky
 */


import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;

public interface HelloWorldHome extends EJBHome {
 public HelloWorld create() throws CreateException, RemoteException;
}


# 위 java 파일들을 compile 한 후에 WebLogic Builder를 이용해서 descriptor file 작성
# package 가 시작하는 폴더에서 META-INF 폴더와 같이 jar 생성
   c:\> cd c:\java\classes\helloworld
   c:\java\classes\helloworld> dir
   kr     META-INF
   c:\java\classes\helloworld> jar cvf helloworld.jar *
   c:\java\classes\helloworld> dir
   kr     META-INF     helloworld.jar
# WebLogic 관리 콘솔에서 EJB 로 배포함
   mydomain -> Deployments -> EJB Modules -> Deploy a new EJB Modules
:
Posted by 뽀기
2007. 10. 24. 11:13

참, 자바란 것이 어렵다 ㅜㅜ 그거/Java2007. 10. 24. 11:13

class Test {
 public static void swap(int x, int y) {
  int temp;
  temp = y;
  y = x;
  x = temp;
 }

 public static void swap(Number n) {
  int temp;
  temp = n.x;
  n.x = n.y;
  n.y = temp;
 }

 public static void objRef(Number n) {
  n = null;
 }

 public static void main(String[] args) {
  int a = 10;
  int b = 20;

  System.out.println(a + ", " + b);
  swap(a, b);
  System.out.println(a + ", " + b);

  String str1 = "1234";
  String str2 = "1234";
  Integer int3 = new Integer(1234);
  String str4 = new String("1234");

  System.out.println(str1 == str2);
  System.out.println(str1.equals(int3));
  System.out.println(str1 == str4);
  System.out.println(str1.equals(str4));

  Number n = new Number();
  n.x = 10;
  n.y = 20;

  System.out.println(n.x + ", " + n.y);
  swap(n);
  System.out.println(n.x + ", " + n.y);
  objRef(n);
  System.out.println(n.x + ", " + n.y);

 }
}

class Number {
 int x;
 int y;
}



위 결과가 어찌 될 것인가......


10, 20
10, 20
true
false     <--- equals(Object) method라서 "1234".equals(new Integer(1234)) 하면
               new Integer(1234)가 toString() 되서 true가 될 줄 알았는데 false 다.
false
true
10, 20
20, 10
20, 10    <--- 분며이 objRef(Number n)에서 n = null; 을 했는데 왜 값이 찍히지?
               NullPointerException 나야 되는거 아녀? -_-;


이렇단다.
아.. Java를 몇년을 해도 저게 헷갈리는 이유가 대체 무엇이란 말인가.
아.. 돌머리.. ㅡ,.ㅡ;

'그거 > Java' 카테고리의 다른 글

Java Heapsize 관련 참조  (0) 2008.10.21
eclipse TPTP update  (0) 2008.10.08
WebLogic 8.1 SP6 Download URL  (0) 2007.09.17
[JavaQuiz] 3n+1  (0) 2007.09.12
[JavaQuiz] 셰익스피어-원숭이 문제  (0) 2007.09.12
:
Posted by 뽀기
2007. 10. 23. 10:24

JSP & Servlet 교육 Day 2nd. 그거/Seminar2007. 10. 23. 10:24


장소 : 썬 교육센터
날짜 : 10.22 ~ 10.26
시간 : 09:30 ~ 17:30
내용 : Web Component Developement with Servlet and JSP Technologies

# Day 2

Developing View Component

## Use Case
         Actor                           Use Case
   ---------------------------------------------------------
   Player                         List all avaliable leagues
                                  Register for a league

   League Administrator           Add a new league
     

## View 설계 및 구현 (List all avaliable leagues : Player)
   index.html
   list_league.view

   * html 파일은 더 이상 수정하지 않을 페이지
   * view 파일은 개발자가 계속 수정하면서 사용할 페이지

   League Bean 생성
   ListLeagueServlet 생성

   * eclipse에 tomcat을 연동한 후에
     Dynamic Web Project를 생성하여 위 작업을 할 경우
     eclipse에서 src, build. webContent 디렉토리가 생성된다.
     src 에서 생성된 java 파일의 class 파일들이 build/classes 에 생성이 되는데
     흔히 알고 있는 WEB-INF\classes 밑에 servlet의 class 파일들이 없어도 servlet이 잘된다.
   * tomcat에서 web.xml에 있는 invoker servlet에 대해서 주석을 해제시키지 않아도
     servlet이 잘 된다.(이건 왜 그런지 참 신기허다. 알고 있기로는 주석을 빼줘야 하는데..)
   * tomcat에 context를 추가할 때 $TOMCAT_HOME/conf/Catalina/localhostxml 파일을 추가해줘야
     context가 추가되는 걸로 알고 있었는데, $TOMCAT_HOME/webapps/ 밑에는 그냥 디렉토리 만들고
     WEB-INF, WEB-INF/classes, WEB-INF/web.xml 들만 추가해주면 context가 추가된다.


## 웹로직 설치 & 환경 설정

웹로직 설치
  server812_win32.exe

WebLogic 설정
  시작->프로그램->Bea weblogic platform 8.1 ->
Configuration Wizard
  작업 도메인을 mydomain 으로 한다.

환경설정
  user_projects\mydomain\startWebLogic.cmd 수정
    set CLASSPATH=.;%WEBLOGIC_CLASSPATH%.....

  user_project\mydomain\setEnv.cmd 수정
    set CLASSPATH=.;%WEBLOGIC_CLASSPATH......

  path에 수정
    C:\bea\user_projects\domains\mydomain
추가


## 서블릿과 JSP 운용

  디렉토리 구조
    webtest -+--- WEB-INF ------------- classes  (java class file : 서블릿, DTO)
             |         |
             |         +--------------- lib      (class library   : .jar 파일)
             |         |
             |         +--------------- src      (java sourc file : .java 파일)
             |         |
             |         +--------------- web.xml, weblogic.xml
             |
             +---- html 파일, jsp 파일
    required -> WEB-INF, web.xml, weblogic.xml


## Packaging Applications

  File Contents                                   Type of File
  --------------------                            -------------------
  EJB Component JAR                              
  Helper Classes JAR File          ----->         EAR file ( .ear )
  WAR File
  RAR File

  Bean Implementation Class
  Helper Classes                   ----->         EJB Component JAR file ( .jar )
  Interfaces
  Deployment Descriptor

  HTML
  JSP
  Servlets                         ----->         Web Component or Web Archive ( .war )
  Helper Classes
  Deployment Descriptor


## 웹로직에 Web Application 배포

  C:\bea\user_projects\domains\mydomain\applications

  폴더 밑에 작업한 디렉토리(webtest)를 복사하거나 위 경로에 webtest 디렉토리를 만들고 작업을 한다.

  WebLogic Server Console에서 확인한다.

  mydomain -> Deployments -> Web Application Modules

  위 메뉴를 따라가서 보면 _appsdir_webtest_dir 라는 이름으로 webtest가 Web Application이 Deploy 됐음을 확인할 수 있다.

  http://localhost:7001/webtest/index.html 을 브라우저에서 실행해서 제대로 보이는지 확인한다.

  C:\bea\user_projects\domains\mydomain\config.xml 파일에 아래 내용이 추가됐음을 확인할 수 있다.
      <Application Name="_appsdir_webtest_dir"
        Path="C:\bea\user_projects\domains\mydomain\applications"
        StagingMode="nostage" TwoPhase="true">
        <WebAppComponent Name="webtest" Targets="myserver" URI="webtest"/>
      </Application>


weblogic.xml 를 아래처럼 수정
<weblogic-web-app>
 <context-root>/</context-root>
</weblogic-web-app>


위와 같이 하면 http://localhost:7001/webtest/index.html 이렇게 하지 않고
http://localhost:7001/index.html 이렇게 호출하여 사용할 수 있다.

HelloWorldServlet.java, CounterServlet.java 파일을 생성하고
WEB-INF\classes 에 위 java 파일들을 컴파일 하여 class 파일을 위치시킨 후에
web.xml 파일에 아래 내용을 추가한다.

 <servlet>
  <servlet-name>HelloWorld</servlet-name>
  <servlet-class>examples.HelloWorldServlet</servlet-class>
 </servlet>

 <servlet>
  <servlet-name>Counter</servlet-name>
  <servlet-class>examples.CounterServlet</servlet-class>
 </servlet>

 <servlet-mapping>
  <servlet-name>HelloWorld</servlet-name>
  <url-pattern>/hello</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
  <servlet-name>Counter</servlet-name>
  <url-pattern>/counter</url-pattern>
 </servlet-mapping>



  * java 파일을 컴파일 할 경우 컴파일을 실행할 도스창(cmd)에서
   C:\bea\user_projects\domains\mydomain
밑에 있는 setEnv.cmd 파일을 실행하여
    컴파일에 필요한 classpath 등에 대해서 자동으로 설정하도록 한다.

추가한 후에 webtest application을 재배포한 후에 브라우저에서
http://localhost:7001/hello, http://localhost:7001/counter 를 호출하여 페이지를 확인한다.

:
Posted by 뽀기