Bom dia amigos,
Ha algum tempo desenvolvi pequenas aplicações utilizando JSF , JPA , TopLink com Oracle e para estas aplicações não encontrei problemas de performance. Porém , recentemente criei uma aplicação que exige um pouco mais de recurso , pois trata-se de um maior volume de dados e de acessos. Ao meu ver , considerando todos esses pontos acredito que a aplicação tem uma performance relativamente boa, mas para excluir qualquer dúvida gostaria de saber se existe algo que eu possa fazer para melhorar.
Existe alguma dica para melhorar a performance ? Minha entity principal é está:
@Entity
@Table(name = "ASCHAMADO")
@NamedQueries({
@NamedQuery(name = "AsChamado.searchAll" , query = "select a from AsChamado a order by a.idChamado desc "),
@NamedQuery(name = "AsChamado.searchById" , query = "select a from AsChamado a where a.idChamado = :idChamado"),
@NamedQuery(name = "AsChamado.searchBySolicOrDig", query = "select a from AsChamado a JOIN a.solicitante b JOIN a.digitador c where a.dataChamado between :dataInicio and :dataFim and ( b.idUsuario = :idUsuario or c.idUsuario = :idUsuario ) order by a.idChamado desc"),
@NamedQuery(name = "AsChamado.searchByPeriodo" , query = "select distinct a from AsChamado a JOIN a.AsAtendenteChamado b where a.dataChamado between :dataInicio and :dataFim and :atendente is null or b.atendente.idUsuario = :atendente order by a.idChamado desc")
})
public class AsChamado implements Serializable {
@Id
@Column(name = "ID_CHAMADO", nullable = false)
private long idChamado;
@ManyToOne
@JoinColumn(name = "EMPRESA_PROP", nullable=true, insertable=false,updatable=false, referencedColumnName = "ID_EMPRESA_PROP")
private UsEmpresaProp empresaProp;
@ManyToOne
@JoinColumn(name = "DIGITADOR", referencedColumnName = "ID_USUARIO")
private AsUsuario digitador;
@ManyToOne
@JoinColumn(name = "SOLICITANTE", referencedColumnName = "ID_USUARIO")
private AsUsuario solicitante;
@ManyToOne
@JoinColumn(name = "TIPO_CHAMADO", referencedColumnName = "ID_TIPO_CHAMADO")
private AsTipoChamado tipoChamado;
@Column(name = "DATA_CHAMADO", nullable = false)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date dataChamado;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "SISTEMA" , referencedColumnName = "SISTEMA" ,nullable=true),
@JoinColumn(name = "MODULO" , referencedColumnName = "MODULO" ,nullable=true),
@JoinColumn(name = "OPERACAO", referencedColumnName = "OPERACAO" ,nullable=true)
})
private AsModuloOperacao moduloOperacao;
@ManyToOne
@JoinColumn(name = "PRIORIDADE", referencedColumnName = "ID_PRIORIDADE")
private AsPriorChamado prioridade;
@Column(name = "DESCRICAO", nullable = false)
private String descricao;
@Column(name = "DESCRICAO_SEM_FORMATACAO", nullable = false)
private String descricaoSemFormatacao;
@ManyToOne
@JoinColumn(name = "STATUS", referencedColumnName = "ID_STATUS")
private AsStatusChamado status;
@Column(name = "DATA_NECESSIDADE", nullable = false)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date dataNecessidade;
@ManyToOne
@JoinColumn(name = "CHAMADO_EXTERNO", referencedColumnName = "ID_CHAMADO", nullable = true)
private SuChamado chamadoExterno;
@Column(name = "CHAMADO_REF")
private long chamadoRef;
@Column(name = "FG_LIB_APROV_TI", nullable = false)
private String fgLibAprovTi;
@OneToMany( mappedBy="chamado" )
private List<AsEstagioAprovacao> asEstagioAprov;
@OneToMany( mappedBy="chamado" )
private List<AsChamadoHistObs> asChamadoHistObs;
@OneToMany( mappedBy="chamado" )
private List<AsAtendenteChamado> AsAtendenteChamado;
@OneToMany( mappedBy="chamado" )
private List<AsChamadoLog> asChamadoLog;
@OneToMany( mappedBy="chamado" )
private List<AsTarefaChamado> asTarefaChamado;
/*GETS E SETS*/
As outras entitys foram construidas da mesma forma. O que vocês me dizem ?
É isto mesmo ou ainda posso melhorar ?
Obrigado pela atenção dos senhores.