Dúvida para criar Webservice

Galera, boa noite!

Bom, consegui criar um webservice para uma classe de meu projeto.
Só que me surgiu uma dúvida! Quando criei o Webservice selecionei a classe BEAN, mas depois de realizar a publicação do serviço eu vi que não é bem por ai, pois ele acabou trazendo junto o model, facade e bean.

A minha dúvida é justamente essa. O certo é eu usar o BEAN ou fazer uma nova classe e implementar os métodos específicos para o Webservice??
Pois no meu BEAN eu primeiro instancio o objeto e depois chamo o método Create para então gravar no banco de dados, mas no Webservice não é assim, eu já deveria criar o objeto e salvar ele, é isso mesmo???

Agradeço desde já pela ajuda!!!
:smiley:

Zenity, bom dia!

Me desculpe, mas nao entendi. Sua dúvida é para criar um webservice (extender HttpServlet, etc) ou está com dúvida na camada MVC?

Abs

[quote=leandropena]Zenity, bom dia!

Me desculpe, mas nao entendi. Sua dúvida é para criar um webservice (extender HttpServlet, etc) ou está com dúvida na camada MVC?

Abs[/quote]

webservice != app web :smiley:

Bom dia Leandro e raf4ever!

Antes de mais nada, obrigado pela ajuda!
Realmente, acho que não me expressei corretamente, vamos lá, vou tentar explicar melhor.

Vamos partir do seguinte exemplo, eu tenho uma classe chamada ProdutoBean, essa classe chama a ProdutoFacade, que chama a ProdutoDAO. O MVC normal.
Sendo assim, na camada de visão, quando vou gravar um Produto eu crio o objeto e defino os valores a ele, por exemplo: ProdutoBean.produto.Nome = “Teste” e ai chamo o método ProdutoBean.Create(produto); para armazenar o produto em meu banco de dados.
Ok, essa parte está funcionando sem problemas. Só que eu preciso acessar esse método através de uma OUTRA aplicação.
Sendo asim, fui lá e mandei gerar o Webservice da classe ProdutoBean. Ele gerou normalmente, mas ao tentar utilizar os métodos percebi que o Webservice não vai se comportar da mesma forma que uma página jsf e é ai que entra minha dúvida. Para resolver esse problema a melhor solução seria qual??
A única que me vem em mente é criar uma OUTRA classe, que já instancia o produto, e seta os valores vindos de parâmetros e ao término desse o comando para armazenar o produto no banco.

Essa seria a melhor solução mesmo ou existe outra forma mais correta de se realizar isso???
Valeu e obrigado desde já pela ajuda!!!

:smiley:

Cria o seu webservice baseado no método do facade, pois o bean está ligado ao framework mvc.
Acredito que com rest já dê para passar o objeto populado para o facade

[quote=raf4ever][quote=leandropena]Zenity, bom dia!

Me desculpe, mas nao entendi. Sua dúvida é para criar um webservice (extender HttpServlet, etc) ou está com dúvida na camada MVC?

Abs[/quote]

webservice != app web :smiley: [/quote]

Sim sim… só nao entendi a dúvida dele.
Nao sabia se estava com dúvidas na criação de um servlet simples ou em MVC. :slight_smile:

[quote=leandropena]Sim sim… só nao entendi a dúvida dele.
Nao sabia se estava com dúvidas na criação de um servlet simples ou em MVC. :slight_smile: [/quote]
Mas ele não quer criar um servlet, quer criar um WebService, os dois não são a mesma coisa.

lele_vader

O problema é que na minha facade, se eu pegar o método Save por exemplo, ele já recebe como parâmetro o objeto.

public void createUsuario(Usuario usuario) { usuarioDAO.beginTransaction(); usuarioDAO.save(usuario); usuarioDAO.commitAndCloseTransaction(); }

Pelo que eu to vendo aqui, no webservice teria que criar um outro método, que receba por parâmetro os dados do Usuário (por exemplo) e dentro do método inicie o objeto, defina os valores e já chame o método save.
Algo semelhante a isso

public void createUsuarioWebService(String nome, String senha) { UsuarioDAO usuarioDAO = new UsuarioDAO(); Usuario usuario = new Usuario(); usuario.setNome(nome); usuario.setSenha(senha); usuarioDAO.save(usuario); }

Estou muito errado ou é isso mesmo??
Agradeço desde já pela ajuda de todos!!!
:smiley:

Acredito que você possa criar sim um webservice como uma classe separada, porém ela injetaria ou instanciaria o seu facade e daí chamaria o mesmo método.

Agora sobre os parâmetros, não sei o que está usando, porém eu já vi implementações usando-se de jax-ws e rest, em que o parâmetro era um objeto.
Daí era recebido eu acho como um json e o model era anotado com @XmlRootEntity, isso fazia pelo que entendi transformar o json em um objeto.

Você poderia fazer isso aí.
Poderia explicar como pretende fazer a chamada do webservice

Se entendi direito o problema acho que a dúvida surgiu porque você (Zenity) colocou alguma codificação na ProdutoBean que deveria estar na fachada (ProdutoFacade) - verifique se é isto mesmo.

Na minha opinião deveria haver uma classe para atender a view (ProdutoBean) e uma outra para o web service; associada as duas deve estar a fachada (ProdutoFacade). Isto deve ser assim porque a recepção e preparação dos dados é um pouco diferente nos dois aspectos (pelo que entendi). Resumindo…os objetos da view e web service recebem os dados normaliza as estruturas e utiliza a funcionalidade disponibilizada pela fachada.

A ideia geral é reduzir a dependência e aumentar a reusabilidade.

flws