1.helloClient <====java project
--------------------------------------------------------------------------
HelloClient.java
import javax.rmi.PortableRemoteObject;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
import hello.HelloHome;
import hello.Hello;

public class  HelloClient
{
 public static void main(String[] args)throws Exception{
  
  //1.원격 홈 객체의 ref얻기:원격의 네임 서비스 접근할것!
  // a.원격 J2EE Server(웹로직서버) NamingService의 얻을 ref 얻기 : JDNI 설정
 Properties prop=new Properties(); //서버를 바뀌더라도 프로터티 파일만 변경하고자?
 prop.put(Context.INITIAL_CONTEXT_FACTORY,
  "weblogic.jndi.WLInitialContextFactory"); // ("") 로딩
 prop.put(Context.PROVIDER_URL,
  "t3://211.183.3.213:7001"); //접속
 Context context=new InitialContext(prop);

 //b.JNDI NAME 으로 lookup 홈객체의 ref 얻기
 // 원격 홈객체의 ref는 CORBA객체를 narrowing네로잉?(캐스팅과 뜻은 같음) 한다.
Object homeObject=context.lookup("MyHelloBean"); //jndi naming에 묶어준다.


//코바객체를 자바객체로 narrowing,casting
HelloHome home=
 (HelloHome)PortableRemoteObject
 .narrow(homeObject,HelloHome.class); //HelloHome 캐스팅 해주기

//2.home.create()호출 의한 원격 객체 ref

Hello hello=home.create(); //HelloHome의 리턴값 Hello
String result=hello.greet("케빈");
System.out.println("result:" +result);

 }
}
===========================================================================
2.helloJAR <=== new > EJB> EJB Project
---------------------------------------------------------------------------
ejbModule/hello/HelloBean.java
/**
 *
 */
package hello;

import java.rmi.RemoteException;

import javax.ejb.EJBException;
import javax.ejb.SessionContext;


/**
 *
 * <!-- begin-user-doc -->
 * A generated session bean
 * <!-- end-user-doc -->
 * *
 * <!-- begin-xdoclet-definition -->
 * @ejb.bean name="Hello" 
 *           description="An EJB named Hello"
 *           display-name="Hello"
 *           jndi-name="MyHelloBean"
 *           type="Stateless"
 *           transaction-type="Container"
 *           view-type="remote"
 * @weblogic.pool initial-beans-in-free-pool="5"
 * <!-- end-xdoclet-definition -->
 * @generated
 */

public class HelloBean implements javax.ejb.SessionBean {

 /**
  * <!-- begin-xdoclet-definition -->
  * <!-- end-xdoclet-definition -->
  * @generated
  */
 private static final long serialVersionUID = 1L;

 /**
  *
  * <!-- begin-xdoclet-definition -->
  * @ejb.create-method view-type="remote"
  * <!-- end-xdoclet-definition -->
  * @generated
  *
  * //TODO: Must provide implementation for bean create stub
  */
 public void ejbCreate() { //Home에 있는 ceate()  안써주면 스팩 오류
 }

 /**
  *@ejb.interface-method view-type="remote"
  *
  */
 public String greet(String name){
  System.out.println("HelloBean.greet()...");
  return "Hi!!" + name;
 }

 /* (non-Javadoc)
  * @see javax.ejb.SessionBean#ejbActivate()
  */
 public void ejbActivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub

 }

 /* (non-Javadoc)
  * @see javax.ejb.SessionBean#ejbPassivate()
  */
 public void ejbPassivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub
 }

 /* (non-Javadoc)
  * @see javax.ejb.SessionBean#ejbRemove()
  */
 public void ejbRemove() throws EJBException, RemoteException {
  // TODO Auto-generated method stub

 }

 /* (non-Javadoc)
  * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
  */
 public void setSessionContext(SessionContext arg0) throws EJBException,
   RemoteException {
  // TODO Auto-generated method stub

 }

 /**
  *
  */
 public HelloBean() {
  // TODO Auto-generated constructor stub
 }
}
=========================================================================
Home객체 얻기
1. export > EJB jar file 생성 > Destination >
C:\JAVA_DATA\workspaceEJB\helloWAR\WebContent\WEB-INF\lib\helloJAR.jar 저장
-------------------------------------------------------------------------
2.
helloWAR  <=== Dynamic web Project
../Libraries/WebLogic System Libraries/ ,마우스 오른쪽 클릭Properties(Alt+enter) >ADD 클릭 >

../bea9/weblogic92/server/iib/webLogic.jar 클릭
=========================================================================
  웹에서 접근하여 컴포런트 접근
converterJAR  <<EJB Project
--bean 어노테이션만 있음 장땡이다!!

/**
 *
 */
package converter;

import java.rmi.RemoteException;

import javax.ejb.EJBException;
import javax.ejb.SessionContext;


/**
 *
 * <!-- begin-user-doc -->
 * A generated session bean
 * <!-- end-user-doc -->
 * *
 * <!-- begin-xdoclet-definition -->
 * @ejb.bean name="Converter" 
 *           description="An EJB named Converter"
 *           display-name="Converter"
 *           jndi-name="MyConverter"
 *           type="Stateless"
 *           transaction-type="Container"
 *     view-type="remote"
 * <!-- end-xdoclet-definition -->
 * @generated
 */

public class ConverterBean implements javax.ejb.SessionBean {

 /**
  * <!-- begin-xdoclet-definition -->
  * <!-- end-xdoclet-definition -->
  * @generated
  */
 private static final long serialVersionUID = 1L;

 /**
  *
  * <!-- begin-xdoclet-definition -->
  * @ejb.create-method view-type="remote"
  * <!-- end-xdoclet-definition -->
  * @generated
  *
  * //TODO: Must provide implementation for bean create stub
  */
 public void ejbCreate() {
 }

 
 //business() method
 /**
  * @ejb.interface-method view-type="remote"
  */
 public int dollarToWon(int dollar){
  return dollar/1000;
 }
 
 /**
  * @ejb.interface-method view-type="remote"
  */
 public int yenToWon(int yen){
  return yen/15;
 }
 
 
 /* (non-Javadoc)
  * @see javax.ejb.SessionBean#ejbActivate()
  */
 public void ejbActivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub

 }

 /* (non-Javadoc)
  * @see javax.ejb.SessionBean#ejbPassivate()
  */
 public void ejbPassivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub

 }

 /* (non-Javadoc)
  * @see javax.ejb.SessionBean#ejbRemove()
  */
 public void ejbRemove() throws EJBException, RemoteException {
  // TODO Auto-generated method stub

 }

 /* (non-Javadoc)
  * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
  */
 public void setSessionContext(SessionContext arg0) throws EJBException,
   RemoteException {
  // TODO Auto-generated method stub

 }
}
---------------------------------------------------------------------------
client 만들기
coverterWAR  <== new / dynamic web Project


lookup(), InitialContext 객체 용량이 크므로 사용 자제.. 제대로 된 사용방법?

///////////////////////////////////////////////////////////////////////////

===========================================================================
1.session bean( stateless session bean )무상태
Client에 대한 상태 정보가 유지되지 않는 session bean을 의미한다.
Client 정보 <--> pool

멤버 필드가 없다.(그넘이 그넘인지 알수 없다!)

“상태정보가 유지된다” 라는 말의 의미는 client의 session동안 client가 호출한 method사이에 주고받은 각

종 data가 남아있는 경우를 의미한다.

즉, 각각의 client에 대해서 session bean과 주고받은 data가 지속적으로 유지되지 않는 session bean이

stateless session bean이다.
<상태 정보 저장 하지 않는다>

일반적으로 한 개의 stateless session bean이 여러 개의 client의 요청을 동시에 처리한다. ( 이것은 EJB

Container를 만드는 vendor에 따라서 약간씩 차이가 있을 수 있다는점에 주의하자. )

중요한점은 상태정보가 유지되지 않기 때문에 client들이 stateless session bean의 method를 계속 호출하는

동안 어떤 종류의 client의 정보도 stateless session bean안에 지속적으로 남아있지 않게 된다

--------------------------------------------------------------------------
2.session Bean(stateful Session bean) 상태유지
=>한개의 stateful session bean은 오직 한개의 Client만 서비스한다.
(개인용 Bean) - 장바구니 개념으로 client의 상태정보 당연히 bean class의
member 필드에 포함

여러 개의 client들이 동일한 stateful session bean을 호출할 때 각각 독자적인 stateful session bean이 서

비스하며 상태정보가 유지된다. 이것은 EJB Container가 알아서 처리해준다.

활성화( activation ) , 비 활성화( passivation )라는 자원관리 기법을 사용하여 memory와 CPU자원을 절약한

다.

세션유지 세션빈의 생성
1) 상태 유지 세션빈의 생성은 클라이언트가 세션빈의 홈 인터페이스의 create() 메소드를 호출
2) 메소드 호출받은 홈 인터페이스 객체는 EJB Object 객체(원격객체)를 생성하고, 세션 컨텍스트((객체

의 정보):커밋,롤백 개념)를 생성
3) 세션빈 인스턴스를 생성하고, 세션빈 인스턴스의 setSessionContext() 메소드를 호출해서 생성한 세션

컨텍스트를 설정한다. ->EJB객체(project)에 대한 정보를 설정
    4) 세션 빈 인스턴스에 홈 인터페이스의 create() 메소드와 시그너쳐가 동일한
ejbCreate() 메소드를 호출.

<Home객체를 통해 원격객체를 얻어 콩 객체에 붙는다.>

=========================================================================
JDBC(DB) 연결(setting)
커넥션을 얻기 위한 작업
1. user project > admin server console > 로그인
2. Domain Structure > Serveices > JDBC > lock&edit > new
 name :OracleDataSource
    JNDI Name:OracleJNDI
database type:oracle,
database driver:oracles's driver(thin)ver.9.01...
3.Database Name:ORCL   <-- 오라클SID(java)
4.Hostname : ip주소
5.port = 1521, 1522
....
testConfiguration 클릭 후 next > check 후 > finished > 확정
6.jsp 파일에서 (DataSource ds;) 추가 후 임폴트

 

----------------------------------------------------------------------
sessionJDBC <==dynamic web project 생성

lookup 하기 위해서 Init메소드 생성 한다.

services.msc //서비스 확인(너무 느려질 경우 오라클 수동 확인)