Seminário Tecgraf - Tecgraf JIRA / Confluence - PUC-Rio

Propaganda
SDK Openbus - Java
Tecgraf PUC-Rio
Setembro de 2013
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
Libs do SDK Openbus 2.0.0.0
• Openbus:
• openbus-sdk-core-2.0.0.0.jar
• openbus-sdk-legacy-2.0.0.0.jar
• openbus-sdk-demo-util-2.0.0.0.jar
• Jacorb:
• jacorb-3.1.jar
• slf4j-api-1.6.4.jar
• slf4j-jdk14-1.6.4.jar
• SCS:
• scs-core-1.2.1.1.jar
• ANT:
• ant-1.8.2.jar
• ant-launcher-1.8.2.jar
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
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
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
– iniciar a execução do ORB
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);
}
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);
}
return Assistant.createWithPrivateKey(host, port, entity,
privateKey);
}
Registrar a oferta de serviço
ServiceProperty[] serviceProperties = new ServiceProperty[] {
new ServiceProperty("offer.domain", "Demo Hello") };
assistant.registerService(component, serviceProperties);
Instalar o ShutdownHook
Thread shutdown = new Thread() {
@Override
public void run() {
assistant.shutdown();
orb.shutdown(true);
orb.destroy();
}
};
Runtime.getRuntime().addShutdownHook(shutdown);
Iniciar a execução do ORB
Thread run = new Thread() {
@Override
public void run() {
orb.run();
}
};
run.start();
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)
Conectando com usuário e senha
final Assistant assistant = Assistant.createWithPassword(host, port,
login, password.getBytes());
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) {
if (offerDesc.service_ref._non_existent()) {
System.out.println(“Um serviço encontrado encontra-se
indisponível.");
continue;
}
return offerDesc.service_ref;
}
System.out.println("Nenhuma oferta válida foi encontrada.");
System.exit(1);
Download