JDBC(DB) 연결(setting) & EJB 수업 내용03번째
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 //서비스 확인(너무 느려질 경우 오라클 수동 확인)