Sumário
Introdução ... 23
Parte Um
Visão geral ...
27
Capítulo 1 Visão geral ... 29
A motivação para o EJB ... 29
Dividir para conquistar ao extremo ... 30
Arquiteturas de componentes ... 35
Introdução aos Enterprise JavaBeans ... 36
Por que Java? ... 37
EJB como uma solução de negócio ... 37
O ecossistema EJB ... 39
O provedor de beans ... 39
O montador de aplicação ... 40
O instalador de EJB ... 40
O administrador de sistema ... 41
O provedor de contêiner e servidor ... 41
Os fornecedores de ferramenta ... 41
Resumo dos papéis ... 42
O Java 2 Platform, Enterprise Edition (J2EE) ... 43
As tecnologias do J2EE ... 44
Resumo ... 46
Capítulo 2 Os fundamentos do EJB ... 47
Enterprise beans ... 47
Tipos de beans ... 48
Objetos distribuídos: A fundação do EJB ... 49
Objetos distribuídos e middleware ... 50
Middleware explícito ... 50
Middleware implícito ... 52
O que constitui um enterprise bean? ... 53
A classe enterprise bean ... 53
O objeto EJB ... 54
O objeto home ... 57
As interfaces locais ... 60
Os descritores de instalação ... 62
Arquivos específicos do fornecedor ... 63
O arquivo Ejb-Jar ... 63
Resumo de termos ... 64
Capítulo 3 Como escrever seu primeiro bean ... 67
Como desenvolver um componente EJB ... 67
A interface remota ... 68
A interface local ... 68
A interface home ... 69
A interface home local ... 70
A classe bean ... 70
O descritor de instalação ... 74
Os arquivos específicos do fornecedor ... 76
O arquivo Ejb-jar ... 76
Instalação do bean ... 77
O arquivo JAR Client EJB opcional ... 77
Entenda como chamar beans ... 78
Como pesquisar um objeto home ... 79
Execução do sistema ... 80
A saída do lado do servidor ... 82
A saída do lado do cliente ... 83
Implementação de interfaces de componente ... 83
Uma solução ... 83
Resumo ... 84
Parte Dois A tríade dos beans ...
85
Capítulo 4 Introdução aos beans de sessão ... 87
Tempo de vida de bean de sessão ... 87
Os subtipos de bean de sessão ... 88
Beans de sessão com informações de estado ... 88
Beans de sessão sem informações de estado ... 88
Características especiais de beans de sessão com informações de estado ... 89
Como alcançar o efeito de pool com beans com informações de estado 89 As regras do estado conversacional ... 90
Chamadas de ativação e a passivação ... 91
Resumo de implementação de método ... 94
Um bean de sessão com informações de estado simples ... 94
Diagramas de ciclo de vida para beans de sessão ... 102
Resumo ... 104
Capítulo 5 Introdução aos beans de entidade ... 105
Conceitos de persistência ... 105
Serialização de objeto Java ... 105
Mapeamento objeto-relacional ... 106
Bancos de dados de objeto ... 107
O que é um bean de entidade ... 108
Sobre os arquivos que compõem um bean de entidade ... 109
Características dos beans de entidade ... 110
Beans de entidade sobrevivem a falhas ... 110
As instâncias de bean de entidade são uma visualização em um banco de dados ... 110
Várias instâncias de um bean de entidade podem representar os mesmos dados subjacentes ... 111
As instâncias de um bean de entidade podem ser organizadas em pool 112 Há duas maneiras de fazer beans de entidade persistirem ... 114
Criação e remoção de beans de entidade ... 115
Beans de entidade podem ser localizados ... 116
Contextos de entidade ... 118
getEJBLocalObject() / getEJBObject() ... 119
getPrimaryKey() ... 119
Resumo ... 120
Capítulo 6 Como escrever beans de entidade persistentes gerenciados por beans ... 121
Princípios básicos de codificação de bean de entidade ... 121
Localização de beans de entidade existentes: ejbFind() ... 122
Exemplo de persistência gerenciada por beans: Uma conta bancária ... 127
Account.java ... 127 AccountLocal.java ... 128 AccountHome.java ... 128 AccountLocalHome.java ... 129 AccountPK.java ... 130 AccountBean.java ... 133 AccountException.java ... 144 Client.java ... 147 Descritor de instalação ... 147
Descritor de instalação específico de contêiner ... 147
Configuração do banco de dados ... 148
Execução do programa cliente ... 149
Saída do lado do servidor ... 149
Saída do lado do cliente ... 150
Vamos juntar tudo: percurso do ciclo de vida de um bean de entidade BMP . 150 Resumo ... 152
Capítulo 7 Como escrever beans de entidade persistentes gerenciados por contêiner ... 153
Recursos de beans de entidade CMP ... 153
Beans de entidade CMP são definidos como subclasse ... 153
Beans de entidade CMP têm campos não-declarados ... 154
Métodos get/set CMP são definidos na subclasse ... 154
Beans de entidade CMP têm um esquema de persistência abstrato ... 157
Beans de entidade CMP têm uma linguagem de consulta ... 158
Beans de entidade CMP podem ter métodos ejbSelect() ... 159
Diretrizes de implementação para persistência gerenciada por contêiner ... 160
Exemplo de persistência gerenciada por contêiner: Uma linha de produto ... 163
Product.java ... 163 ProductLocal.java ... 164 ProductHome.java ... 164 ProductLocalHome.java ... 165 ProductPK.java ... 165 ProductBean.java ... 166 Descritor de instalação ... 173
Descritor de instalação específico de contêiner ... 173
Client.java ... 176
Execução do programa cliente ... 176
O ciclo de vida de um bean de entidade CMP ... 179
Resumo ... 180
Capítulo 8 Introdução aos beans baseados em mensagem ... 181
Motivação para utilizar os beans baseados em mensagem ... 181
O Java Message Service (JMS) ... 183
Domínios de troca de mensagens ... 183
A JMS API ... 184
O que é um bean baseado em mensagem ... 189
Desenvolvimento de beans baseados em mensagem ... 191
A semântica ... 191
Um exemplo simples ... 192
Conceitos avançados ... 197
Armadilhas de beans baseados em mensagem ... 199
Ordenamento de mensagem ... 199
Chamadas ejbRemove() perdidas ... 199
Mensagens malformatadas ... 200
Como retornar resultados aos produtores da mensagem ... 202
O futuro: Invocações de método assíncronas ... 206
Resumo ... 207
Capítulo 9 Adicione funcionalidade a seus beans ... 209
Como chamar beans a partir de outros beans ... 209
Pesquisas padrão de JNDI ... 209
Entenda as referências de EJB ... 210
Fábricas de recursos ... 212
Propriedades de ambiente ... 213
Entenda a segurança no EJB ... 215
Primeiro passo de segurança: Autenticação ... 216
Segundo passo de segurança: Autorização ... 225
Propagação de segurança ... 232
Entenda as alças ... 234
Alças home ... 235
Resumo ... 235
Parte Três Conceitos avançados de Enterprise
JavaBeans ... 237
Capítulo 10 Transações ... 239
Motivação para as transações ... 239
Operações atômicas ... 239
Falha de rede ou de máquina ... 240
Dados compartilhados por múltiplos usuários ... 241
Benefícios das transações ... 241
Propriedades ACID ... 242
Modelos transacionais ... 244
Transações planas ... 244
Transações aninhadas ... 246
Outros modelos transacionais ... 246
Como alistar transações com o Enterprise JavaBeans ... 247
Abstração do sistema de transação subjacente ... 247
Transações programáticas, declarativas e iniciadas pelo cliente ... 247
Escolha um estilo de transação ... 250
Transações gerenciadas por contêiner ... 252
Valores de atributo de transação EJB ... 253
Transações programáticas no EJB ... 257
Object Transaction Service (OTS) do CORBA ... 257
O Java Transaction Service (JTS) ... 258
A Java Transaction API (JTA) ... 258
Exemplo de transações programáticas versus declarativas ... 259
Transações a partir do código de cliente ... 262
Isolamento transacional ... 263
Isolamento e EJB ... 264
O problema da leitura suja ... 264
O problema da leitura não-repetível ... 266
O problema do fantasma ... 267
Resumo de isolamento de transação ... 267
Isolamento e EJB ... 267
Controle de concorrência otimista e pessimista ... 268
Transações distribuídas ... 269
A durabilidade e o protocolo de confirmação de duas fases ... 270
O protocolo de comunicação transacional e os contextos de transação 270 Como projetar conversas transacionais no EJB ... 272
Resumo ... 273
Capítulo 11 Relacionamentos com BMP e CMP ... 275
Diferença entre CMP e BMP ... 275 Cardinalidade ... 276 Relacionamentos 1:1 ... 276 Relacionamentos 1:N ... 281 Relacionamentos M:N ... 284 Direcionalidade ... 290
Implementação da direcionalidade com o BMP ... 291
Implementação da direcionalidade com o CMP ... 292
A direcionalidade pode não mapear para esquemas de banco de dados 293 Bidirecional ou unidirecional? ... 294
Carregamento retardado ... 295
Agregação versus composição e exclusões em cascata ... 295
Relacionamentos e EJB-QL ... 297
Relacionamentos recursivos ... 298
Relacionamentos circulares ... 298
Integridade referencial ... 299
Relacionamentos, integridade referencial e código do cliente ... 300
Resumo ... 302
Capítulo 12 Melhores práticas de persistência ... 303
Quando utilizar beans de entidade ... 303
Controle ... 303
A analogia da passagem de parâmetro ... 304
Procedural versus orientado a objetos ... 304
Armazenamento em cache ... 304
Imposição da independência de esquema ... 305
Facilidade de uso ... 305
Migração ... 305
Desenvolvimento rápido de aplicações ... 305
Como escolher entre CMP e BMP ... 306
Redução de código e desenvolvimento rápido de aplicações ... 306
Desempenho ... 306
Bugs ... 306
Controle ... 307
Servidor de aplicações e independência de banco de dados ... 307
Relacionamentos ... 307
Curva de aprendizagem e custo ... 308
Como escolher a granularidade certa para beans de entidade ... 308
Dicas e truques de persistência ... 309
Cuidado com a não-correspondência de impedância objeto-relacional . 309 SQL hard-coded versus soft-coded ... 309
Quando utilizar procedures armazenadas ... 310
Utilize seu modelo de objeto do EJB para orientar o modelo de dados . 312
Siga um bom processo de projeto de dados ... 313
Utilize chaves substitutas ... 313
Entenda os impactos de atualizações em banco de dados ... 314
Controle de versão dos componentes EJB ... 314
Como viver com um projeto de banco de dados legado ... 315
O tratamento de grandes conjuntos de resultados ... 320
Resumo ... 322
Capítulo 13 Melhores práticas e otimizações de desempenho em EJB ... 323
Quando utilizar informações de estado versus informações sem estado ... 323
Quando utilizar troca de mensagens versus RMI-IIOP ... 324
Como garantir um tempo de resposta com planejamento de capacidade ... 327
Como conseguir singletons com EJB ... 328
Empacote beans de entidade com beans de sessão ... 328
Como fazer o ajuste fino de beans de entidade ... 329
Escolha entre interfaces locais e remotas ... 330
Como depurar questões do EJB ... 331
Como particionar seus recursos ... 332
Como fazer a montagem dos componentes ... 332
Desenvolvimento de componentes que sejam reutilizáveis ... 333
Quando utilizar XML em um sistema de EJB ... 334
Integração de legados com o EJB ... 334
Resumo ... 336
Capítulo 14 Clusters ... 337
Visão geral de sistemas de larga escala ... 337
O que é um sistema de larga escala ... 337
Terminologia básica ... 338
Como particionar seus clusters ... 339
Instrumentalização de EJBs clusterizados ... 342
Como clusterizar EJBs ... 342
Conceito de idempotência ... 343
Clustering de beans de sessão sem informações de estado ... 344
Clustering de beans de sessão com informações de estado ... 346
Clustering de beans de entidade ... 347
Clustering de beans baseados em mensagem ... 350
Outras questões de clustering de EJB ... 351
Primeiro contato ... 351
Lógica de acesso inicial ... 351
Resumo ... 352
Capítulo 15 Inicie seu projeto com EJB de maneira correta ... 353
Faça um levantamento dos requisitos do negócio ... 353
Decida se o J2EE é apropriado ... 353
Decida se o EJB é apropriado ... 354
Monte a equipe do seu projeto ... 356
Projete seu modelo de objetos completo ... 357
Implemente uma fatia vertical simples ... 357
Escolha um servidor de aplicações ... 359
Divida a sua equipe ... 360
Invista em ferramentas ... 360
Invista em um processo de construção padrão ... 361
Próximos passos ... 362
Capítulo 16 Como escolher um servidor EJB ... 363
A marca J2EE 1.3 ... 363
JRE plugável ... 364
Ferramentas de conversão ... 364
Mapeamentos complexos ... 364
Suporte a driver de JDBC de fornecedores independentes ... 364
Carregamento retardado ... 364
Gravações de banco de dados diferidas ... 364
Provedores de persistência plugáveis ... 365
Cache de dados na memória ... 365
Suporte de camada integrada ... 365
Escalabilidade ... 365
Alta disponibilidade ... 366
Segurança ... 366
Integração com IDE ... 366
Integração com editores UML ... 367
Balanceamento de carga inteligente ... 367
Fail-over transparente sem informações de estado ... 367
Clustering ... 367
Java Management Extension (JMX) ... 368
Suporte administrativo ... 368
Instalação a quente ... 368
Pool de instâncias ... 368
Geração automática de EJB ... 368
Desligamento limpo ... 369
Instalação em tempo real ... 369
Transações distribuídas ... 369
Arquitetura de troca de mensagens superior ... 369
Componentes EJB fornecidos ... 370
J2EE Connector Architecture (JCA) ... 370
Serviços de Web ... 370 Fluxo de trabalho ... 370 Código-fonte aberto ... 371 Serviços especializados ... 371 Critérios não-técnicos ... 371 Resumo ... 372
Capítulo 17 Integração EJB-J2EE: Como construir uma aplicação completa ... 373
Problema do negócio ... 373
Uma visualização do site da Web final ... 374
Como determinar o escopo dos requisitos técnicos ... 377
O modelo de objetos para a camada da lógica do negócio ... 377
Modelo de objetos para a camada da apresentação ... 382
Exemplo de código ... 387
Parte Quatro Apêndices... 395
Apêndice A Tutorial de RMI-IIOP e JNDI ... 397
Java RMI-IIOP ... 397
Invocações de método remotas ... 398
A interface remota ... 399
A implementação de objeto remoto ... 400
Stubs e esqueletos ... 402
Serialização de objeto e passagem de parâmetro ... 403
Como passar por valor ... 403
Serialização de objeto ... 404
O que você deve tornar transitório? ... 405
Serialização de objeto e RMI-IIOP ... 405
A Java Naming and Directory Interface (JNDI) ... 408
Serviços de nomeação e de diretório ... 408
Problemas de nomeação e diretórios ... 409
Entra em cena a JNDI ... 410
Benefícios da JNDI ... 410
Arquitetura da JNDI ... 410
Conceitos de JNDI ... 411
Como programar com a JNDI ... 414
Integração entre RMI-IIOP e JNDI ... 416
Como vincular um servidor de RMI-IIOP com JNDI ... 417
Como pesquisar um servidor de RMI-IIOP com JNDI ... 417
Resumo ... 419
Apêndice B Interoperabilidade com o CORBA ... 421
O que é CORBA ... 421
O CORBA como base para o EJB ... 421
Por que devo me preocupar com o CORBA? ... 422
Desvantagens do CORBA ... 422
Entenda como o CORBA funciona ... 422
Object Request Brokers ... 423
A Interface Definition Language do OMG ... 423
A IDL OMG mapeia para linguagens concretas ... 425
Invocações estáticas do CORBA ... 425
Os muitos serviços do CORBA ... 427
A necessidade do RMI-IIOP ... 427
A necessidade da interoperabilidade de RMI-CORBA ... 427
Combinação entre RMI e CORBA ... 428
Passos para RMI e CORBA trabalharem juntos: Uma visão geral ... 432
Cliente de RMI-IIOP com uma implementação de objeto CORBA ... 432
Cliente de CORBA com uma implementação de objeto RMI-IIOP ... 432
Como inicializar com RMI-IIOP e CORBA ... 433
Visão geral: CORBA e EJB juntos ... 433
Exemplo de código ... 434
Resumo ... 435
Apêndice C Referência para descritores de instalação ... 437
Como ler uma DTD ... 437
O elemento header e root ... 438
Definição de beans de sessão ... 439
<session> ... 439
Definição de beans de entidade ... 441
<entity> ... 441
<query> ... 443
<query-method> ... 444
<method-params> ... 444
Definição de beans baseados em mensagem ... 445
<message-driven> ... 445
<message-driven-destination> ... 446
Definição de propriedades de ambiente ... 446
<env-entry> ... 447
Definição de referências de EJB ... 447
<ejb-ref> ... 448 <ejb-local-ref> ... 449 Definição da segurança ... 449 <security-role-ref> ... 449 <security-identity> ... 450 <run-as> ... 450
Definição das fábricas de recurso ... 450
<resource-ref> ... 451 <resource-env-ref> ... 451 Definição de relacionamentos ... 452 <relationships> ... 453 <ejb-relation> ... 453 <ejb-relationship-role> ... 453 <relationship-role-source> ... 454 <cmr-field> ... 454
Definição do descritor de assembly ... 455
<assembly-descriptor> ... 456 <security-role> ... 456 <method-permission> ... 456 <container-transaction> ... 457 <exclude-list> ... 457 <method> ... 458 <method-params> ... 458
Apêndice D A EJB Query Language (EJB-QL) ... 459
Visão geral ... 459
Um exemplo simples ... 459
O poder dos relacionamentos ... 461
A sintaxe de EJB-QL ... 461 A cláusula FROM ... 462 A cláusula WHERE ... 463 A cláusula SELECT ... 465 Tabelas verdade ... 468 Nota final ... 469 Resumo ... 469
Apêndice E Guia de referência rápida sobre o EJB ... 471
Diagramas de beans de sessão ... 471
Diagramas de beans de sessão sem informações de estado ... 472
Diagramas de bean de sessão com informações de estado ... 474
Diagramas de bean de entidade ... 477
Diagramas de bean controlado por mensagem ... 482
Referência de API EJB ... 484
EJBContext ... 484
EJBHome ... 485
EJBLocalHome ... 485
EJBLocalObject ... 486
EJBObject ... 487 EnterpriseBean ... 488 EntityBean ... 488 EntityContext ... 488 Handle ... 492 HomeHandle ... 492 MessageDrivenBean ... 492 MessageDrivenContext ... 493 SessionBean ... 493 SessionContext ... 495 SessionSynchronization ... 495
Referência para exceções ... 496
Referência para transação ... 497