본문 바로가기
👨‍🏫Study/JAVA

[JAVA] EJB 추가 정리

by 코푸는 개발자 2022. 4. 22.
728x90

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

728x90

'👨‍🏫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

댓글