SDK Openbus - Java
Tecgraf PUC-Rio
Fevereiro de 2014
Versão 3 – fevereiro/2014
Passo 1: Obtendo o SDK Openbus
• A última versão do SDK Java do Openbus
pode ser obtida em:
• http://www.tecgraf.puc-rio.br/openbus
• Precisaremos também do JDK 1.6 ou
superior
Versão 3 – fevereiro/2014
Libs do SDK Openbus 2.0.0.2
• Openbus:
• openbus-sdk-core-2.0.0.2.jar
• openbus-sdk-legacy-2.0.0.2.jar
• Jacorb:
• jacorb-3.3.jar
• slf4j-api-1.6.4.jar
• slf4j-jdk14-1.6.4.jar
• SCS:
• scs-core-1.2.1.2.jar
Versão 3 – fevereiro/2014
Passo 2: Preparando os stubs e skeletons
• Usaremos como base a mesma IDL do
exemplo StockMarket mostrado no
exercício do SCS
• Compilar a IDL
• Compilar o código Java das classes geradas
pelo compilador IDL e das classes que
implementam as facetas descritas na IDL
Versão 3 – fevereiro/2014
Passo 3: Implementando as facetas do componente
• O componente StockSeller possui duas facetas:
• StockServer
• StockExchange
• As classes StockServerImpl e
StockExchangeImpl implementam,
respectivamente, cada uma dessas facetas
• Opcionalmente, para compartilhar o estado
entre as duas facetas, teremos implementada
a classe StockSellerContext de contexto do
componente
Versão 3 – fevereiro/2014
Passo 4: Implementando um Servidor
• Um programa servidor se encarrega de:
– realizar a conexão por certificado
– criar o componente que implementa as
facetas necessárias
– registrar uma oferta de serviço
– instalar um ShutdownHook para
desconectar do barramento antes de
finalizar a aplicação
– manter ativa a execução do ORB
Versão 3 – fevereiro/2014
Fluxo principal do servidor
public static void main(String[] args) throws IOException, InvalidName, AdapterInactive, SCSException {
// Lê arquivo de propriedades
Properties props = loadProperties();
// Cria um assistente do OpenBus
final Assistant assistant = connectWithOpenBus(props);
final ORB orb = assistant.orb();
POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
poa.the_POAManager().activate();
// Dispara uma thread para garantir o recebimento de chamadas pelo ORB
Thread run = new Thread() {
@Override
public void run() {
orb.run();
}
};
run.start();
// Adiciona uma thread a ser executada em caso de término do processo. Essa thread faz a desconexão com o
// barramento.
Thread shutdown = new Thread() {
@Override
public void run() {
assistant.shutdown();
orb.shutdown(true);
orb.destroy();
}
};
Runtime.getRuntime().addShutdownHook(shutdown);
// Cria componente
IComponent component = createComponent(orb, poa);
// Registra o serviço no barramento
ServiceProperty[] serviceProperties = new ServiceProperty[] { new ServiceProperty(“my property", “<value>") };
assistant.registerService(component, serviceProperties);
}
Versão 3 – fevereiro/2014
Fazer a conexão por certificado
private static Assistant connectWithOpenBus(Properties props) {
String host = props.getProperty("host.name");
int port = Integer.parseInt(props.getProperty("host.port"));
String entity = props.getProperty("seller.name");
String privateKeyFile = props.getProperty("seller.key");
PrivateKey privateKey = null;
try {
privateKey = OpenBusPrivateKey.
createPrivateKeyFromFile(privateKeyFile);
}
catch (Exception e) {
System.out.println("O caminho da chave privada deve apontar
para uma chave válida.");
e.printStackTrace();
System.exit(1);
}
…
Versão 3 – fevereiro/2014
Fazer a conexão por certificado
…
AssistantParams params = new AssistantParams();
params.callback = new OnFailureCallback() {
@Override
public void onStartSharedAuthFailure(Assistant arg0, Throwable arg1) {
System.out.println("Erro na tentativa de login por autenticação
compartilhada: " + arg1);
}
@Override
public void onRegisterFailure(Assistant arg0, IComponent arg1,
ServiceProperty[] arg2, Throwable arg3) {
System.out.println("Erro na tentativa de registro de oferta: " + arg3);
}
@Override
public void onLoginFailure(Assistant arg0, Throwable arg1) {
System.out.println("Erro na tentativa de login: " + arg1);
}
}
@Override
public void onFindFailure(Assistant arg0, Throwable arg1) {
System.out.println("Erro na tentativa de busca: " + arg1);
}
};
return Assistant.createWithPrivateKey(host, port, entity, privateKey,
params);
Versão 3 – fevereiro/2014
Registrar a oferta de serviço
ServiceProperty[] serviceProperties = new ServiceProperty[] {
new ServiceProperty("offer.domain", “StockMarket") };
assistant.registerService(component, serviceProperties);
Versão 3 – fevereiro/2014
Instalar o ShutdownHook
Thread shutdown = new Thread() {
@Override
public void run() {
assistant.shutdown();
orb.shutdown(true);
orb.destroy();
}
};
Runtime.getRuntime().addShutdownHook(shutdown);
Versão 3 – fevereiro/2014
Iniciar thread para manter a execução do ORB
Thread run = new Thread() {
@Override
public void run() {
orb.run();
}
};
run.start();
Versão 3 – fevereiro/2014
Passo 5: Implementando o Cliente
• O programa cliente se encarrega de:
– Conectar com o Openbus através de
usuário e senha
– Buscar pelo(s) serviço(s) que procura
– Utilizar o(s) serviço(s)
Versão 3 – fevereiro/2014
Conectando com usuário e senha
AssistantParams params = new AssistantParams();
params.callback = new OnFailureCallback() {
@Override
public void onStartSharedAuthFailure(Assistant arg0, Throwable arg1) {
System.out.println("Erro na tentativa de login por autenticação compartilhada: " +
arg1);
}
@Override
public void onRegisterFailure(Assistant arg0, IComponent arg1, ServiceProperty[] arg2,
Throwable arg3) {
System.out.println("Erro na tentativa de registro de oferta: " + arg3);
}
@Override
public void onLoginFailure(Assistant arg0, Throwable arg1) {
System.out.println("Erro na tentativa de login: " + arg1);
}
@Override
public void onFindFailure(Assistant arg0, Throwable arg1) {
System.out.println("Erro na tentativa de busca: " + arg1);
}
};
final Assistant assistant = Assistant.createWithPassword(host, port, login,
password.getBytes(), params);
Versão 3 – fevereiro/2014
Procurando pelas facetas
private static IComponent findStockSeller(Assistant assistant,
String offerEntity) {
// busca por serviço
ServiceProperty[] properties = new ServiceProperty[3];
properties[0] = new ServiceProperty("openbus.offer.entity",
offerEntity);
properties[1] = new ServiceProperty(
"openbus.component.interface", StockServerHelper.id());
properties[2] = new ServiceProperty(
"openbus.component.interface", StockExchangeHelper.id());
ServiceOfferDesc[] services = new ServiceOfferDesc[0];
try {
services = assistant.findServices(properties, -1);
}
catch (ServiceFailure e) {…}
catch (TRANSIENT e) {…}
catch (COMM_FAILURE e) {…}
catch (NO_PERMISSION e) {
if (e.minor == NoLoginCode.value) {…}
catch (Throwable e) {…}
}
// analiza as ofertas encontradas
for (ServiceOfferDesc offerDesc : services) {
try {
if (offerDesc.service_ref._non_existent()) {
System.out.println(“Um serviço encontrado encontra-se
indisponível.");
continue;
}
catch (Exception e) { continue; }
return offerDesc.service_ref;
}
System.out.println("Nenhuma oferta válida foi encontrada.");
System.exit(1);
Versão 3 – fevereiro/2014
Download

SDK Java OpenBus - Tecgraf JIRA / Confluence - PUC-Rio