JBoss 관리자 개발 가이드

JBoss 3.2.6

목 차

서문
오픈소스에 대하여
JBoss에 대하여
1. JBoss: JMX와 함께 J2EE의 완전한 구현
2. 이 책에서 다루어지는 것들
1. JBoss 서버의 설치와 빌드
1.1. 바이너리 파일 얻기
1.1.1. 사전 준비사항들
1.1.2. 바이너리 패키지 설치하기
1.1.2.1. 디렉터리 구조
1.1.3. Default 서버 설정 파일 셋
1.2. 기본 설치후 테스트하기
1.3. 네트워크 서버에서 부팅시키기
1.4. 소스코드로부터 서버 빌드시키기
1.4.1. SourceForge의 JBoss CVS 레포지터리 액세스하기
1.4.2. CVS란?
1.4.3. Anonymous CVS 액세스
1.4.4. CVS 클라이언트를 얻는 방법
1.4.5. 소스코드를 사용하여 JBoss 3.2.6 배포판 빌드시키기
1.4.6. CVS 소스 코드를 사용하여 JBoss 3.2.6 배포판 빌드시키기
1.4.7. JBoss CVS 소스 트리 살펴보기
1.4.8. JBossTest 유닛 테스트세트 사용하기
2. JBoss JMX Microkernel
2.1. JMX
2.1.1. JMX 소개
2.1.1.1. Instrumentation 레벨
2.1.1.2. Agent 레벨
2.1.1.3. 분산된 서비스 레벨
2.1.1.4. JMX 콤포넌트 개요
2.2. JBoss JMX 구현 아키텍쳐
2.2.1. JBoss ClassLoader 아키텍쳐
2.2.2. 자바에서의 클래스 로딩과 타입
2.2.2.1. ClassCastExceptions - 타입이 맞지 않을 때
2.2.2.2. IllegalAccessException - 하지말아야 하는 것을 했을때
2.2.2.3. LinkageErrors - 여러분이 누군인지, 누가 여러분을 말해주는지 확실하게 해야 합니다
2.2.2.4. JBoss 클래스 로딩 아키텍쳐의 내부
2.2.3. JBoss XMBeans
2.2.3.1. Descriptors
2.2.3.2. 관리 클래스
2.2.3.3. 컨스트럭쳐
2.2.3.4. 속성
2.2.3.5. 오퍼레이션
2.2.3.6. 통지
2.3. JMX 서버에 연결하기
2.3.1. 서버 살펴보기 - JMX 콘솔 웹 어플리케이션
2.3.1.1. JMX 콘솔의 보안
2.3.2. RMI를 사용하여 JMX에 연결하기
2.3.3. 커맨드 라인을 사용하여 JMX에 액세스하기
2.3.3.1. twiddle로 원격 서버 접속하기
2.3.3.2. twiddle 커맨드 사용 샘플
2.3.4. 임의의 프로토콜을 사용하여 JMX에 연결하기
2.4. Microkernel로써 JMX 사용하기
2.4.1. 구동(Startup) 프로세스
2.4.2. JBoss MBean 서비스
2.4.2.1. SARDeployer MBean
2.4.2.2. 서비스 생명주기(Life Cycle) 인터페이스
2.4.2.3. ServiceController MBean
2.4.2.4. 서비스 종속성 지정하기
2.4.2.5. 불충분한 의존성들의 식별
2.4.2.6. 컴포넌트의 Hot Deployment, URLDeploymentScanner
2.4.3. JBoss MBean 서비스 만들기
2.4.3.1. 표준 MBean 예제
2.4.3.2. XMBean 예제들
2.4.4. 배치의 순위와 종속성
2.5. JBoss 배치자 아키텍쳐
2.5.1. Deployers 와 ClassLoaders
2.6. SNMP를 통해 MBean 이벤트 노출시키기
2.6.1. SNMP 아답터 서비스
2.6.2. 트랩 서비스로의 이벤트
2.7. 서비스로 원격 액세스하기, 분리된 호출자(Invoker)
2.7.1. 분리된 호출자 예제 - MBeanServer Invoker Adaptor Service
2.7.2. 분리된 호출자 레퍼런스
2.7.2.1. JRMPInvoker - RMI/JRMP 전송
2.7.2.2. PooledInvoker - RMI/Socket 전송
2.7.2.3. IIOPInvoker - RMI/IIOP 전송
2.7.2.4. JRMPProxyFactory 서비스 - 동적인 JRMP 프록시 만들기
2.7.2.5. HttpInvoker - RMI/HTTP 전송
2.7.2.6. HA JRMPInvoker - 클러스터링된 RMI/JRMP 전송
2.7.2.7. HA HttpInvoker - 크러스터링된 RMI/HTTP 전송
2.7.2.8. HttpProxyFactory - 동적인 HTTP 프록시 만들기
2.7.2.9. HTTP를 통해 RMI 인터페이스를 노출하는 단계
3. JBoss의 네이밍
3.1. JNDI 개요
3.1.1. JNDI API
3.1.1.1. Names
3.1.1.2. Contexts
3.1.2. J2EE 와 JNDI - 어플리케이션 컴포넌트 환경
3.1.2.1. ENC 사용법 관행
3.2. JBossNS 아키텍쳐
3.2.1. 네이밍 InitialContext 팩토리
3.2.1.1. 클러스터링된 환경하에서의 네이밍 발견
3.2.1.2. HTTP InitialContext 팩토리 구현(Implementation)
3.2.1.3. Login InitialContext Factory 구현
3.2.2. HTTP를 통해 JNDI 액세스하기
3.2.3. HTTPS를 통한 JNDI 액세스
3.2.4. HTTP를 통해 JNDI에 안전하게 액세스하기
3.2.5. 읽기-전용 비보호 컨텍스트를 갖는 JNDI로 안전하게 액세스하기
3.2.6. 추가적인 네이밍 MBean들
3.2.6.1. org.jboss.naming.ExternalContext MBean
3.2.6.2. org.jboss.naming.NamingAlias MBean
3.2.6.3. org.jboss.naming.JNDIView MBean
4. JBoss에서의 트랜잭션
4.1. Transaction/JTA 개요
4.1.1. 비관적인(Pessimistic) 그리고 낙관적인(optimistic) 락킹
4.1.2. 분산된 트랜잭션의 컴포넌트들
4.1.3. Two-phase XA 프로토콜
4.1.4. 발견적 예외상황들(Heuristic exceptions)
4.1.5. Transaction IDs 와 branches
4.2. JBoss 트랜잭션의 내부
4.2.1. JBoss에 트랜잭션 관리자 적용시키기
4.2.2. 디폴트 트랜잭션 관리자
4.2.2.1. org.jboss.tm.XidFactory
4.2.3. UserTransaction 지원
5. JBoss에서의 EJB
5.1. EJB 클라이언트쪽의 뷰
5.1.1. EJB 프록시 설정 지정하기
5.2. EJB 서버측 뷰
5.2.1. 분리된 호출자(Detached Invokers) - 전송 중간자(Transport Middlemen)
5.2.2. HA JRMPInvoker - 클러스터링된 RMI/JRMP 전송(Transport)
5.2.3. HA HttpInvoker - 클러스터링된 RMI/HTTP 전송
5.3. EJB 컨테이너
5.3.1. EJBDeployer MBean
5.3.1.1. EJB 배치의 검증(Verifying)
5.3.1.2. 컨테이너에 EJB 배치하기
5.3.1.3. 컨테이너 설정 정보
5.3.2. 컨테이너 플러그인 프레임워크
5.3.2.1. org.jboss.ejb.ContainerPlugin
5.3.2.2. org.jboss.ejb.Interceptor
5.3.2.3. org.jboss.ejb.InstancePool
5.3.2.4. org.jboss.ebj.InstanceCache
5.3.2.5. org.jboss.ejb.EntityPersistenceManager
5.3.2.6. org.jboss.ejb.StatefulSessionPersistenceManager
5.4. 엔티티 빈의 락킹과 데드락 검출
5.4.1. 왜 JBoss는 락킹을 필요로 하는가?
5.4.2. 엔티티 빈의 생명주기(Lifecycle)
5.4.3. 기본 락킹 특성
5.4.4. 플러그인이 가능한 인터셉터와 락킹 정책
5.4.5. 데드락(Deadlock)
5.4.5.1. 데드락 검출
5.4.5.2. ApplicationDeadlockException 캐쉬하기
5.4.5.3. 락 정보 보기
5.4.6. 고급 환경설정과 최적화
5.4.6.1. 단명하는 트랜잭션(Short-lived Transactions)
5.4.6.2. 순차적인 액세스
5.4.6.3. 읽기-전용 빈즈
5.4.6.4. 명시적으로 Read-Only 메쏘드를 정의하기
5.4.6.5. 트랜잭션 정책당 인스턴스
5.4.7. 클러스터내에서 구동시키기
5.4.8. 문제해결
5.4.8.1. 락킹 동작이 일어나지 않는 문제
5.4.8.2. IllegalStateException
5.4.8.3. 지연(Hangs)과 트랜잭션 타임아웃
6. JBoss에서의 메시징
6.1. JMS 예제들
6.1.1. Point-To-Point 예제
6.1.2. Pub-Sub 예제
6.1.3. Pub-Sub 모델에서 지속가능한 토픽 예제
6.1.4. MDB에서의 Point-To-Point 예제
6.2. JBoss 메시징 개요
6.2.1. 호출 계층(Invocation Layer)
6.2.1.1. RMI IL (경시됨)
6.2.1.2. OIL IL (경시됨)
6.2.1.3. UIL IL (경시됨)
6.2.1.4. UIL2 IL
6.2.1.5. JVM IL
6.2.1.6. HTTP IL
6.2.2. 보안 관리자
6.2.3. 목적지 관리자
6.2.4. Message Cache
6.2.5. 상태 관리자
6.2.6. 영속성 관리자
6.2.6.1. 파일 PM
6.2.6.2. Rolling Logged PM
6.2.6.3. JDBC2 PM
6.2.7. 목적지
6.2.7.1. 큐
6.2.7.2. 토픽
6.3. JBoss 메시징 환경설정과 MBeans
6.3.1. org.jboss.mq.il.jvm.JVMServerILService
6.3.2. org.jboss.mq.il.rmi.RMIServerILService (경시됨)
6.3.3. org.jboss.mq.il.oil.OILServerILService (경시됨)
6.3.4. org.jboss.mq.il.uil.UILServerILService (경시됨)
6.3.5. org.jboss.mq.il.uil2.UILServerILService
6.3.5.1. SSL을 위한 IL 설정하기
6.3.5.2. UIL2 전송을 위한 JMS 클라이언트 속성들
6.3.6. org.jboss.mq.il.http.HTTPServerILService
6.3.7. org.jboss.mq.server.jmx.Invoker
6.3.8. org.jboss.mq.server.jmx.InterceptorLoader
6.3.9. org.jboss.mq.sm.file.DynamicStateManager
6.3.10. org.jboss.mq.security.SecurityManager
6.3.11. org.jboss.mq.server.jmx.DestinationManager
6.3.12. org.jboss.mq.server.MessageCache
6.3.13. org.jboss.mq.pm.file.CacheStore
6.3.14. org.jboss.mq.pm.file.PersistenceManager
6.3.15. org.jboss.mq.pm.rollinglogged.PersistenceManager
6.3.16. org.jboss.mq.pm.jdbc2.PersistenceManager
6.3.17. Destination MBeans
6.3.17.1. org.jboss.mq.server.jmx.Queue
6.3.17.2. org.jboss.mq.server.jmx.Topic
6.3.18. JMX를 통한 관리
6.3.18.1. 런타임에서 큐 생성시키기
6.3.18.2. 런타임에서 토픽 생성시키기
6.3.18.3. 런타임에서 JBossMQ User ID 관리하기
6.4. MDB JMS 프로바이더 지정하기
6.4.1. org.jboss.jms.jndi.JMSProviderLoader MBean
6.4.2. org.jboss.jms.asf.ServerSessionPoolLoader MBean
6.4.3. 비-JBoss JMS 프로바이더의 통합
7. JBoss에서의 커넥터
7.1. JCA 개요
7.2. JBossCX 아키텍쳐의 개요
7.2.1. BaseConnectionManager2 MBean
7.2.2. RARDeployment MBean
7.2.3. JBossManagedConnectionPool MBean
7.2.4. CachedConnectionManager MBean
7.2.5. JCA 리소스 아답터의 골격(Skeleton) 샘플
7.3. JCA 아답터 설정하기
7.3.1. JDBC 데이터소스 설정하기
7.3.2. 범용 JCA 아답터 설정하기
7.3.3. 환경설정 샘플
8. JBoss에서의 보안
8.1. J2EE 선언적 보안 개요
8.1.1. 보안 레퍼런스
8.1.2. 보안 식별성(Identity)
8.1.3. 보안 역할(role)
8.1.4. EJB 메쏘드의 승인(permissions)
8.1.5. 웹 컨텐츠 보안의 제약
8.1.6. JBoss에서 선언적인 보안 활성화시키기
8.2. JAAS의 소개
8.2.1. JAAS란 무엇인가?
8.2.1.1. JAAS 핵심 클래스
8.3. JBoss의 보안 모델
8.3.1. JBoss에서 선언적 보안을 가능하게 하기의 복습
8.4. JBoss 보안 확장 아키텍쳐
8.4.1. JaasSecurityManager가 JAAS를 어떻게 사용하는가
8.4.2. JaasSecurityManagerService MBean
8.4.3. JaasSecurityDomain MBean
8.4.4. XML JAAS 로그인 설정 MBean
8.4.5. JAAS 로그인 설정 관리 MBean
8.4.6. JBossSX 로그인 모듈의 사용과 작성
8.4.6.1. org.jboss.security.auth.spi.IdentityLoginModule
8.4.6.2. org.jboss.security.auth.spi.UsersRolesLoginModule
8.4.6.3. org.jboss.security.auth.spi.LdapLoginModule
8.4.6.4. org.jboss.security.auth.spi.DatabaseServerLoginModule
8.4.6.5. BaseCertLoginModule
8.4.6.6. org.jboss.security.auth.spi.ProxyLoginModule
8.4.6.7. org.jboss.security.auth.spi.RunAsLoginModule
8.4.6.8. org.jboss.security.ClientLoginModule
8.4.7. 커스텀 로그인 모듈 만들기
8.4.7.1. Subject 사용법 패턴을 위한 지원
8.4.7.2. 커스텀 LoginModule 예제
8.4.8. DynamicLoginConfig 서비스
8.5. 안전한 원격 암호(SRP) 프로토콜
8.5.1. SRP를 위한 암호 정보 제공하기
8.5.2. SRP 알고리즘의 내부
8.5.2.1. SRP 예제
8.6. Java 2 보안 관리자를 JBoss에서 동작시키기
8.7. JSSE를 사용하여 JBoss에서 SSL 이용하기
8.8. 방화벽뒤에서 JBoss를 사용하도록 설정하기
8.9. JBoss 서버를 안전하게 하는 방법
8.9.1. jmx-console.war
8.9.2. web-console.war
8.9.3. http-invoker.sar
8.9.4. jmx-invoker-adaptor-server.sar
9. 서블릿 컨테이너 통합하기
9.1. AbstractWebContainer 클래스
9.1.1. AbstractWebContainer 계약(Contract)
9.1.2. AbstractWebContainer 서브클래스 생성하기
9.1.2.1. 쓰레드 컨텍스트 클래스 로더의 사용
9.1.2.2. log4j를 사용한 로깅 통합하기
9.1.2.3. 웹 컨테이너의 인증과 인가를 JBossSX로 위임하기
9.2. JBoss/Tomcat-5 번들 문서
9.2.1. 톰캣의 server.xml 파일
9.2.1.1. Connector
9.2.1.2. Engine
9.2.1.3. Host
9.2.1.4. DefaultContext
9.2.1.5. Logger
9.2.1.6. Valve
9.2.2. JBoss/Tomcat 번들에서 SSL 사용하기
9.2.3. 가상 호스트의 설정
9.2.4. 정적인 컨텐츠 서비스하기
9.2.5. 톰캣을 아파치와 함께 사용하기
9.2.6. 클러스터링 사용하기
10. 기타 MBean 서비스
10.1. 시스템 속성 관리
10.2. 속성 편집기 관리
10.3. 서비스 바인딩 관리
10.3.1. 두 개의 JBoss 인스턴스 동작시키기
10.4. 스케쥴링 업무
10.4.1. org.jboss.varia.scheduler.Scheduler
10.5. JBoss 로깅 프레임워크
10.5.1. org.jboss.logging.Log4jService
10.6. RMI 동적 클래스 로딩
10.6.1. org.jboss.web.WebService
11. CMP 엔진
11.1. 시작하기
11.1.1. 예제 코드
11.1.2. 테스트
11.1.3. Read-ahead
11.2. jbosscmp-jdbc 구조
11.3. 엔티티 빈
11.3.1. 엔티티 매핑
11.4. CMP-필드
11.4.1. CMP-필드 Abstract Accessors
11.4.2. CMP-필드 선언
11.4.3. CMP-필드 컬럼 매핑
11.4.4. 읽기-전용 필드
11.4.5. 엔티티 액세스 감사
11.4.6. 종속 값 클래스(Dependent Value Classes-DVCs)
11.5. 관리되는 관계 컨테이너(Container Managed Relationships)
11.5.1. CMR-필드 추상 액세서(Accessors)
11.5.2. 관계 선언
11.5.3. 관계 매핑
11.5.3.1. 관계 역할 매핑
11.5.3.2. 외래 키(Foreign Key) 매핑
11.5.3.3. Relation-table 매핑
11.6. 질의(Queries)
11.6.1. Finder 와 ejbSelect 선언
11.6.2. EJB-QL 선언
11.6.3. EJB-QL을 SQL 매핑으로 덮어쓰기
11.6.4. JBossQL
11.6.5. DynamicQL
11.6.6. DeclaredSQL
11.6.6.1. 매개변수(Parameters)
11.6.7. EJBQL 2.1 과 SQL92 질의
11.6.8. BMP 커스텀 Finders
11.7. 최적화된 로딩(Optimized Loading)
11.7.1. 로딩 시나리오
11.7.2. 로드 그룹
11.7.3. Read-ahead
11.7.3.1. on-find
11.7.3.2. on-load
11.7.3.3. none
11.8. 로딩 프로세스
11.8.1. Commit 옵션
11.8.2. Eager-loading 프로세스
11.8.3. Lazy loading 프로세스
11.8.3.1. 관계
11.8.4. 느린 로딩 결과셋
11.9. 트랜잭션
11.10. 낙관론적 락킹(Optimistic Locking)
11.11. 엔티티 명령과 프라이머리 키 생성
11.11.1. 기존의 엔티티 명령어
11.12. Defaults
11.12.1. jbosscmp-jdbc.xml defaults 선언 샘플
11.13. 데이터소스 커스터마이제이션
11.13.1. 함수 매핑
11.13.2. 타입 매핑
11.13.3. User 타입 매핑
A. JBoss 그룹과 LGPL 라이센스
A.1. JBoss 그룹에 대하여
A.2. GNU 약소 일반 공중 사용 허가서(LGPL)
B. 책 예제 설치