Antes de Iniciar
Certifique-se de que seu cliente tenha uma referência à interface UserWorkArea,
conforme descrito no tópico Acessando uma Partição UserWorkArea, ou uma referência
a uma partição definida pelo usuário, conforme definido no tópico Acessando uma Partição da Área de
Trabalho Definida pelo Usuário. As etapas a seguir utilizam a partição de UserWorkArea como uma
ilustração. No entanto, uma partição definida pelo usuário pode ser utilizada exatamente
da mesma maneira.
Sobre Esta Tarefa
Em um aplicativo de negócios que utiliza áreas de trabalho, os objetos de servidor
normalmente recuperam as propriedades de área de trabalho e as utilizam para orientar o trabalho local.
Procedimento
- Recupere o nome da área de trabalho ativa para determinar se o
encadeamento de chamada está associado a uma área de trabalho.
Os aplicativos utilizam o método getName na interface UserWorkArea
para recuperar o nome da área de trabalho atual. Se o encadeamento não estiver
associado a uma área de trabalho, o método getName retornará nulo. No exemplo de código a seguir, o nome da área de trabalho corresponde ao
nome da classe na qual a área de trabalho foi começada.
public class SimpleSampleBeanImpl implements SessionBean {
...
public String [] test() {
// Obter a referência de área de trabalho do JNDI.
...
// Recuperar o nome da área de trabalho. Neste exemplo,
// o nome é utilizado para identificar a classe na qual a
// área de trabalho foi começada.
String invoker = userWorkArea.getName();
...
}
}
- Substituindo propriedades da área de trabalho. Os objetos de servidor podem substituir as propriedades da área de trabalho do cliente
criando sua própria área de trabalho aninhada.
Consulte o artigo Substituindo Propriedades da Área de Trabalho para obter informações adicionais.
- Recupere as propriedades de uma área de trabalho utilizando o método get.
O método get é intencionalmente simples; não há exceções declaradas
a serem tratadas. Se não houver área de trabalho ativa ou se essa propriedade não estiver
definida na área de trabalho atual, o método get retornará nulo.
Importante: O método get pode gerar um NotSerializableError no cenário relativamente
raro no qual os clientes CORBA definem tipos de dados compostos e chamam interfaces
de enterprise bean.
O exemplo a seguir mostra a recuperação das propriedades
identificador de site e prioridade pelo SimpleSampleBean. Observe que uma propriedade foi
configurada em uma área de trabalho externa pelo cliente e a outra propriedade foi configurada
na área de trabalho aninhada pelo bean do lado do servidor; o aninhamento é transparente
para a recuperação das propriedades.
public class SimpleSampleBeanImpl implements SessionBean {
public String [] test() {
...
// Começar uma área de trabalho aninhada.
userWorkArea.begin("SimpleSampleBean");
try {
userWorkArea.set("company",
SimpleSampleCompany.London_Development);
}
catch (NotOriginator e) {
}
SimpleSampleCompany company =
(SimpleSampleCompany) userWorkArea.get("company");
SimpleSamplePriority priority =
(SimpleSamplePriority) userWorkArea.get("priority");
...
}
}
- Opcional: Recupere uma lista de todas as chaves
visíveis a partir de uma área de trabalho.
A interface UserWorkArea fornece o método retrieveAllKeys para recuperar
uma lista de todas as chaves visíveis a partir de uma área de trabalho. Esse método
não utiliza argumentos e retorna uma matriz de cadeias. O método retrieveAllKeys retornará
nulo se não houver uma área de trabalho associada ao encadeamento. Se houver uma área de trabalho associada que não contenha propriedades, o método retornará uma matriz de
tamanho 0.
- Consulte o modo de uma propriedade de área de trabalho usando o método getMode.
A interface UserWorkArea fornece o método getMode para determinar o
modo de uma propriedade específica. Esse método utiliza a chave da propriedade como um
argumento e retorna o modo como um objeto PropertyModeType. Se a
chave especificada não existir na área de trabalho, o método retornará PropertyModeType.normal,
indicando que a propriedade pode ser definida e removida sem erro.
- Opcional: Exclua uma propriedade da área de trabalho.
A
interface UserWorkArea fornece o método remove para excluir uma propriedade do escopo atual
de uma área de trabalho. Se a propriedade foi inicialmente
definida no escopo atual, sua remoção excluirá a propriedade. Se a propriedade
foi inicialmente definida em uma área de trabalho circundante, sua remoção excluirá
a propriedade até que o escopo atual esteja concluído. Quando a área de trabalho atual for concluída,
a propriedade excluída será restaurada.
O método remove utiliza a chave da propriedade
como um argumento. Apenas as propriedades com os modos normal e somente leitura podem
ser removidas.
A tentativa de remover uma propriedade fixa cria a exceção PropertyFixed.
A tentativa de remover propriedades em áreas de trabalho originadas em outros
processos cria a exceção NotOriginator.
Exemplo
O lado do servidor do aplicativo SimpleSample de exemplo, que está
incluído no tópico Desenvolvendo Aplicativos que Utilizam Áreas de Trabalho,
aceita chamadas remotas dos clientes. Para cada chamada remota, o servidor também obtém uma área de trabalho do
cliente, caso uma tenha sido criada pelo cliente. A área de trabalho é propagada transparentemente. Nenhum dos métodos remotos inclui a área de trabalho em sua lisa de argumentos.
No
aplicativo de exemplo, os objetos de servidor utilizam a interface da área de trabalho
apenas para fins de demonstração. Por exemplo, o SimpleSampleBean tenta intencionalmente
gravar diretamente em uma área de trabalho importada, que cria a exceção
NotOriginator. Do mesmo modo, o bean tenta intencionalmente mascarar o
SimpleSampleCompany somente leitura, que aciona a exceção PropertyReadOnly. O SimpleSampleBean
também aninha uma área de trabalho e substitui com êxito a propriedade de prioridade
antes de chamar o SimpleSampleBackendBean. Um aplicativo de negócios real extrairia
as propriedades de área de trabalho e as utilizaria para orientar o trabalho local. O SimpleSampleBean
imita isso, gravando uma mensagem que informa que a função é negada quando um pedido
procede de um ambiente de vendas.