any way… um Dao não deve criar um factory, um dao deve receber um Session, de alguem que tenha um factory…
uma session não deve ser aberto para cada operação como add, ou remove, ou etc… deve ser aberta para cada Dao criado…
Usando hibernate não se faz necessidade de varios Daos, basta 1 apenas que da pra fazer tudo…
uma forma legal de usar o dao…
[code]public class HibernateGenericDao {
private final Session session;
private boolean autoCommit = false;
public HibernateGenericDao(Session session) {
this.session = session;
}
public boolean isAutoCommit() {
return autoCommit;
}
public void setAutoCommit(boolean enabled) {
this.autoCommit = enabled;
}
private boolean isActiveTransaction() {
return getSession().getTransaction().isActive();
}
private void errorIfTransactionIsStarted() {
if (isActiveTransaction())
throw new IllegalStateException("uma transação já se encontra aberta");
}
private void errorIfTransactionIsNotStarted() {
if (!isActiveTransaction())
throw new IllegalStateException("não há transação aberta");
}
/**
* Inicia uma transação se for necessário
* @return se uma transação precisou ser inciada, e foi iniciada.
*/
private boolean startTransactionIfNeed() {
final boolean needTransaction = isAutoCommit() && !isActiveTransaction();
if (needTransaction)
getSession().beginTransaction();
return needTransaction;
}
/**
* Confirma a tranzação.
* @throws IllegalStateException quando não há operação corrente.
* @throws HibernateException quando há uma falha ao commitar a transação.
*/
private void commitTransaction() {
errorIfTransactionIsStarted();
try {
getSession().getTransaction().commit();
} finally {
if (isActiveTransaction()) {
rollback();
}
}
}
public void rollback() {
errorIfTransactionIsNotStarted();
getSession().getTransaction().rollback();
}
public void persist(Object entity) {
final boolean wasStarted = startTransactionIfNeed();
try {
getSession().persist(entity);
if (wasStarted)
commitTransaction();
} catch(RuntimeException ex) {
if (wasStarted)
rollback();
throw ex;
}
}[/code]
método semalhentes a persist para remove, marge, refresh… etc
assim vc pode fazer transações de mais de uma operação, só abre transação quando nenhum estiver aberta, define se seu dao é ou não autocommit, o DAO tem outro método de consultas basicas como… list(Class) … onde vc lita todos os objetos de uma classe… findById(Class,Serializable) onde vc busca uma entidade referente ao id passado, da classe passada… enfim N possibilidades
vamos lá, estou usando hiberante com struts 1.x, não vou para o 2 direto porquê quero nesse final de ano/inicio do ano que vem pegar algo na área então tomei a decisão de começar pelo struts 1.x. VRaptor 3 ta na minha lista de testes, utilizei um pouco do 2 e vi que o 3 melhorou bastante.
@Lavieri, vou começar a anotar minhas classes então, obrigado!
certo, mas o que eu devo me aprofundar então pra arranjar o primeiro serviço na área ? sou novo, e tenho experiência de quase 3 anos com php que não vai servir para mer** nenhuma no final das contas
to botando fé no struts 1.x por ter bastante sistema legado com ele, ai eu poderia tentar ver uma vaga com ele para dar manutenção … Estágio pode esquecer porquê to saindo da facul este ano :o)
A sua experiência com php pode ajudar em alguma coisa (por exemplo, se alguém quiser transferir um sistema de php para Java ou alguma coisa assim. Além disso, você pode dar manutenção em sistemas codificados em php).
não intendo essa história de “deixe de usar x, use y” com tanta fervura, normalmente não é do desenvolvedor essa opção de escolha… tem sistema legado usando, x, x ainda tem um bom mercado, para quem esta começando é uma questão de oportunidade… nestes casos nem compensa migrar para y e reescrever tudo…
Porquê começar com inglês ? porque não começar com latim. ainda tem muita gente falando (lá no vaticano) ainda tem mercado e é uma questão de oportunidade. Nem compensa re-escrever tudo em inglês.
Porque alguem que está começando deve começar pelo obsuleto ? Não faz sentido.
O colega pode achar que terá mais chance de arranjar manutenção em struts 1 porque ha legado, mas ai está limitando ao legado. Aplicações novas são feitas todos os dias. Qual mercado é maior ? o legado struts ou o resto ?
P.S. O que tem que estudar é api de servlets. Commons-FileUpload , I/O , Streams, HTML, Javascript, CSS. todos os frameworks são a mesma coisa e se vc entende bem o ciclo de vida do servlet container , dos servlets, da session e do request, o resto é trivial. É só facilitador (ou no caso do struts, complicador)
são duas coisas diferentes, se você for buscar as vagas nos principais sites de emprego, verá que struts é exigido em bem mais da metade das vagas, sem especificar versão (quando isso ocorre na maioria das vezes é o 1, as vezes ambos que se quer)
em momento nenhum eu disse que isso seria o que mais contribuiria pro lado tecnico da pessoa, eu falei que é o que facilita quem esta começando a entrar no mercado de trabalho, é diferente.
quanto a qual mercado é maior, veja você mesmo nos sites de emprego, some as vagas que pedem apenas jsf sem struts, as de mentaway, as de vraptor, etc e depois compare com as que pedem struts (ainda que peçam jsf junto, o struts ali é algo que não da pra ignorar em relação a mercado, ao menos nao pra quem esta começando, por que normalmente ou estão pedindo struts e jsf, ou struts e spring).
[quote=sergiotaborda]
P.S. O que tem que estudar é api de servlets. Commons-FileUpload , I/O , Streams, HTML, Javascript, CSS. todos os frameworks são a mesma coisa e se vc entende bem o ciclo de vida do servlet container , dos servlets, da session e do request, o resto é trivial. É só facilitador (ou no caso do struts, complicador)[/quote]
quanto a isso eu até concordo com você, primeiro deve-se pegar as bases (eu teria uma lista um pouco diferente da sua mais a ideia é a mesma), mais o assunto não era esse…
é obsolte… é antigo, so se usa em sistema legado (e pronto) ou seja é so manutenção mesmo… vai fazer algo que não é nem um pouco prazeroso…
estude o resto, aprenda da forma certa, depois ate pegue struts quem sabe, pra se for o caso, também saber dar manutenção no struts… mas startar por isso, é uma pessima ideia
serio sim…continua sendo pedido… normalmente dizem apenas struts, mais na mairia dos casos se referem ao primeiro(ao menos na maioria das entrevistas que eu fui recentemente quando tava procurando emprego) , ou em certos casos se referem a ambas as versões, mais é meio raro mesmo você ver alguém pedindo exclusivamente o struts 2… digo por experiencia propria
e pela milesima vez, eu não to dizendo que é bom, eu to dizendo que tem mercado… é diferente…
É isso que dificulta as coisas pra mim, existe um leque de opções e não disponho de tanto tempo para conhecer todas, mas vontade não me falta, nas poucas horas vagas que tenho durante a semana estou ocupando delas com web.
Quanto ao básico, html, css, ajax, javascript e bla bla blas isso eu já me acotumei, o problema por enquanto fica quanto ao que se conhecer melhor. Me basiei pelo struts 1.x pelo fato de toda vez que eu procuro alguma coisa para junior na catho, apinfo, e bla bla blas, SEMPRE tem struts no meio como o @maior_abandonado disse.
@Andre Brito: Flex está nos meus planos para 2010.
Eu vi um pouco do VRaptor eu gostei bastante, mas ainda não vejo tanto mercado para ele
Acho que o assunto do tópico desandou um pouco. :shock: