Archive

Posts Tagged ‘Tutorial’

Pequeno exemplo de Threads em Java

Compartilhando uma pequena solução utilizada em POCs (provas de conceito) quando preciso demonstrar alguma coisa utilizando Threads, segue um pequeno trecho que pode ser útil para alguém, e certamente para mim mesmo (quem escreve e compartilha – nunca esquece… ou quase isso).

Criei uma classe para ser minha gerenciadora de thread:

package br.com.ibm.threads;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class ThreadExecutorMaganer {
private ExecutorService executor;
private long timeout;

private List<Callable<String>> callables;

public ThreadExecutorMaganer(int maxThreads, long timeoutInSeconds) {
this.executor = Executors.newFixedThreadPool(maxThreads);
this.callables = new ArrayList<Callable<String>>();
this.timeout = timeoutInSeconds;
}

public void add(Callable<String> callable) {
this.callables.add(callable);
}

public List<Future<String>> start() {
List<Future<String>> futures = null;

try {
futures = executor.invokeAll(callables, timeout, TimeUnit.SECONDS);

executor.shutdown();
} catch (InterruptedException e) {
e.printStackTrace();

executor.shutdownNow();
}

return futures;
}

}

Esta é minha Thread em si (veja que tem um IF la com um sleep só pra provocar erro e testar), ela é do tipo Callable;

package br.com.ibm.threads;

import java.util.concurrent.Callable;

public class CallableTask implements Callable<String>{

private final String tarefa;

public CallableTask(String tarefa) {
this.tarefa = tarefa;
}

@Override
public String call() throws Exception {
System.out.println("Inside call-->" + tarefa);
if (tarefa.equals("C")){
System.out.println("Sleeping 6 seconds");
Thread.sleep(6000);
}
return tarefa;
}

}

E esta é minha classe principal que invoca o circo:

package br.com.ibm.threads;

import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

import com.ibm.services.tools.wexws.utils.ThreadExecutorMaganer;

public class CallThreadExecutorMaganer {

public static void main(String[] args) {
String[] restfulUrls = "A,B,C,D,E".split(",");
ThreadExecutorMaganer tem = new ThreadExecutorMaganer(100, 5);

for (String url : restfulUrls) {
tem.add(new CallableTask(url));
}
List<Future<String>> futureResponses = tem.start();

for (Future<String> futureResponse : futureResponses) {
try {
String resp = futureResponse.get();
System.out.println(resp);

}catch (ExecutionException ex){
System.out.println("ExecutionException while getting WEX response="+ex.getCause().getMessage());
}catch (Exception e) {
System.out.println("Fail to query WEX server:"+e.getMessage());
}
}

}

}

Antes que a patrulha critique: É um SIMPLES exemplo, não deve ser utilizado profissionalmente sem uma análise e adequação para seu caso, como tipagens adequadas, tratamento de erros, etc…

Enjoy!

Categorias:JAVA Tags:, , , ,

Reading XML with Java – Quick and simple example

I always need some code to read XML with Java. This is a place holder to me, but, maybe can be useful to other people.

Here is my XML example:

<operator logic="and">
<operator logic="or">
<term field="query" input-type="user" processing="strict" str="は" />
<term field="query" input-type="user" phrase="phrase" processing="strict" str="銀行業務" weight="1" />
<term field="query" input-type="user" processing="strict" str="持つ" />
<term field="query" input-type="user" phrase="phrase" processing="strict" str="java開発者" weight="1.69" />
<term field="query" input-type="user" processing="strict" str="探して" />
</operator>
</operator>

Here is my Java code:

import org.w3c.dom.*;
import org.xml.sax.InputSource;

import javax.xml.parsers.*;
import java.io.*;

public class ParseXML {

	public static void main(String[] args) {
		String xml = "<operator logic=\"or\"><term field=\"query\" input-type=\"user\" processing=\"strict\" str=\"は\" /><term field=\"query\" input-type=\"user\" phrase=\"phrase\" processing=\"strict\" str=\"銀行業務\" weight=\"1\" /><term field=\"query\" input-type=\"user\" processing=\"strict\" str=\"持つ\" /><term field=\"query\" input-type=\"user\" phrase=\"phrase\" processing=\"strict\" str=\"java開発者\" weight=\"1.69\" /><term field=\"query\" input-type=\"user\" processing=\"strict\" str=\"探して\" /></operator>";
		try {	
			Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
			doc.getDocumentElement().normalize();
			
			System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
			NodeList nList = doc.getElementsByTagName("term");
			System.out.println("----------------------------");
			for (int temp = 0; temp < nList.getLength(); temp++) {
				Node nNode = nList.item(temp);
				System.out.println("\nCurrent Element :" + nNode.getNodeName());
				if (nNode.getNodeType() == Node.ELEMENT_NODE) {
					Element eElement = (Element) nNode;
					System.out.println("processing : " + eElement.getAttribute("processing"));
					System.out.println("str : " + eElement.getAttribute("str"));
	            }
	         }
	      } catch (Exception e) {
	         e.printStackTrace();
	      }
	}
}
Categorias:JAVA Tags:, , , , , , ,

Introdução a Big Data e Apache Solr

Para quem está interessado em Big Data e além disso quer algo prático utilizando Apache Solr, disponibilizo um conjunto de slides que podem ser utilizados por Estudantes, Professores e profissionais. Usem e distribuam a vontade!

Criando um Web Service Restful com Jersey

Criei um conjunto de slides bem simples e objetivo com o passo a passo para se criar um Web Service RESTful utilizando a API Jersey. Para quem quer conhecer esse mundo, acredito que vá ajudar bastante.

Tenha em mente que implementar um Web Service é relativamente simples, porém, preocupe-se sempre com a segurança e volumetria (carga, stress, usuários, etc), pois isso tende a derrubar muito servidor por ai!

Enjoy!

Criando um CRUD com Ionic e SQLite para IPhone e Android)

No conjunto de slides abaixo mostro um passo a passo de como criar uma aplicação móvel hibrida, que deverá rodar em Android e IPhone, utilizando o framework Ionic (Cordova, Angular, Bootstrap) e acessando um banco SQLite, e efetuará as operações de CRUD (Create, Retrieve, Update e Delete).

O código fonte encontra-se no meu GitHub.

Enjoy!

Passo a passo para a criação de uma aplicação híbrida para IPhone e Android

Criei uma apresentação com o passo a passo para a criação de uma aplicação híbrida para IPhone e Android, utilizando o framework Ionic (Angular + Cordova + Bootstrap).

Nela, iremos criar uma simples aplicação que se conecta em um feed Json do WordPress e lista os posts deste blog. Iremos testar no navegador e no Android. Eis a apresentação.

Para quem quer ver um pouco mais sobre os conceitos antes de partir para esta implementação, veja meu post anterior, que contém esta apresentação:

Apresentação sobre Desenvolvimento Móvel Híbrido

A apresentação a seguir mostra alguns conceitos sobre desenvolvimento móvel hibrido e exemplos de AngulaJS e um projeto Ionic. Vale a pena para quem quer entrar para este mundo. Enjoy!