sexta-feira, 16 de setembro de 2016

Instalação do java 8 no Linux

Neste post vou ensinar como instalar jdk 8.

1 - Baixar o arquivo no site da oracle jdk-8u101-linux-x64.rpm.

2 - Aplicar permissão de execução para o JDK

sudo chmod +x jdk-8u101-linux-x64.rpm 

3 - Executar o arquivo usando o comando rpm

sudo rpm -i jdk-8u101-linux-x64.rpm 

4 - Criar o script de configuração para a variável de ambiente JAVA_HOME

sudo vim /etc/profile.d/java.sh 


Adicionar o seguinte conteúdo ao script
#Set Env Variables for Java
JAVA_HOME=/usr/java/latest
export JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH 


5 - Recarregar as configurações

source /etc/profile.d/java.sh 

7 - Adicionar a nova instalação do Java ao alternatives

sudo alternatives --install /usr/bin/java java /usr/java/latest/bin/java 2 

8 - Configurar a nova instalação do Java como default (padrão)

sudo alternatives --config java 

9 - Depois verificar se versão foi instalada

--java version 


java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode) 

Instalação do servidor de aplicação WildFly

Neste post vou explicar como instalar o servidor de aplicação wildfly no linux.

1 - Vamos baixar o arquivo.

Baixar wildfly-10.0.0.Final.zip

2 - Descompactar o Wildfly.

sudo unzip wildfly-10.0.0.Final.zip -d /opt/

3 - Criar link simbólico.

sudo ln -s /opt/wildfly-10.0.0.Final /opt/wildfly/

4 - Criar usuário/grupo wildfly que irá iniciar a servidor de aplicação

sudo useradd -m -d /opt/wildfly -s /bin/bash -U wildfly

5 - Alterar o dono dos diretórios de instalação para o usuário wildfly

sudo chown -R wildfly:wildfly /opt/wildfly-10.0.0.Final
sudo chown -h wildfly:wildfly /opt/wildfly

6 - Alterar o password o usuário wildfly

sudo passwd wildfly
New password: informar senha padrão
Retype new password: informar senha padrão

7 - Configurar o script de serviço

sudo cp /opt/wildfly/bin/init.d/wildfly-init-redhat.sh /etc/init.d/wildfly
sudo chkconfig --add /etc/init.d/wildfly
sudo chkconfig --level 3 /etc/init.d/wildfly
sudo cp /opt/wildfly/bin/init.d/wildfly.conf /etc/default/

8 - Editar o arquivo /etc/default/wildfly.conf e remover o comentário da linha JBOSS_USER=wildfly

sudo vim /etc/default/wildfly.conf

9 - Editar o script de serviço e alterar o valor da variável JBOSS_SCRIPT (linha 57 do scrip) para "$JBOSS_HOME/bin/standalone.sh -Djboss.bind.address=IP_DO_SERVIDOR -Djboss.bind.address.management=IP_DO_SERVIDOR"(As aspas fazem parte do comando), não esquecendo de alterar/informar o IP do servidor.

sudo vim /etc/init.d/wildfly

10 - Execute o script de serviço

sudo service wildfly start

11 - Verificar se o serviço subiu corretamente

sudo netstat -antup | grep java
 ...
tcp  0  0 0.0.0.0:9990  0.0.0.0:* LISTEN 9233 java
tcp  0  0 0.0.0.0:8080  0.0.0.0:* LISTEN 9233 java
 ...

12 - Testar a instalação a partir de um navegador web

http://ip ou nome:8080

13 - Adicionar usuário wildfly para administração do Console de Gerenciamento Web

/opt/wildfly/bin/add-user.sh

What type of user do you wish to add?
- a) Management User (mgmt-users.properties)
- b) Application User (application-users.properties)
-(a): tecle enter
Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username: wildfly

Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
- The password should not be one of the following restricted values {root, admin, administrator}
- The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
- The password should be different from the username
Password : senha padrão 

Re-enter Password : digite novamente a senha 

What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:tecle enter 

About to add user 'wildfly' for realm 'ManagementRealm'
Is this correct yes/no? yes 

Added user 'wildfly' to file '/opt//wildfly-10.0.0.Final/standalone/configuration/mgmt-users.properties'
Added user 'wildfly' to file '/opt/wildfly-10.0.0.Final/domain/configuration/mgmt-users.properties'
Added user 'wildfly' with groups  to file '/opt/wildfly-10.0.0.Final/standalone/configuration/mgmt-groups.properties'
Added user 'wildfly' with groups  to file '/opt/wildfly-10.0.0.Final/domain/configuration/mgmt-groups.properties' 


Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.yes/no? no 

15 - Testar o Console Administrativo WEB

http://ip:9990 ou localhost:9990

quarta-feira, 24 de agosto de 2016

Coding DOJO com Otávio Santana


Neste encontro fizemos um Coding DOJO sob comando do Otavio Santana (@otaviojava) usando Java 8 e programação Funcional. Muitos aprendizados e o código com a especificação do problema estão nosso GITHUB

quarta-feira, 3 de agosto de 2016

Java NIO

Hoje tivemos uma explicação fantástica do Francisco Oliveira sobre o Java NIO.

Basicamente, respondemos à seguinte pergunta: Por que mais uma API de I/O para Java? Tem muita coisa lega para se ver.

Dá uma olhada neste conteúdo (slides) e aproveite o ensinamento!


Os códigos exemplos estão no GitHUB do OzJug!






quarta-feira, 20 de julho de 2016

Programação Funcional em Java

Neste Post vamos falar um pouco sobre Programação Funcional em Java, através de Lambdas. Obviamente não conseguiremos esgotar o assunto, mas podemos ter uma melhor noção dos aspectos que envolvem este novo paradigma e como aplicá-lo em Java.

Alguns conceitos:
Programação Funcional é um paradigma que deriva das funções matemáticas y = f(x), o que permite que algumas funcionalidades da linguagem Java possam ser de certo modo mantidas com uma verbosidade de código muito mais enxuta (menos código escrito).

Obviamente a programação funcional não traz apenas a escrita do código mais resumida. Uma das principais vantagens da programação funcional é a imutabilidade (pois não estamos pensando apenas nos dados e sim nas funcionalidades que serão executadas) e também no acoplamento das funções, o que traz uma maior coesão dos softwares desenvolvidos.

Entretanto o modo de pensar precisa ser revisto, pois tudo agora é condicionado a uma entrada e uma saída (toda função pode ou não ter entrada, realiza sua tarefa e gera alguma saída). Vamos entender um pouco:


   1.  public class App{
   2.      public static void main(String args[]){
   3.         Runnable runnable = new Runnable(){
   4.             @Override
   5.             public void run(){
   6.                System.out.println("Ola OzJUG");
   7.             }
   8.         };
   9.         Thread thread = new Thread(runnable);
   10.        thread.start();
   11.     }
   12. }

Analisando o código, o trecho que efetivamente interessa na lógica da Thread é efetivamente a linha 6. Toda a declaração e sobrescrita da classe anônima a partir da interface Runnable acaba gerando uma série de linhas de código que poderiam ser dispensáveis (já que são apenas formalismos declarativos).

Pensando em funcional, muita coisa pode mudar e a versão funcional

  1. public class App{ 
  2.     public static void main(String args[]){ 
  3.        Runnable runnable = () -> System.out.println("Rodando uma thread");
  4.        Thread thread = new Thread(runnable);
  5.        thread.start();
  6.     } 
  7. } 

Como podemos ver, a idéia de se utilizar a Interface Funcional Runnable (que só tem um método - run) é trazer a notação (na linha 3) de que seu código correspondente seja apenas uma única linha. Interpretamos esta linha como uma forma de "implicação", ou seja, "se temos um runnable então seu código é System.out.println...".

Claro que este é apenas um exemplo simples, outros exemplos estão disponíveis em nosso repositório, do GITHUB.

quarta-feira, 6 de julho de 2016

Hello World

Neste post, inauguramos o Osasco JUG - Java Users Group.
Tivemos a presença ilustre do Programador Real, André Noel.
Na primeira reunião, a sede da TechSchool  foi definida como sendo o local oficial das próximas reuniões.
Nosso Twitter: @ozjug
Teremos um calendário quinzenal, com cada encontro acontecendo às 4as feiras, das 19h30 as 21h30.
Membros presentes nesta primeira reunião

- Adriano Lourenço (@diadrianopsa)
- Prof. Isidro (@fmassetto)
- André Noel (@programadorreal)
- Francisco Oliveira (@delley_fx)
- Luana Garcez Massetto (@LuanaGarcez)
- André Dorte (@AndreDorte)
- Moisez Dantas (@moisez_dantas) - Virtual