1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Spring MVC dúvidas sobre concorrência

Olá colegas! Eu montei uma arquitetura bem conhecida com spring mvc, security, tiles. Onde uso mvc básico onde injeto a entidade no controller ao invés de usar um bean. Como o sistema é pequeno optei em não criar um bean para cada modelo(entidade). Minha dúvida é se nesta estrutura posso ter algum problema de concorrência já que injeto o modelo controller e ainda uso a classe Principal do spring security para recuperar o user da seção. Vejam como ficou: Toda ajuda é bem vinda desde já agradeço.

MODELO

package br.com.gpm.dao.entity;

import java.util.Calendar;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.validator.constraints.NotBlank;

@Entity
@XmlRootElement
@Table(name="empresas")
public class Empresa {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Integer id;

    @Temporal(TemporalType.DATE)
    private Calendar cadastro;

    private Integer cnpj;
    private Integer ie;

    @NotBlank(message="{empresa.nome.vazio}")
    private String nome;

    private String razaoSocial;
    private String tel01;
    private String tel02;
    private String email;
    private String rua;
    private String numero;
    private String complemento;
    private String bairro;
    private String cep;
    private String cidade;
    private String uf;
    private boolean status;

    //getters e setters...

}

REPOSITORIO

//interface...
package br.com.gpm.dao.repository.empresa;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import br.com.gpm.dao.entity.Empresa;

@Repository
public class EmpresaRepositoryImpl implements EmpresaRepository {

    @PersistenceContext
    private EntityManager entity;

    @Override
    public Empresa find(Integer id) {
        return id != null ? entity.find(Empresa.class, id) : null;
    }

    @Override
    public Integer save(Empresa e) {
        entity.persist(e);
        return e.getId();
    }

    @Override
    public void edit(Empresa e) {
        entity.merge(e);
    }

    @Override
    public void remove(Empresa e) {
        entity.remove(e);
    }

    @Override
    public List<Empresa> list() {
        return entity.createQuery("select e from Empresa e",
                  Empresa.class).getResultList();
    }

}

SERVIÇO
//interface...

package br.com.gpm.service.empresa;

import java.util.List;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import br.com.gpm.dao.entity.Empresa;
import br.com.gpm.dao.repository.empresa.EmpresaRepository;

@Service
@Transactional
public class EmpresaServiceImpl implements EmpresaService {

    @Autowired
    protected EmpresaRepository empresaRpt;

    protected Empresa empresa;

    @Override
    public Empresa find(Integer id) {
        Object obj = empresaRpt.find(id);
        return (Empresa) obj;
    }

    @Override
    public Integer save(Empresa e) {
        return empresaRpt.save(e);
    }

    @Override
    public void edit(Empresa e) {
        empresa = empresaRpt.find(e.getId());
        if (empresa != null) {
            empresaRpt.edit(e);
        }
    }

    @Override
    public void remove(Integer id) {
        empresa = empresaRpt.find(id);
        if (empresa != null) {
            empresaRpt.remove(empresa);
        }

    }

    @Override
    public List<Empresa> list() {
        List<Empresa> empresas = empresaRpt.list();
        return empresas;

    }
}

CONTROLLER

package br.com.gpm.controllers.cadastros.empresa;

import java.security.Principal;
import java.util.Calendar;
import java.util.Date;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import br.com.gpm.dao.entity.Empresa;
import br.com.gpm.service.empresa.EmpresaService;


@Controller
@RequestMapping("empresa.do")
public class EmpresaController {


    @Autowired
    EmpresaService service;

    @RequestMapping(params="load", method = RequestMethod.GET)
    public String load(Model model) {
        model.addAttribute("empresas", service.list());
        return "listEmpresas";
    }

    @RequestMapping(params="form", method = RequestMethod.GET)
    public ModelAndView form(Empresa empresa) {
        return new ModelAndView("cadEmpresas","empresa", empresa);
    }

    @RequestMapping(params="save", method = RequestMethod.POST)
    public ModelAndView save(@Valid Empresa empresa, Principal user, BindingResult result, RedirectAttributes redirectAttributes) {        


            //implementação usando a classe Principal para obter o usuário
    }

    @RequestMapping(params="edit",  method = RequestMethod.GET)
    public String edit (Integer id, Principal user, Model model) {
         //implementação usando a classe Principal para obter o usuário
    }

    @RequestMapping(params="remove",  method = RequestMethod.GET)
    public ModelAndView remove (Integer id, RedirectAttributes atr) {
         //implementação usando a classe Principal para obter o usuário
    }
}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java-ee spring-mvc spring-security arquitetura ou faça a sua própria pergunta.