Software Developer

Instalando Node.Js e npm no Linux – Projeto Owl Links.

Esse semana eu iniciei o desenvolvimento do dashboard do projeto Owl Links.

Eu vou usar a stack JavaScript para desenvolver o front-end desse projeto, o back-end foi escrito em Go.

Instalando o Node.js e npm

Para instalar o Node e o npm execute os comandos abaixo no terminal.

Eu estou usando uma versão 64 bits do Linux.

[code lang=bash]
wget -P ${HOME}/Downloads http://nodejs.org/dist/v0.12.0/node-v0.12.0-linux-x64.tar.gz
sudo tar xzf ${HOME}/Downloads/node-v0.12.0-linux-x64.tar.gz -C ${HOME}/Downloads
sudo cp -rp ${HOME}/Downloads/node-v0.12.0-linux-x64 /usr/local/
[/code]

Crie um link simbólico para o Node e o npm.

[code lang=bash]
cd /usr/local/bin/
sudo ln -s /usr/local/node-v0.12.0-linux-x64/bin/node node
sudo ln -s /usr/local/node-v0.12.0-linux-x64/bin/npm npm
[/code]

Verifique a instalação.

[code lang=bash]
nodejs -v
v0.12.0
npm -v
2.5.1
[/code]

Mais detalhes em https://nodejs.org/ e https://www.npmjs.com/.

Instalando outras ferramentas

JavaScript é fantástico, é um ecossistema incrível pra desenvolver aplicações web.

Eu não vou entrar em detalhes sobre cada ferramenta nesse momento, mas é sensacional, Yeoman, Grunt, Gulp e Bower é tudo o que você precisar para ter um ambiente fast-fire.

Eu vou instalar essas dependências globalmente com no npm.

[code lang=bash]
npm install -g yo bower grunt-cli gulp
npm install -g generator-angular
[/code]

A medida que eu ir construído e configurando esse ambiente eu vou postando as novidades.

Owl Links – Release 0.0.1

Eu estou muito contente em anunciar o projeto Owl Links, a versão 0.0.1 está disponível http://owl-links.herokuapp.com/.

O projeto tem como objetivo compartilhar links(sites) com conteúdo relacionado tecnologia, principalmente a programação de sistemas.

A principal feature disponível nessa versão é a newslatter que irá notificar os assinantes a cada 3 novos links ranqueados.

Outros recursos interessantes são:

  • Possibilidade de fazer sugestão de links (disponível na tela inicial), se você encontrou um site legal envie o link para ser compartilhado.

  • API REST que disponibiliza todos os links cadastrados através de uma URI em formato JSON.

Eu convido você a conhecer o projeto assinando a newslatter.

O código fonte do projeto foi escrito utilizando o Play Framework e está disponível nesse link. Foi escrito uma API em Go para admin, o código está disponível nesse link.

Att.
Johni Douglas Marangon

Seed project WebService for Java

I am doing small webservices projects in Java and create a bootstrap seed to save time.

I will describe steps to write your skeleton project with basic HTTP methods and XML e JSON consume/produces media types.

Important: You need send in Header HTTP the value to parameters Accept and Content-Type. The values granted is application/json or application/xml.

We go to use Jersey – RESTful Web Services in Java framework.

The complete source code and more instructions for use here.

Step one: Configure dependencies in the Maven.
File: pom.xml

[code lang=xml]
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
[/code]

Step two: Configure web.xml.
File: web.xml

[code lang=xml]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>api</display-name>
<servlet>
<servlet-name>br.com.api.services.AppWebService</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
[/code]

Step tree: Create a application class called AppWebService.

[code lang=java]
@ApplicationPath("/v1")
public class AppWebService extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(BierService.class);
return classes;
}
}
[/code]

Step five: Create a model class called Bier.

[code lang=java]
@XmlRootElement()
public class Bier {
private Integer id;
private String name;
private String brewery;
private Type type;

public Bier(Integer id, String name, String brewery, Type type) {
    this.setType(type);
    this.setName(name);
    this.setBrewery(brewery);
    this.setId(id);
}   

public Bier() {}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getBrewery() {
    return brewery;
}

public void setBrewery(String brewery) {
    this.brewery = brewery;
}

public Integer getId() {
    return id;

}   

public void setId(Integer id) {
    this.id = id;
}

public Type getType() {
    return type;
}

public void setType(Type type) {
    this.type = type;
}

public enum Type {
    PALE_LAGERS, LAGER, PILSEN, 
    PALE_ALE, INDIAN_PALE_ALE, WEIZEN,
    LIGHT_HYBRID_BEER, PILSNER;
}

}
[/code]

Step four: Create a service class called BierService.

[code lang=java]
@Path("/bier")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public class BierService {

// Init list for tests  
private static final List&lt;Bier&gt; biers = new ArrayList&lt;Bier&gt;() 
    { private static final long serialVersionUID = 1L;  {
        add(new Bier(1, &quot;Extra Special Pig ESB&quot;, 
            &quot;Pig Pounder Brewery&quot;, Bier.Type.PALE_ALE));
        add(new Bier(2, &quot;Rickshaw American IPA&quot;,
            &quot;Crank Arm Brewing Co&quot;, Bier.Type.LIGHT_HYBRID_BEER));    
        add(new Bier(3, &quot;Hi-Wire Lager&quot;, 
            &quot;Hi-Wire Brewing&quot;, Bier.Type.PILSNER));
    }};

@GET    
    public List&lt;Bier&gt; getBires() {        
        return biers;        
    }   

@GET
@Path(&quot;{id}&quot;)
public Bier findBiers(@PathParam(&quot;id&quot;) Integer id)
{    

    return biers.stream().
        filter( c -&gt; { return c.getId() == id; } ).findFirst().get();                
}

@POST       
public Response createBier(Bier bier) 
{           
    biers.add(bier);

    URI uri = UriBuilder.fromPath(&quot;biers/{id}&quot;).build(bier.getName());        
    return Response.created(uri).entity(bier).build();              
}

@PUT
@Path(&quot;{id}&quot;)
public void updateBier(@PathParam(&quot;id&quot;) Integer id, Bier bier ) 
{
    Integer index = biers.indexOf(biers.stream().
        filter( c -&gt; { return c.getId() == id; } ).findFirst().get());

    if (index &gt; 0) 
        biers.set(index, bier);

}

@DELETE
@Path(&quot;{id}&quot;)
public void deleteBier(@PathParam(&quot;id&quot;) Integer id )
{               
    biers.removeIf(p -&gt; p.getId() == id);        
}

}
[/code]

You need to install Tomcat or other web server/servlet container.

Other alternative is to use Jetty.

Jetty is a easily embedded Java HTTP (Web) server and Java Servlet container.

Configure dependences Jetty in pom.xml.

[code lang=xml]
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.9.v20130131</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopPort>8080</stopPort>
<webApp>
<contextPath>/api</contextPath>
</webApp>
</configuration>
</plugin>
[/code]

Run command in the project root folder

[code lang=bash]
mvn jetty:run
[/code]

Note: You need Mavan instaled

In my environment the URI to access service is http://localhost:8080/api/v1/bier