Java Beans
- 대규모 프로젝트에서 쓰임
- 용도 : 업무를 분할해서 전체를 잘만들어보자.
JSP : web page 디자인
JavaBean : 내부 logic 구현
예제
public class MyBean {
Private String name = "Heo";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
1. Getter, Setter
2. Empty constructor
*업무를 분담하기 위해서 컴포넌트 별로 나누어놓음.
Enterprise Java Beans
Transaction, Security 처리
Security 처리 예제(무식한 코드 삽입, 예전 방법, 디버깅이 어려움)
public class CalcBean {
public int add(int a, int b) {
User user = getCaller();
if(user does not have permission) {
throw new SercurityException("Permission denied.");
}
return a + b;
}
}
- 복잡한 코드 사용x
- code 재사용하기 좋게하기 위함
Business Logic
public class CalcBean {
public int add(int a, int b) {
return a + b;
}
}
Configuration ejb-jar.xml
<method-permission>
<role-name>managerRole</role-name>
<method>
<ejb-name>CalcBean</ejb-name>
<method-name>add</method-name>
</method>
</method-permission>
*서버에서 알아서 처리를 해주게됨.
*EJB 3.0 이전
EJB 3.0 이후
xml에 기입했던 부분을 바로 메서드 위에 입력해줌
Annotation
public class CalcBean {
@RoleAllowed("managerRole")
public int add(int a, int b) {
return a + b;
}
}
*EJB를 전체적으로 관리해주는 클라이언트 뷰가 필요한데 이 역할을 하는 것이 Home이다.
EJB 종류
- Session Bean(가장 많이 사용됨.)
- Stateless Session Bean(상태가 없음, 항상 똑같은 결과가 나옴)
- Stateful Session Bean(상태가 존재, 클라이언트마다 상태를 갖음, 여러 결과가 나올 수 있음.)
- Message Driven Bean(JMS, 구독을 하는 입장, 트랜젝션 처리를 하기위해 사용)
- No client view
- Entity Bean(지금은 없어짐.)
- Deprecated(JPA로 대체됨.)
- Singleton
@Asynchronous
Invocation
- EJB는 분산환경을 염두해두고 있다.
Remote Method Invocation
EJB Client code
Hash Table env = new HashTable();
env.put("java.naming.factory.initial", "Factory");
env.put("java.naming.provider.url", "서버 IP");
env.put("java.naming.security.principal", "user");
env.put("java.naming.security.credentials", "password");
InitialContext ic = new InitialContext(env);
CalcHome home = (CalcHome) ic.lookup("calc");
Calc calc = (Calc) home.create();
calc.add(1, 1);
Local Invocation
Shared Class Loader
Isolated Class Loader
- Local EJB
- Remote EJB
- Remote call? Isolated Local call? Shared?
*로컬 내부에 static하게 Cache를 두게된다.
이러한 값들이 언제들어가는지?
- Home
- put : deployment 시점
- remove : undeployment 시점
- Object
- put : create 시점
- remove : remove 또는 invocation 실패 시점
- stateless : share ObjectHandle
- stateful : session 이 destory 될 때
No interface view
*인터페이스가 있어야 프록시를 만들 수 있다.
Interceptor
Transaction, Security 처리를 직접적으로 해줌.
Reflection
*이런 것들을 전체적으로 만들어주는 것이 EJB Object이다.
public class SecurityInterceptor {
public Object invoke(Invocation inv) {
User user = getCaller();
if(user does not have managerRole) {
throw new SecurityException("Permission denied.");
}
return invokeNext(inv);
}
}
public class CalcBean {
public int add(int a, int b) {
return a + b;
}
}
*디버깅이 용이해짐
*리플렉션을 사용하기 때문에 속도면에서는 느림.
Life cycle
- Callbacks
- ejbCreate(param) or @PostConstruct
- ejbRemove() or @PreDestroy
- ejbPassivate() or @PrePassivate
- ejbActivate()
- setSessionContext(SessionContext)
- Runtime session context
- EJBHome, Caller principal, User tx ...
Stateless Session Bean
Stateful Session Bean
Stateless Session Bean
Stateful Session Bean
'👨🏫Study > JAVA' 카테고리의 다른 글
[JAVA] JNDI(Java Naming and Directory Interface) (0) | 2022.04.27 |
---|---|
[JAVA] Effective Java 1 (0) | 2022.04.25 |
[JAVA] GC(Garbage Collection) 영역별 데이터 흐름 정리 (0) | 2022.04.21 |
[JAVA] G1GC (0) | 2022.04.20 |
[JAVA] Garbage Collector (0) | 2022.04.19 |
댓글