Abaixo publico m exemplo de como fazer arquivo de log de forma simples:
Logger logger = Logger.getLogger("MyLog");
FileHandler fh;
try {
// This block configure the logger with handler and formatter
fh = new FileHandler("MyLogFile.log", true);
// fh = new FileHandler("MyLogFile.log", 10000, 5); 10000 bytes cada arquivo em 5 arquivos
logger.addHandler(fh);
logger.setLevel(Level.ALL);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
// the following statement is used to log any messages
logger.log(Level.FINEST, "My first log");
//os níveis são:
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
sábado, 12 de março de 2011
domingo, 27 de fevereiro de 2011
ClassLoader desmitificado.
Ótimo artigo sobre classloader. Recomendo a leitura.
http://marcosroriz.wordpress.com/2009/12/16/entendendo-classloader-java/
http://marcosroriz.wordpress.com/2009/12/16/entendendo-classloader-java/
domingo, 26 de setembro de 2010
Relacionamento n x n em JPA
Considere as tabelas abaixo:
create table eleitor (id integer, nome varchar(40), primary key (id));
create table enquete (id integer, perguntar varchar(40), primary key (id));
create table voto (id_eleitor integer, id_enquete integer, primary key(id_eleitor,id_enquete), FOREIGN KEY (id_eleitor) references eleitor(id), FOREIGN KEY (id_enquete) references enquete(id));
create table eleitor (id integer, nome varchar(40), primary key (id));
create table enquete (id integer, perguntar varchar(40), primary key (id));
create table voto (id_eleitor integer, id_enquete integer, primary key(id_eleitor,id_enquete), FOREIGN KEY (id_eleitor) references eleitor(id), FOREIGN KEY (id_enquete) references enquete(id));
O mapeamento em JPA seria o seguinte:
@Entity
@Table(name = "ELEITOR", catalog = "", schema = "APP")
@NamedQueries({
@NamedQuery(name = "Eleitor.findAll", query = "SELECT e FROM Eleitor e"),
@NamedQuery(name = "Eleitor.findById", query = "SELECT e FROM Eleitor e WHERE e.id = :id"),
@NamedQuery(name = "Eleitor.findByNome", query = "SELECT e FROM Eleitor e WHERE e.nome = :nome")})
public class Eleitor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID", nullable = false)
private Integer id;
@Column(name = "NOME", length = 40)
private String nome;
@JoinTable(name = "VOTO", joinColumns = {
@JoinColumn(name = "ID_ELEITOR", referencedColumnName = "ID", nullable = false)}, inverseJoinColumns = {
@JoinColumn(name = "ID_ENQUETE", referencedColumnName = "ID", nullable = false)})
@ManyToMany
private Collection enqueteCollection;
public Eleitor() {
}
public Eleitor(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Collection getEnqueteCollection() {
return enqueteCollection;
}
public void setEnqueteCollection(Collection enqueteCollection) {
this.enqueteCollection = enqueteCollection;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Eleitor)) {
return false;
}
Eleitor other = (Eleitor) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "modelo.Eleitor[id=" + id + "]";
}
}
@Entity
@Table(name = "ENQUETE", catalog = "", schema = "APP")
@NamedQueries({
@NamedQuery(name = "Enquete.findAll", query = "SELECT e FROM Enquete e"),
@NamedQuery(name = "Enquete.findById", query = "SELECT e FROM Enquete e WHERE e.id = :id"),
@NamedQuery(name = "Enquete.findByPerguntar", query = "SELECT e FROM Enquete e WHERE e.perguntar = :perguntar")})
public class Enquete implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID", nullable = false)
private Integer id;
@Column(name = "PERGUNTAR", length = 40)
private String perguntar;
@ManyToMany(mappedBy = "enqueteCollection")
private Collection eleitorCollection;
public Enquete() {
}
public Enquete(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPerguntar() {
return perguntar;
}
public void setPerguntar(String perguntar) {
this.perguntar = perguntar;
}
public Collection getEleitorCollection() {
return eleitorCollection;
}
public void setEleitorCollection(Collection eleitorCollection) {
this.eleitorCollection = eleitorCollection;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Enquete)) {
return false;
}
Enquete other = (Enquete) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "modelo.Enquete[id=" + id + "]";
}
}
quinta-feira, 2 de setembro de 2010
Retorno de relatório Jasper no Faces
Para retornar um relatório ao usuário pela web:
Código do Botão
action="#{empresaBean.imprimir}" />
Código do método
public String imprimir() {
FacesContext context = getContext();
try {
HttpServletResponse response = (HttpServletResponse) context
.getExternalContext().getResponse();
ServletOutputStream responseStream;
responseStream = response.getOutputStream();
String pathJasper = ((ServletContext) context.getExternalContext()
.getContext()).getRealPath("/WEB-INF/relatorios/")
+ "/ArcheionEmpresas.jasper";
Relatorio relatorio = empresaBO.getRelatorio(
new HashMap(), pathJasper);
relatorio.exportarParaPdfStream(responseStream);
response.setContentType("application/pdf");
response.setHeader("Content-disposition",
"filename=\"RelacaoEmpresa.pdf\"");
responseStream.flush();
responseStream.close();
context.renderResponse();
context.responseComplete();
} catch (IOException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
} catch (AccessDeniedException aex) {
return Constants.ACCESS_DENIED;
}
return findAll();
}
Código do Botão
action="#{empresaBean.imprimir}" />
Código do método
public String imprimir() {
FacesContext context = getContext();
try {
HttpServletResponse response = (HttpServletResponse) context
.getExternalContext().getResponse();
ServletOutputStream responseStream;
responseStream = response.getOutputStream();
String pathJasper = ((ServletContext) context.getExternalContext()
.getContext()).getRealPath("/WEB-INF/relatorios/")
+ "/ArcheionEmpresas.jasper";
Relatorio relatorio = empresaBO.getRelatorio(
new HashMap
relatorio.exportarParaPdfStream(responseStream);
response.setContentType("application/pdf");
response.setHeader("Content-disposition",
"filename=\"RelacaoEmpresa.pdf\"");
responseStream.flush();
responseStream.close();
context.renderResponse();
context.responseComplete();
} catch (IOException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
} catch (AccessDeniedException aex) {
return Constants.ACCESS_DENIED;
}
return findAll();
}
domingo, 2 de maio de 2010
Open Source Enterprise Content Management System (CMS) by Alfresco
Link para um ECM free ("Enterprise Content Management")
Open Source Enterprise Content Management System (CMS) by Alfresco
Open Source Enterprise Content Management System (CMS) by Alfresco
quarta-feira, 17 de fevereiro de 2010
Ferramentas para Java
Ferramentas:
JOPR -- http://www.jboss.org/embjopr/
monitor para Jboss
JD -- http://java.decompiler.free.fr/
descompilador java
JOPR -- http://www.jboss.org/embjopr/
monitor para Jboss
JD -- http://java.decompiler.free.fr/
descompilador java
sábado, 13 de fevereiro de 2010
Bean Validation
Java EE 6: Começando com Bean Validation
Com a especificação JSR 303 resolve-se o problema de validação dos dados de entrada do usuário através de Annotations.
Leia o artigo completo: Caelum
Com a especificação JSR 303 resolve-se o problema de validação dos dados de entrada do usuário através de Annotations.
Leia o artigo completo: Caelum
Assinar:
Postagens (Atom)