domingo, 5 de maio de 2013

Script Linux de backup Mysql

1º Criar usuário para executar o backup:

GRANT FILE, SELECT, SHOW VIEW, LOCK TABLES, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER, USAGE ON

*.* TO 'backup_user'@'localhost' IDENTIFIED BY 'backupmysql';

2º Criar o script:

nano /bin/bkpmysql

digitar no arquivo:

#!/bin/bash

DATAHORA=`date +%Y%m%d-%H%M`
MYSQLDUMP=/usr/bin/mysqldump
MYSQLDIR='cd /var/backup/mysql/'
TAR=/bin/tar
RM=/bin/rm

$MYSQLDUMP -u backup_user -pbackupmysql controledb > /var/backup/mysql/bkpmysql_$DATAHORA

$MYSQLDIR

$TAR czvf bkpmysql_$DATAHORA.tar.gz bkpmysql_$DATAHORA

3º Dar permissão no script:

chmod +x /bin/bkpmysql

4º Criar as pastas:

mkdir /var/backup
mkdir /var/backup/mysql

5º Editar o arquivo:
crontab -e

10 19 * * * /bin/bkpmysql

6º Liberar porta 22 do servidor remoto:
iptables -A INPUT -i 192.168.0.107 -p tcp --dport 22 -j ACCEPT

7º Criar uma pasta para receber os arquivos sincronizados:
mkdir /home/wendell/sinc

8º Instalar Rsync:
apt-get install rysnc


9º Configurar arquivo de sincronização no servidor que receberá os dados sincronizados:

nano /bin/sincroniza

#!/bin/bash

sync -avz root@192.168.0.107:/var/backup/mysql/ /home/wendell/sinc/

10º Dar permissão no script:

chmod +x /bin/sincroniza

11º Configurar crontab:

crontab -e
30 20 * * * /bin/sincroniza

12º Configurar:

ssh-keygen -t dsa -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub | ssh root@maquina_remota 'cat - >> ~/.ssh/authorized_keys'
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Configuranda e Instalando servidor Linux - Apache2 + Mysql + PhpMyAdmin

nano /etc/network/interfaces

Comentar a linha iface eth0 inet dhcp com um # no começo da linha
Digitar o conteúdo abaixo:

iface eth0 inet static

address 192.168.0.200
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4 


Reiniciar interface de rede /etc/init.d/networking restart

Instalar Apache:
apt-get install apache2 apache2-utils

Instalar Mysql:
apt-get install mysql-server

Instalar PHP:
apt-get install php5 php5-mysql

Intalar PHPMyAdmin:
apt-get install phpmyadmin

sexta-feira, 3 de maio de 2013

Criação de shell script de atualização Linux Ubuntu

1º Abrir um editor de texto através do comando nano /bin/atualiza
(atualiza é o nome do script);

2º Inserir o conteúdo no arquivo:

#!/bin/bash

apt-get update -y
apt-get upgrade -y
apt-get dist-upgrade -y

3º Executar o comando: chmod +x /bin/atualiza

Pronto, para executar o script basta digitar o comando atualiza.

quarta-feira, 3 de abril de 2013

Verificar URLs curtas

Existem vários serviços que encurtam os links como exemplo o migre.me e o goo.gl

Estes serviços são úteis para simplificar a exibição de um link em um determinado site mas pode ser usado por crackers para esconder links que contém códigos maliciosos ou páginas falsas.

Uma solução para saber para onde o link curto será redirecionado é utilizar o serviço no endereço: http://longurl.org/

Basta copiar a URL curta e colar no campo próprio e clicar no botão para expandir o endereço do link.

Anti-Virus Online Gratuito

https://www.virustotal.com/pt/

domingo, 31 de março de 2013

Comandos Linux

Cópia de arquivo por SSH:

scp arquivo ipDaMaquina:/diretorioParaOarquivo


Reiniciar o MYSQL:

 /etc/init.d/mysql restart

terça-feira, 19 de março de 2013

Consutar DATE e TIME separadamente em campo DATETIME - MYSQL

Situação:

Tenho uma tabela chamada SOLICITACAO a qual possui um campo chamado DATA_SOLICITACAO do tipo DATETIME.

Quero fazer uma consulta nesta tabela onde quero definir o período da data e da faixa horária separadamente, por exemplo, consultar as solicitações do dia 2013-01-01 ao dia 2013-02-01 mas apenas entre os horários das 08:00 as 12:00.

Solução:

SELECT *
FROM `solicitacao`
WHERE DATE( DATA_SOLICITACAO )
BETWEEN "2013-01-01"
AND "2013-02-01"
AND time( data_solicitacao )
BETWEEN '08:00:00'
AND '12:00:00'


Obs: a função DATE do MYSQL retorna apenas a data do campo DATETIME e a função TIME do MYSQL retorna apenas a hora do campo DATETIME.

segunda-feira, 25 de fevereiro de 2013

Qual melhor distribuição Linux?

Para responder esta pergunta, de acordo com sua necessidade, clique neste Link e responda as perguntas.

Habilitar USB no VirtualBox - Ubuntu

1º Baixar o Extension Pack: http://download.virtualbox.org/virtualbox/4.2.6/Oracle_VM_VirtualBox_Extension_Pack-4.2.6-82870.vbox-extpack

2° Digitar o comando no terminal: usermod wendell -a -G vboxusers

3º Verificar se o usuário foi adicionado através do comando: getent group | grep vboxusers

4º Reiniciar a sessão do usuário

5º No VirtualBox, habilitar a controladora USB 2.0 no menu configuração da máquina virtual.

quinta-feira, 21 de fevereiro de 2013

Diferença entre colocar as notações do mapeamento nos métodos getters e colocar nos atributos privados - JSF

Quando você coloca as anotações da JPA nos atributos, o framework usará Reflection para acessar os valores. Em alguns casos, valores são carregados prematuramente, pois o framework não interceptará as chamadas nos métodos getters, por isso, ele carrega do banco de dados antes mesmo do momento necessário.

É aconselhado mapear sempre nos getters.
Nunca misture as duas formas de mapeamento, pois o comportamento pode ser inesperado.

Importância dos métodos hashCode e equals - JSF

Para que os objetos sejam diferenciados uns de outros, precisamos implementar o métodos equals().
No banco de dados, as chaves primárias diferenciam registros distintos. Quando mapeamos uma entidade de uma tabela, devemos criar o método equals(), levando em consideração a forma em que os registros são diferenciados no banco de dados.



public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Pessoa other = (Pessoa) obj;
        if (codigo == null) {
            if (other.codigo != null)
                return false;
        } else if (!codigo.equals(other.codigo))
            return false;
        return true;
    }


Veja que nesse exemplo, esse método é baseado no atributo "codigo", que representa a chave na tabela do banco de dados.

O método hashCode() ajuda a criar um critério para espalhar os diversos objetos dentro de uma tabela de espalhamento. Isso é importante para um determinado objeto ser encontrado mais rapidamente, melhorando a performance do software, pois evita muitas comparações desnecessárias durante uma busca em memória.

Associar atributos ao componente que usa o conversor - JSF

Deve-se colocar na página xhtml:

<h:inputText ....>
    <f:converter .... />
    <f:attribute name="nomeDoAtributo" value="#{.....}"/>
</h:inputText>


E no conversor pega o atributo da seguinte forma:

String valor = (String) component.getAttributes().get("nomeDoAtributo");

Como limpar cache no navegador

Apertando as teclas CTRL+ F5 a página é atualizada e o cache é limpado. Foi testado esta solução nos navegadores FireFox e Chrome.
Um exemplo de utilização desta solução é quando se faz uma alteração em um arquivo CSS de um projeto WEB e o mesmo não é atualizado no navegador.

quarta-feira, 20 de fevereiro de 2013

Plugin para máscara usando javascript

meioMask is a simple use plugin for creating and applying masks at text input fields.

http://www.meiocodigo.com/projects/meiomask/

Páginas JSF sem extensão

Para tornar suas URLs amigáveis, você pode usar a biblioteca PrettyFaces (http://ocpsoft.org/prettyfaces/).

Baixe o JAR do PrettyFaces, importe em seu projeto, configure o arquivo web.xml e crie um novo chamado pretty-config.xml.

pretty-config.xml
<!-- Este arquivo deve ser colocado na pasta WEB-INF -->
<pretty-config xmlns="http://ocpsoft.com/prettyfaces/3.3.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ocpsoft.com/prettyfaces/3.3.2 http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-3.3.2.xsd">

<url-mapping id="cadastroLancamento">
<pattern value="/cadastro-lancamento" />
<view-id value="/CadastroLancamento.xhtml" />
</url-mapping>
<url-mapping id="consultaLancamento">
<pattern value="/consulta-lancamento" />
<view-id value="/ConsultaLancamento.xhtml" />
</url-mapping>

</pretty-config> 



web.xml
<!-- Incluir esse fragmento de código no arquivo web.xml -->
<filter>
<filter-name>Pretty Filter</filter-name>
<filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Pretty Filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>


Configurar extensão dos arquivos JSF

A configuração do mapeamento dos arquivos são feitas no arquivo web.xml.
Neste exemplo todos os arquivos .xhtml são mapeados:

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>


Um exemplo sem precisar utilizar a extensão do arquivo:

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>


Neste segundo exemplo deve-se acessar o sistema da seguinte forma:

http://localhost:8080/SistemaTeste/faces/CadastroTeste

Fazer um bean ser instanciado no momento que o servidor for startado

Para fazer isso, precisa-se de um bean com escopo de aplicação. Basta adicionar um atributo na anotação @ManagedBean, para dizer que a inicialização do managed bean deve ser ansiosa (eager, em inglês):

@ManagedBean(eager=true)
@ApplicationScoped
public class MeuBean {
}

Definir o tempo da expiração da Sessão JSF 2

Para definir o tempo da expiração da sessão em um sistema JSF deve-se configurar o arquivo web.xml com o seguinte código:

 <session-config>
  <session-timeout>30</session-timeout>
</session-config>


O tempo é definido em minutos.



Podemos também criar cookies com JSF, utilizando o código abaixo no managed bean:


Cookie codigo = new Cookie("codigo", "1");
codigo.setMaxAge(3600);
((HttpServletResponse)facesContext.getExternalContext().getResponse())
.addCookie(codigo);


Observe que deve-se gerar o valor do código e não utilizar um valor fixo como neste exemplo.


Para recuperar os cookies, utiliza-se o código abaixo, assim é só procurar o cookie salvo previamente e autenticar o usuário:


FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie cookies[] = ((HttpServletRequest)facesContext.getExternalContext()
.getRequest()).getCookies;

terça-feira, 19 de fevereiro de 2013

Compartilhamento público de código-fonte

http://pastebin.com/

Uma excelente solução para compartilhamento de código fonte.

Serviço para publicação de imagens na nuvem

http://troll.ws/

Troll is a simple tool that lets you share images and text with friends

Esta é uma ótima solução para compartilhar imagens na internet de forma rápida e prática.



Outra opção é http://snag.gy/ 

Para utiliza-lo basta copiar a imagem desejada para a área de tranasferência (CTRL + C) e depois colar a imagem (CTRL + V) na página inicial do site. Será carregada a imagem e depois publicado o link para a exibição da imagem.

Problemas com referência das bibliotecas no Eclipse

Devem ser verificadas as seguintes configurações no Eclipse:

Clicando com o botão direito no projeto exibido na paleta Package Explorer; opção Properties > Java Build Path e adicionar as bibliotecas necessárias no projeto.
Deve-se também verificar a opção Deployment Assembly no mesmo menu e inserir as bibliotecas (Source) na pasta WEB-INF/lib (Deploy Path) do projeto.

CANNOT CREATE A SERVER USING THE SELECTED TYPE - ECLIPSE


Este é um problema comum no IDE Eclipse que ocorre geralmente quando adicionamos e configuramos um novo servidor mas depois removemos.
Quando queremos adicionar outro servidor igual ao que foi removido o Eclipse não permite criarmos outro.

Solução: No menu Window > Preferences > Server > Runtime Environments será exibida uma tabela com os servidores configurados no Eclipse. 
Basta então selecionar o servidor que se deseja remover e clicar em Remove.

Agora poderá ser criado outro servidor no Eclipse.

 

Diferenças entre EJB, Tomcat e GlassFish







Tomcat


EJB (Enterprise JavaBeans) é uma especificação que faz parte da Java EE. É um componente executado em um servidor de aplicação, que simplifica o desenvolvimento de componentes distribuídos, transacionais e seguros.

Você deve pensar em usar EJB caso tenha necessidade, por exemplo, de separar as classes negócio em um servidor e a interface com o usuário em outro servidor.

Apesar da possibilidade de chamada de componentes remotos, você não precisa desse requisito para usar EJB. Com essa tecnologia, o controle de transação e a segurança de sua aplicação são simplificados também.

Tomcat é apenas um Servlet Container, ou seja, ele implementa as especificações de Servlets e JSP (que fazem parte do Java EE). Tomcat não implementa EJB.


GlassFish
JBoss AS e Glassfish implementam todas as especificações do Java EE (incluindo Servlets, JSP, EJB, etc). A diferença entre Glassfish e JBoss AS é simplesmente o fornecedor. Os dois fazem a mesma coisa, de formas diferentes. Teoricamente, uma aplicação desenvolvida e testada no JBoss AS, deve funcionar no Glassfish.

Não acredite em pessoas que falam que Tomcat não é bom para produção, se os argumentos não forem baseados em testes. Só porque ele não implementa todas as especificações, não quer dizer que ele é pior.

Se o que você precisa é colocar em produção um sistema web, feito em JSF e JPA, por exemplo, Tomcat é mais do que suficiente. 


A única semelhança entre Enterprise JavaBeans (EJB) e JavaBeans são os nomes, por isso, não devem ser comparados.

EJB é a especificação que faz parte da Java EE.


JavaBeans são classes Java criadas seguindo uma convenção: os objetos devem ser serializáveis, com um construtor padrão e deve possuir métodos getters e setters para acessar os atributos de instância.