sexta-feira, 22 de maio de 2015

Como dividir um commit do git em dois

Fala galera, segue o passo-a-passo para você pegar um commit e dividi-lo em dois.

Dê esse comando para permitir alterar o último commit:
git rebase -i HEAD~

Dê esse comando para colocar todos os arquivos na cor vermelha, assim eles estarão disponíveis para você fazer o que quiser:
git reset HEAD~

Agora dê um add em cada arquivo que você quer que fique no seu primeiro commit
git add src/main/java/br/com/localhost8080/teste/Arquivo01.java
git add src/main/java/br/com/localhost8080/teste/Arquivo02.java
git add src/main/java/br/com/localhost8080/teste/Arquivo03.java

Faça um commit dos arquivos adicionados:
git commit -m "mensagem do commit 01"

Agora faça commit do restante dos arquivos:
git add .

Faça o segundo commit:
git commit -m "mensagem do commit 02"

Finalize o rebase:
git rebase --continue

Pronto. Agora você já pode fazer um push ou o que desejar.

Fonte: http://stackoverflow.com/questions/6217156/break-a-previous-commit-into-multiple-commits

Abraçooo!
Adriano Schmidt

domingo, 17 de maio de 2015

Montando um cluster de WildFly em 5 minutos

Olá pessoal, segue meu tutorial para você montar um cluster de WildFly em 5 minutos.

Abaixo está o vídeo e o passo-a-passo detalhado.



Lembrando que como pré-requisito você precisa ter o JDK instalado na máquina (execute "java -version" para validar)

Vamos lá:

- Baixe o WildFly
- Descompacte o zip

- Entre em <Pasta do WildFly>/domain/configuration

- Abra o domain.xml e no final dele na dentro da tag <server-groups> adicione esse código:
 <server-group name="cluster-group" profile="ha">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="ha-sockets"/>
        </server-group>

- Abra o host.xml e dentro da tag <servers> no server-two edite o auto-start="true" para auto-start="false"
- Ainda no host.xml e dentro da tag <servers> adicione esses servers:
 <server name="cluste-one" group="cluster-group" auto-start="true">
            <socket-bindings port-offset="200"/>
        </server>
 <server name="cluste-two" group="cluster-group" auto-start="true">
            <socket-bindings port-offset="300"/>
        </server>

- Pelo terminal/cmd entre em: <Pasta do WildFly>/bin
- Se estiver no windows: Execute o add-user.bat
- Se estiver no linux/mac: Execute o add-user.sh

- Siga o passo-a-passo do add-user
1) aperte enter
2) digite wadmin
3) digite mortadela@1
4) digite mortadela@1
5) aperte enter
6) digite yes
7) digite no
8) aperte enter

- Se estiver no windows: Execute o domain.bat
- Se estiver no linux/mac: Execute o domain.sh

- Agora o ambiente está configurado, você subiu 3 JBoss na sua máquina. Teste pelo browser:
1) Master: http://localhost:8080
2) Slave1: http://localhost:8280
3) Slave2: http://localhost:8380

- Para testar se o cluster está funcionando:
1) Baixe o war: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/cluster-example.war
2) Entre via browser no console admin do WildFly master: http://localhost:9990/
3) Digite usuário wadmin e a senha mortadela@1
4) Acesse o menu Deployments
5) Clique em Add
6) Selecione o cluster-example.war
7) Clique em Next
8) Clique em Save
9) Clique em Assign
10) Selecione cluster-group
11) Clique em Save

- Teste a aplicação
1) Acesse via browser http://localhost:8280/cluster
2) Veja uma contagem acontecendo, esse valor está num EJB Stateful
3) Na mesma aba/janela do browser acesse a URL: http://localhost:8380/cluster
4) A contagem deve continuar, ou seja, o cluster está funcionando pois mesmo acessando em outro JBoss a informação da sessão foi replicada.

É isso aí pessoal, qualquer dúvida é só fazer um post no JBUG Brasil

Abraço!
Adriano Schmidt

sábado, 16 de maio de 2015

TDC Floripa - Palestra WildFly Avançado

Fala galera, ontem apresentei uma palestra sobre WildFly no TDC Floripa. Foi muito bacana, fiquei bem feliz com o resultado!

Assuntos abordados: Introdução; Novidades no WildFly 8; Por dentro; Apache HTTP Server; Cluster; Inimigos do cluster; Mãos na massa; Um pouquinho de tuning; WildFly 9; OpenShift;


O ambiente apresentado de load balancer e cluster está detalhado neste post: Como criar um Load Balancer e Cluster com WildFly 8

O ambiente de cluster local é mais simples e está esse post: Montando um cluster de WildFly em 5 minutos

Muito obrigado a todos do JBUG Brasil!

sexta-feira, 15 de maio de 2015

Como criar um Load Balancer e Cluster com WildFly 8

UPDATE: Fiz um novo tutorial para o WildFly 10: http://localhost8080.blogspot.com.br/2016/09/load-balancer-com-wildfly-10.html


Olá galera!

Esse post mostra como montar um ambiente com um Apache HTTP Server como loadbalancer e vários WildFly 8 em Cluster utilizando o modo domain para facilitar a gestão do ambiente.



Esse ambiente foi apresentado em uma palestra no TDC Floripa 2015. Para ver os slides: TDC Floripa - Palestra WildFly Avançado

Utilizei como base para montar esse ambiente os posts do Mauricio Magnani e ajuda do pessoal do JBUG Brasil.

Todas as máquinas utilizadas para montar esse ambiente utilizam CentOs 7. Você pode utilizar o S.O. que desejar, caso tenha alguma dificuldade é só entrar em contato.

Você precisará de 4 máquinas:
- maq01: Apache HTTP Server
- maq02: WildFly Master
- maq03: WildFly Server1
- maq04: WildFly Server2

Em todas as máquinas

- Configure a rede conforme desejado:
/etc/init.d/network stop
vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network
vi /etc/resolv.conf
/etc/init.d/network start

- Teste se a rede está OK
ping www.google.com
ifconfig

Maq01 - Apache HTTP Server
yum install httpd httpd-devel apr-devel openssl-devel mod_ssl -y

sudo service httpd start

- Acesse no browser de sua máquina se o Apache HTTP Server está no ar, só acessar pelo ip: http://<ip_da_maquina>

- Baixe o mod_cluster
wget http://downloads.jboss.org/mod_cluster//1.3.1.Final/linux-x86_64/mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz
tar -zxvf mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz
cp mod_advertise.so /etc/httpd/modules/
cp mod_manager.so /etc/httpd/modules/
cp mod_proxy_cluster.so /etc/httpd/modules/
cp mod_cluster_slotmem.so /etc/httpd/modules/

- Comente a linha do mod_proxy_balancer pois será usado o mod_cluster
cd /etc/httpd/conf.modules.d
vi 00-proxy.conf

- A linha deve ficar assim:
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so


- Crie e adicione o conteúdo do arquivo mod_cluster.conf
cd /etc/httpd/conf.d/
touch mod_cluster.conf
vi mod_cluster.conf

LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

MemManagerFile /var/cache/mod_cluster

Maxcontext 100
Maxnode 100
Maxhost 100

<VirtualHost *:80>

<Directory />
Order deny,allow
Allow from all
</Directory>

<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
#Order deny,allow
#Deny from all
#Allow from all
AuthType Basic
AuthName "MCM"
AuthUserFile /etc/modclusterpassword
Require user admin
</Location>

KeepAliveTimeout 60
MaxKeepAliveRequests 0
ServerAdvertise Off
EnableMCPMReceive Off

</VirtualHost>

- Crie um usuário e senha
htpasswd -c /etc/modclusterpassword admin

- Reinicie o Apache:
sudo service httpd stop
sudo service httpd start

- Teste novamente no browser: http://<ip_da_maquina>

- Teste no browser o mod_cluster: http://<ip_da_maquina>/mod_cluster_manager



Maq02, Maq03, Maq04

- Instale e configure o Java
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm

rpm -Uvh jdk-7u79-linux-x64.rpm

alternatives --install /usr/bin/java java /usr/java/latest/jre/bin/java 200000
alternatives --install /usr/bin/javaws javaws /usr/java/latest/jre/bin/javaws 200000
alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
alternatives --install /usr/bin/jar jar /usr/java/latest/bin/jar 200000

- Instale o WildFly 8:
wget http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.zip

yum install unzip

unzip wildfly-8.2.0.Final.zip  -d /opt/
ln -s /opt/wildfly-8.2.0.Final /opt/wildfly


- Configure um usuário no linux:
groupadd wildfly
useradd -s /bin/bash -d /home/wildfly -m -g wildfly wildfly
chown -R wildfly:wildfly /opt/wildfly-8.2.0.Final
chown -h wildfly:wildfly /opt/wildfly

sudo vi /etc/sudoers
wildfly ALL=(ALL) NOPASSWD:ALL

passwd wildfly
su wildfly

- Configure o WildFly
cd /etc/default
vi wildfly.conf
descomentar JBOSS_USER

- Inicie o WildFly
sudo service wildfly start

- Veja no log se não deu erros
vi /opt/wildfly/standalone/log/server.log

- Pare o WildFly
sudo service wildfly stop


Maq02 - WildFly Master

- Configure o WildFly
sudo vi /etc/default/wildfly.conf

JBOSS_MODE=domain
JBOSS_DOMAIN_CONFIG=domain.xml
JBOSS_HOST_CONFIG=host-master.xml
STARTUP_WAIT=30
SHUTDOWN_WAIT=30
JBOSS_CONSOLE_LOG=/var/log/wildfly/console.log

- Faça login com o usuário wildlfy
su wildfly

- Adicione a linha para setar o parametro jboss.bind.address.management, adicione junto com as outras linhas de JAVA_OPTS
vi /opt/wildfly/bin/domain.conf
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address.management=<IP_DA_MAQUINA>"

- Configure o domain.xml
vi /opt/wildfly/domain/configuration/domain.xml

de:
 <server-groups>
[...]
 </server-groups>

para:
<server-groups>
   <server-group name="arquitetura-grupo-1" profile="full-ha">
    <jvm name="default">
      <heap size="512m" max-size="512m"/>
      <permgen max-size="256m"/>
    </jvm>
    <socket-binding-group ref="full-ha-sockets"/>
   </server-group>
</server-groups>

- Crie um usuário dentro do WildFly para comunicação no modo domain, usaremos mais para frente
sh /opt/wildfly/bin/add-user.sh
[enter]
wuser
mortadela@1
mortadela@1
[enter]
yes
yes

- Anote o secret gerado após criar o usuáro pois usaremos adiante:
 <secret value="bW9ydGFkZWxhQDE=" />

- Crie um usuário para acessar o webconsole
sh /opt/wildfly/bin/add-user.sh
[enter]
domainadmin
mortadela@1
mortadela@1
[enter]
yes
no


Maq03 e Maq04

- Configure o WildFly:
sudo vi /etc/default/wildfly.conf

JBOSS_USER=wildfly
JBOSS_MODE=domain
JBOSS_HOST_CONFIG=host-slave.xml
STARTUP_WAIT=30
SHUTDOWN_WAIT=30
JBOSS_CONSOLE_LOG=/var/log/wildfly/console.log


- Adicione as linhas de JAVA_OPTS:
vi /opt/wildfly/bin/domain.conf

JAVA_OPTS="$JAVA_OPTS -Djboss.domain.master.address=<IP MASTER>"
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=<IP MAQUINA>"

- Configure o slave:
vi /opt/wildfly/domain/configuration/host-slave.xml

- adicione name no <host (na maq03 adicione host1, na maq04 adicione host2)
<host name="server-host1-widfly"

- altere o <secret> para o secret gerado no master

- Adicione o username:
<domain-controller>
   <remote host="${jboss.domain.master.address}" username="wuser" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
</domain-controller>

- Altere o servers para: (na maq03 adicione arquitetura-1, na maq04 adicione arquitetura-2)
<servers>
   <server name="arquitetura-1" group="arquitetura-grupo-1"/>
</servers>


Maq02, Maq03, Maq04

- Inicie o WildFly
sudo service wildfly start

Maq02
- Faça deploy de uma aplicação de testes
1) Entre via browser no console admin do WildFly master: http://<ip_wildfly_master>:9990/
2) Digite usuário domainadmin e a senha mortadela@1
3) Acesse a parte de deployments
4) Faça o deploy da aplicação systemprops: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/systemprops.war
5) Clique em Assign e associe ao grupo grupo-arquitetura-1

- Teste o load balancer
1) Acesse via broser a aplicação pelo apache http server: http://<ip_do_apache>/systemprops
2) A aplicação mostrará em qual host você vai estar: arquitetura-1 ou arquitetura-2. Vai depender de onde o loadbalancer te direcionou
3) Vá até a máquina que você foi direcionado (arquitetura-1 por exemplo) e pare o WildFly: sudo service wildfly stop
4) Acesse a mesma URL e veja que você foi redirecionado para o arquitetura-2, ou seja, o loadbalancer está funcinando
5) Suba novamente o wildfly: sudo service wildfly start

- Teste o cluster:
1) Faça deploy da aplicação de teste do cluster: https://dl.dropboxusercontent.com/u/8155843/TDC%20Floripa%202015/cluster-example.war
2) Acesse http://<ip_do_apache>/cluster
3) Veja uma contagem acontecendo, esse valor está num EJB Stateful
4) Pare um wildfly
5) A contagem deve continuar
6) Suba a máquina que parou e pare a outra
7) A contagem deve continuar, ou seja, o cluster está funcionando.

Mais detalhes:
- Esse tutorial foi baseado neste:
https://jbossdivers.wordpress.com/2014/03/23/configurando-um-ambiente-wildfly-8-profissional/
https://jbossdivers.wordpress.com/2014/03/23/configurando-um-ambiente-wildfly-8-profissional-parte-2/

- Para mais informações sobre mod_cluster
http://mod-cluster.jboss.org/

- Dúvidas podem ser tiradas no JBUG Brasil:
https://developer.jboss.org/groups/jbug-brasil

Vaaaaleu!!
Adriano Schmidt

segunda-feira, 11 de maio de 2015

Git - reset/revert arquivo

Fala galera,

Hoje fiz um commit e coloquei nele um arquivo q não deveria ter colocado.

Então para voltar o para uma versão antiga rodei o comando:
git checkout origin/master src/main/java/br/com/localhost8080/test01/MinhaClasse.java

Explicando o comando:
git checkout <branch ou commit onde está a versão que você quer restaurar> <caminho do arquivo>

Como eu quis alterar um commit, depois eu dei um "git commit --amend" e fiz o push novamente.

Mais detalhes em:
http://schacon.github.io/git/git-checkout.html

Abraço!
Adriano Schmidt

sexta-feira, 8 de maio de 2015

Selenium Scrool

Olá pessoal,

Estou trabalhando com Selenium e precisei faz um scrool na página para ir para o fim dela.

Fiz da seguinte forma:

/**
* Faz scrool para o fim da pagina 
*/
public void scroolToBottom() {
    String command = "scrollTo(0,3000)";

    JavascriptExecutor javascriptExecutor = (JavascriptExecutor) webDriver;
    javascriptExecutor.executeScript(command);

    try {
        Thread.sleep(5000L);
    } catch (InterruptedException e) {
        logger.error(e);
    }
}

Não sei se é a melhor forma, mas funcionou, vou avaliar outras possibilidade aqui e qualquer coisa atualizo esse post.

Abraço!
Adriano Schmidt