O camando xrandr é um utilitário de configuração do X Window, framework básico para construção de diversos padrões de interfaces gráficas no estilo desktop. O xrandr permite a (re)configuração do X Window dinamicamente, isto é, sem necessidade de reiniciar o servidor. Você também pode obter informações técnicas sobre o monitor e o ambiente gráfico em geral tais como resolução, refresh rate, etc.
Execute camando xandr sem parâmetros e veja todos os outputs (geralmente monitores) conectados ao sistema e alguns detalhes técnicos de cada, como as resoluções:
~ $ xrandr
Screen 0: minimum 8 x 8, current 1680 x 1050, maximum 32767 x 32767
VGA1 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 477mm x 268mm
1680x1050 59.95*+
1280x1024 75.02 60.02
1152x864 75.00
1024x768 75.03 60.00
800x600 75.00 60.32
640x480 75.00 59.94
720x400 70.08
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
A saída do comando mostra um VGA1 conectado e a resolução marcada com * e +indicam a que está sendo usada no momento e a preferencial, respectivamente.
Com essas informações, você pode definir uma opção de resolução diferente para o monitor (desde que ela esteja disponível). Por exemplo você pode adicionar a resolução 1920x1080 com o seguinte comando:
A partir deste ponto a nova resolução 1920x1080 já estará disponível em suas configurações de monitor. Caso seu desktop seja um XFCE, por exemplo, você poderá encontrar a nova opção em settings/display a partir do menu inicial, como a janela abaixo:
Criando uma aplicação Java para acessar o DataSource
Dando sequência à parte 1 deste artigo onde configuramos o datasource no servidor WildFly 10, agora criamos a aplicação.
Abra o Eclipse e crie um Novo Projeto Maven (File/New/Other.../Maven Project). Marque a opção Create a Simple Project e Next:
Informe as propriedades do projeto e na combobox Packaging escolha war. Finish:
Vá em propriedades do projeto. No painel esquerdo selecione Project Facets. No painel direito marque as opções CDI, JPA e Java Server Faces. Mais à direita, na aba Runtimes marque WildFly. Clique em Apply e OK:
No arquivo pom.xml adicionamos as dependências do JPA (hibernate):
Na pasta META-INF o eclipse já cria para nós o arquivo persistence.xml dentro do qual informamos alguns parâmetros do JPA, como o nome do data source no servidor, instruímos a gerar tabelas no banco de dados a partir das classes do projeto e mostrar os scripts SQL por exemplo.
Agora que o projeto já está configurado, crie pacote chamado entidades e nele a classe Funcionario como segue. A anotação @Entity informa ao JPA que essa classe será uma tabela no banco de dados:
@Entity
public class Funcionario implements Serializable{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id; //chave primaria da tabela
private String nome;
private Integer idade;
private Date nascimento;
private Double salario;
//getters, setters omitidos para clareza
}
Até o momento a estrutura do nosso projeto está como na imagem:
Página JSF e Managed Bean
Crie um pacote chamado controle e nele a classe chamada FuncionarioMB e FuncionarioService, onde esta é responsável por intermediar as ações com o banco de dados (salvar, editar, excluir, etc) e aquela gerencia os eventos na interface gráfica com o usuário, neste caso a página web:
FuncionarioMB (gerencia os eventos na web page):
import java.util.List;
import javax.inject.Inject;
import javax.enterprise.inject.Model;
import javax.transaction.Transactional;
import entidade.Funcionario;
@Model
public class FuncionarioMB {
@Inject
private FuncionarioService funcionarioService;
private Funcionario funcionario = new Funcionario();
private List<Funcionario> funcionarios;
//diz para o servidor wildFly abrir transação para persistir objeto no banco
//o próprio servidor faz o commit após o método retornar
@Transactional
public String salvar() {
funcionarioService.salvar(funcionario);
return null;
}
public Funcionario getFuncionario() {
return funcionario;
}
public void setFuncionario(Funcionario funcionario) {
this.funcionario = funcionario;
}
public List<Funcionario> getFuncionarios() {
//busca todos os registros na tabela e exibe
if(funcionarios == null)
funcionarios = funcionarioService.buscarTodos();
return funcionarios;
}
}
FuncionarioService (camada de serviço e acesso ao banco de dados):
package controle;
import java.util.List;
import javax.enterprise.inject.Model;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import entidade.Funcionario;
@Model
public class FuncionarioService {
@PersistenceContext
private EntityManager entityManager;
public void salvar(Funcionario funcionario) {
entityManager.persist(funcionario);
}
public List<Funcionario> buscarTodos() {
String query = "SELECT f FROM Funcionario f";
return entityManager.createQuery(query).getResultList();
}
}
Agora podemos criar a web page. No diretório src/main/webapp crie a pasta index.xhtml:
Todo input de texto em aplicações web são interpretados por padrão como texto puro, dessa forma utilizamos alguns converters padrão do JSF para a adpatar os tipos de dados que não são texto, como a idade, nascimento, e salário.
Pronto. A aplicação já está pronta para rodar. Clique com o botão direito na pasta raíz da aplicação, escolha Run as, em seguida Run on Server. A aplicação será acessada na porta default do servidor, geralmente a 8080:
Insira registros válidos (como nenhuma regra de validação foi implementada, se você inserir registros inválido, a aplicação vai lançar um erro) e salve. A tabela lista os funcionário cadastrados até o momento.
A estrutura final do projeto ficou como segue: