Pattern é uma padrão certo ? MVC, DAO, DTO e aí vai
usar por usar não tem sentido só pra ficar bonitinho e extruturado ?
Minha indignação é o professores ensinarem que MVC é só isso…
Cara JDNI não tem nada haver com Spring.
blz vou dezenhar…
Seu JNDI ta explicito no nome que é interface…
Java Naming and Directory Interface
<bean id="seuDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/SeuBancoDS" />
</bean>
está mapeado
Agora vamos pro service a camada de serviço on tem os ifs hehe
<bean id="produtoService" class="br.com.ejb.pedido.service.ProdutoServiceImpl">
<property name="produtoDAO" ref="produtoDAO"/>
</bean>
o controle de transação.
<bean id="seuTxInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<bean id="seuTxManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="seuSessionFactory"/>
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRES_NEW</prop>
<prop key="delete*">PROPAGATION_REQUIRES_NEW</prop>
<prop key="find*">PROPAGATION_SUPPORTS</prop>
<prop key="update*">PROPAGATION_REQUIRES_NEW</prop>
</props>
</property>
</bean>
Certo vamos interceptar os métodos que começam com essas palavras e pra cada tipo um tipo de transação.
Agora vamos aos hbms…
<bean id="seuSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="seuDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">false</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>br/com/ejb/model/hbm/Produto.hbm.xml</value>
</list>
</property>
</bean>
Blz ?
na camada Web numa action…
service.saveProduto(produtoDTO);
na client (camada burra só tem DTO e os services a serem implementados)
lembra que setamos o seuService
public interface ProdutoService {
public void saveProduto(Produto protudoDTO) throws SuaException;
agora vamos pra camada businnes
/** DAO para gravar o produto. */
private ProdutoDAO produtoDAO;
// injetando o dao que vc definiu no spring
public void setProdutoDAO(ProdutoDAO produtoDAO) {
this.produtoDAO = produtoDAO;
}
ainda na camada de negócio (nosso service)
private saveProduto(ProdutoDTO dto) {
// vamos transformar o DTO em Bean (model) num método é claro
Produto bean = new Produto();
bean.setId(dto.getId());
bean.setDesc(dto.getDesc());
saveProduto(bean);
// agora vai ser interceptado a transação do tipo de vc setou... lembra ? PROPAGATION_REQUIRES_NEW
}
o DAO interface
public interface ProdutoDAO {
public void saveProduto(Produto produto);
}
Agora a implementação do seu DAO
public void saveProduto(Produto produto) {
getHibernateTemplate().save(produto);
}
demorado mais elegante…
como seu o seu própio link disse…
Utilizando Camadas o projetista tem um critério a utilizar quando decide agrupar duas ou mais classes, mas o uso de Camadas não diz nada sobre como estes grupos se comunicam. O máximo que o uso de Camadas diz é sobre se estas são transparentes (ou abertas) ou opacas (fechadas). Camadas transparentes não evitam que uma superior enxergue a inferior, as opacas sim.
As Camadas promovem o encapsulamento (uma Camada não vai saber o que tem dentro da outra) e a coesão (componentes parecidos ficam no mesmo grupo).
se não usar interface vai ser Camadas transparentes não evitam que uma superior enxergue a inferior
tosco pra quem vai distribuir um trabalho entre diferentes fornecedore.
VC DISSE Fábrica de software? Analista? Onde que isto está relacionado com o problema exposto?
Talves me não devia ter usado Analista e sim projetista e não usar Fábrica de software e sim seu amigo de baia
Aí que tá o problema pcalcado esses caras aprendem desse jeito e na hora de trabalhar não sabem o que estão fazendo e pipoca
o código de try catch e outra pérolas…
mas agoar vc me falar que … conexão é JNDI", não estar claro o que significa contradiz a filosofia básica do Spring tsc tsc tsc tsc…
tem que usar isso mesmo
conn = DriverManager.getConnection("jdbc:mysql://localhost/inet?user=root&password=root");
heheh é a password é root