Академический Документы
Профессиональный Документы
Культура Документы
Conteúdo
• Conceito de Transação
• Tipos de Transação
© 2002, SoftSite Tecnologia. Todos os direitos reservados
1
Motivação para transações
Operações Atômicas
atômica
• Exemplo: Transferência de dinheiro
– { retirar dinheiro da conta 1
depositar dinheiro na conta 2 }
• Se alguma das operações falhar,a outra
também deve falhar. Elas fazem parte da
mesma transação
2
Transferência de Dinheiro: Código
3
Compartilhamento de dados
Transação: Benefícios
4
ACID
Modelos Transacionais
5
Flat Transactions
Nested Transactions
6
Demarcação de transações
7
Demarcação: Bean
ut.begin();
anotherBean.validateCredit(customerNum);
checkInventory();
Pega referência para
ut.commit(); UserTransaction do
//or ut.rollback();
contexto
doNonTxStuff();
}
Demarcação: XML
© 2002, SoftSite Tecnologia. Todos os direitos reservados
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>Hello</ejb-name>
<home>examples.HelloHome</home>
<remote>examples.Hello</remote>
<ejb-class>examples.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
8
Quem pode demarcar transações no
bean?
Transação em CMP
– <trans-attribute>
• Atributo pode ser especificado para
– Bean
– Método do Bean
• Deve-se especificar os atributos de
transação para:
– Todos os métodos de negócios
– Em entity beans: Métodos Interface Home
(create)
9
Especificando Atributos
• Bean
<container-transaction>
<method>
• Métodos Bean
<container-transaction>
<method>
<ejb-name>Employee</ejb-name>
<method-name>setName</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
Atributos
– RequiresNew
– Supports
– Mandatory
– NotSupported
– Never
10
Atributo Required
• Required
– Deve-se utilizar quando se quer que o bean
sempre seja executado em uma transação.
Atributo RequiresNew
• RequiresNew
– Deve-se utilizar quando se quer que o bean
sempre seja executado em uma nova
© 2002, SoftSite Tecnologia. Todos os direitos reservados
transação.
11
Atributo Supports
• Supports
– Bean só é executado em transação se cliente
já criou uma, caso contrario é executado sem
Atributo Mandatory
• Mandatory
– Exige que já exista uma transação para que
bean seja executado
© 2002, SoftSite Tecnologia. Todos os direitos reservados
• javax.ejb.TransactionRequiredException
• javax.ejb.TransactionRequiredLocalException
12
Atributo NotSupported
• NotSupported
– Bean não pode ser executado em uma
transação. Caso seja chamado em um
Atributo Never
• Never
– Bean não pode ser executado em uma
transação.
© 2002, SoftSite Tecnologia. Todos os direitos reservados
• java.rmi.RemoteException
• javax.ejb.EJBException
13
Restrições Atributos
JTS e JTA
Service)
• Conjunto de interfaces que especificam como
transações são executadas.
• Utilizada por fabricantes de containers.(Suporte não
é obrigatório).
• JTA – Java Transaction API
– Utilizada por desenvolvedores.
• Conjunto de interfaces utilizada para definir
demarcação de transações
• Suporte obrigatório pelo container.
Enterprise Java Beans Pág: 283
14
UserTransaction
• javax.transaction.UserTransaction
– Permite a demarcação de transações
programaticamente.
/**
* Deposits amt into account.
*/
public void deposit(double amt) throws AccountException {
System.out.println("deposit(" + amt + ") called.");
© 2002, SoftSite Tecnologia. Todos os direitos reservados
balance += amt;
}
<tran-atribute> required <tran-atribute/>
/**
* Deposits amt into account.
*/
public void deposit(double amt) throws AccountException {
javax.transaction.UserTransaction userTran = null;
try {
System.out.println("deposit(" + amt + ") called.");
userTran = ctx.getUserTransaction();
userTran.begin();
balance += amt;
userTran.commit();
} Não é feito rollback da variável
catch (Exception e) {
if (userTran != null) userTran.rollback();
throw new AccountException("Deposit failed because of " +
e.toString());
}
}
Enterprise Java Beans Pág: 285
15
Restrições Demarcação Bean
Tem de chamar
UserTransaction!!
public void go() {
mySessionContext.setRollbackOnly();
}
16
Demarcação pelo cliente
try {
Context ctx = new InitialContext(env);
/** The container is required to
Propogação de Transações
• Transações BMT e
CMT propagam-se em
© 2002, SoftSite Tecnologia. Todos os direitos reservados
um bean CMT
• Transação de um
cliente nunca será
utilizada por um bean
BMT
17
Qual demarcação escolher?
• BMT
• Vantagens: Maior controle. Pode-se agrupar
diversos operações menores no método.
• CMT
– EJBContext.setRollbackOnly()
© 2002, SoftSite Tecnologia. Todos os direitos reservados
– EJBContext.getRollbackOnly()
• BMT
– UserTransaction.setRollbackOnly()
– UserTransaction.getStatus()
18
Transações e EntityBeans
• Se pudéssemos, controlaríamos as
transações nos métodos ejbLoad() e
ejbStore()
19
Interface SessionSynchronization
Exemplo: SessionSynchronization
20
Ciclo de vida Stateful Session Bean
– System Exceptions
• System Exceptions
– Acusam erros no servidor ou nos seus serviços
– Java.lang.RuntimeException,
java.rmi.RemoteException e seus subtipos
– Rollback automático
• Application Exceptions
– Consistem de erros de lógica no programa(aplicação)
– Qualquer exceção excluindo System Exceptions
– Não causam rollback automático
21
java.lang.RuntimeException
java.rmi.RemoteException
22
ApplicationExceptions
23
24
© 2002, SoftSite Tecnologia. Todos os direitos reservados © 2002, SoftSite Tecnologia. Todos os direitos reservados
Pág: 302
Pág: 303
Exemplo e Exercício
Segurança
Exercício
Exemplo
• Conceitos segurança
– Autorização
Autenticação e Autorização
25
Controle de Acesso
<assembly-descriptor>
<security-role>
<role-name>Customer</role-name>
</security-role> Definição de
© 2002, SoftSite Tecnologia. Todos os direitos reservados
<security-role> papéis
<role-name>Admin</role-name>
</security-role>
<method-permission>
<unchecked/>
<method> sem autenticação
<ejb-name>ProductEJB</ejb-name>
<method-name>getPrimaryKey</method-name>
</method>
</method-permission>
<method-permission>
<role-name>Admin</role-name> Somente admin pode
<method>
executar métodos do
<ejb-name>ProductEJB</ejb-name>
<method-name>*</method-name> EJB
</method>
<method-permission>
</assembly-descriptor>
26
JAAS
JAAS no JBOSS(JbossSX)
– Arquivos de configuração
• servidor – login-config.xml
• cliente – auth.conf
– Fornece implementações da
javax.security.auth.spi.LoginModule
• Fornece classes de login para cada tipo de
autenticação
• jboss.xml e jboss-web.xml
– <security-domain> específica o domínio JAAS
27
Implementações de LoginModule
• org.jboss.security.ClientLoginModule
– Implementação para o cliente
• org.jboss.security.auth.spi.UsersLoginModule
– Uma das implementações para o servidor
Configurações no Jboss
– login-config.xml em
JBOSS_HOME/server/default/conf/
– Criação de domínios e associação com
módulos de login
• Aplicação
– jboss.xml(se autenticação via web container:
jboss-web.xml)
– Declarar domínio de segurança JAAS
– Clientes standalone é necessário informar
domínio de segurança
Enterprise Java Beans Pág: 311
28
XMLs e JAASSecurityManager
<session>
<ejb-name>SecureHelloEJB</ejb-name>
<jndi-name>login/HelloHome</jndi-name>
</session>
</jboss>
29
Serviço JbossSX
UsersRolesLoginModule
30
Configuração no Cliente
especificado no XML
• login-config.xml
<application-policy name="dominio-cliente">
<authentication>
<login-module
code="org.jboss.security.ClientLoginModule"
flag="required">
</login-module>
</authentication>
</application-policy>
31
Cliente Standalone JAAS para login
JAAS CallBackHandler
© 2002, SoftSite Tecnologia. Todos os direitos reservados
32
Autenticação Jboss
Exemplo JAAS
– build.properties
– lib/users.properties, lib/roles.properties
• Executar
– ant jboss.deploy
– ant run.jboss.client
33
ejb-jar.xml
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>SecureHelloEJB</ejb-name>
<home>examples.HelloHome</home>
Identidade do Principal
• A identidade do cliente(principal) é
propagada durante as chamadas
– Configurável
© 2002, SoftSite Tecnologia. Todos os direitos reservados
<entity>
...
<security-identity>
<use-caller-identity />
<security-identity>
...
</entity>
34
Troca de identidade
Controle programático
35
Alias para papéis no XML
<assembly-descriptor>
<security-role>
if( !ctx.isCallerInRole("admin")) { <role-name>admin</role-name>
… </security-role> ...
… </assembly-descriptor>
Exemplo
Exemplo
© 2002, SoftSite Tecnologia. Todos os direitos reservados
36
Xdoclet
Conteúdo
• O que é Xdoclet
• Tags Xdoclet para ejb
© 2002, SoftSite Tecnologia. Todos os direitos reservados
– ejbdoclet
• Exemplos de Utilização das tags
37
Xdoclet
Tarefa no ANT
<remoteinterface/>
<homeinterface/>
subtarefas
<localhomeinterface/>
<homeinterface/>
<deploymentdescriptor destdir="${xdoclet.gen}" />
<jboss/>
</ejbdoclet> Gera arquivo do
</target>
container
38
Definindo classpath
• Incluir bibliotecas
– XDOCLET_HOME/lib
• Outras
– XDOCLET_HOME/samples/lib
• Jboss-j2ee.jar
• Servlet.jar
• Junit.jar
CountBean.java
/**
* @ejb.bean type="Stateful"
* view-type="both"
* jndi-name="CountHome"
*/
© 2002, SoftSite Tecnologia. Todos os direitos reservados
/**
* Counts up
* @ejb.interface-method
*/
public int count() {
System.out.println("count()");
return ++val;
}
/*
* @ejb.create-method
*/
public void ejbCreate(int val) throws CreateException {
this.val = val;
System.out.println("ejbCreate()");
}
. . .
Enterprise Java Beans Pág: 333
39
Algumas Tags EJB
• @ejb.interface-method
– Declara um método como método de negócios
• @ejb.create-method
Tags de container
– <websphere/>
– <jonas/>
– <weblogic/>
– <jrun/>
– <resin-ejb-xml/> (resin-ejb.xml)
– <orion/> (orion-ejb-jar.xml)
– <hpas/>
40
Gerando Value Objects
/**
* @ejb.bean type="CMP"
* name="ItemBean"
* jndi-name="ejb/ItemBean"
Tem que
Gerando PK
/**
* @ejb.bean type="CMP"
* name="ItemBean" Identifica campo PK
* jndi-name="ejb/ItemBean"
* view-type="both"
© 2002, SoftSite Tecnologia. Todos os direitos reservados
* primkey-field="ID";
* @ejb.pk
*/ Adiciona tag PK
public abstract class ItemBean implements EntityBean
{
//Callback methods
..
/**
* @ejb.create-method
*/
public void ejbCreate( String id )
{
setID( id );
}
/**
* @ejb.interface-method
Identifica método get PK
* @ejb.persistence
* @ejb.pk-field
*/
public abstract String getID();
}
Enterprise Java Beans Pág: 337
41
papéis de segurança e acesso a
métodos
/**
* @ejb.bean type="Stateful"
* view-type="both"
* jndi-name="${user.bean.jndi}"
*
/**
* @ejb.interface-method
* @ejb.permission
* unchecked="true";
*/
public void setUserName( String name )
{
this.name = name;
}
/**
* @ejb.bean type="CMP"
* name="ItemBean"
* jndi-name="ejb/ItemBean"
* view-type="both"
© 2002, SoftSite Tecnologia. Todos os direitos reservados
*
* @ejb.finder signature="java.util.Collection findAll()"
*/
public abstract class ItemBean implements EntityBean {
42
Métodos Home
Relacionamentos
<relationships>
<ejb-relation>
<ejb-relation-name>OwnerToData</ejb-relation-name>
<ejb-relationship-role >
<multiplicity>One</multiplicity>
© 2002, SoftSite Tecnologia. Todos os direitos reservados
<relationship-role-source >
<ejb-name>ch2.Owner</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>data</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role >
<multiplicity>One</multiplicity>
<relationship-role-source >
<ejb-name>ch2.DataBean</ejb-name>
</relationship-role-source> /**
</ejb-relationship-role> * @ejb.interface-method
</ejb-relation> * @ejb.relation
</relationships> name="OwnerToData"
relation-role="Owner"
target-ejb=“examples.DataBean"
*/
public abstract Data getData();
Enterprise Java Beans Pág: 341
43
Tag destination type para MDB
<ejb-jar>
<enterprise-beans>
<message-driven>
<ejb-name>MDB</ejb-name>
<ejb-class>MessageBean</ejb-class>
<ejb-jar>
<enterprise-beans>
<message-driven>
<ejb-name>MDB</ejb-name>
<ejb-class>MessageBean</ejb-class>
© 2002, SoftSite Tecnologia. Todos os direitos reservados
<transaction-type>Container</transaction-type>
<message-selector>
<![CDATA[ messageType = 'buyerRequest' ]]>
</message-selector>
</message-driven>
</enterprise-beans>
<ejb-jar>
/**
* @ejb.bean
* name="MessageBean"
* type="MDB"
* message-selector="<![CDATA messageType = 'buyerRequest']]>"
*/
public class MessageBean
implements MessageDrivenBean, MessageListener {
44
45
© 2002, SoftSite Tecnologia. Todos os direitos reservados
Pág: 344
Exercício
Exercício
Exemplo