Spring + struts - preciso de opiniões

Buenas!

Galera, temos um projeto desenvolvido usando struts para control e view…

Estamos vendo a possibilidade de passar a utilizar spring visto que a aplicação poderá ser acessar através de celular, por exemplo.

Da maneira como está desenvolvido, a aplicação está apenas pra web browser, não poderiamos desenvolver um front-end j2me e acessar a control diretamente, e pelo que se sabe, com spring eu poderia ter isso …

Minha questão é, pelo que li na documentação do spring
http://www.springframework.org/docs/reference_1.2RC2/webintegration.html#struts
eu teria 2 alternativas para manter a view struts e refazer apenas a control usando spring.

Agora, é vantagem continuar usando toda aquela encrenca do struts ou seria melhor refazer a view também, com jsp+jstl direto?

Opiniões, please!

Baita abraço!
André

Olá,

Voce quer usar Spring para fazer Control da aplicação J2ME também?
Isto não é possível, a menos que a tua aplicação faça requisições HTTP para um webserver que esteja rodando a tua aplicação J2EE.
Você não pode acessar os Controller do spring pela aplicação J2ME por que eles dependem da API de Servlets.
Talvez exista uma implementação de Controller do Spring que não use AP de Servlet diretamente, mas eu desconheço. E mesmo que exista, não vai funcionar integrado com Struts.

Bom, partindo deste princípio qual framework para camada control poderia ser usado para ter real INDEPENDÊNCIA da camada view?? Ou será que isso não seria possível??

Não existe como acessar uma mesma MODEL apartir de VIEWS distintas(Swing, JSP, J2ME, etc…)???

IGor

humm… o framework Webwork usa o XWork como controller… acho q é a mesma relação q tu quer, bem, de uma pesquisada ai:

XWork: http://www.opensymphony.com/xwork/
Webwork: http://www.opensymphony.com/webwork

Q vergonha hein Igor?! Só uma mensagem no PJ em todos estes anos…

Bom, eu diria a mesma coisa q o Matheus. Até onde sei o XWork é o único sem amarração com Servlet. Quando eu estudei ele, há mais de um ano atrás, não existia nada além de WebWork trabalhando em cima de XWork.
Pode ser q já haja algo hoje.
E tu também pode impelmentar algo em cima do XWork

e, não sei até onde pode se aplicar ao caso do André, mas, as Actions do Webwork são independentes de container Web, pois não extendem de Servlets como as Actions do Struts. Isso pra se ter atributos da Action totalmente thread safe… Claro q se perde um pouco de performance, pois pra cada requisição será instanciada uma Action, e não uma thread por requisição executada pra mesma instancia como no Struts (servlets).

Matheus,

as actions do Spring tbm não extendem mas elas recebem request e response como entrada dos métodos. Eu nuca fucei nisto, mas acho q dá tranquilamente para remover o req/resp das actions do Spring.

Como as actions do WW recebem os parâmetros HTTP?

o método responsável pelo trabalho na Action do Webwork não recebe parâmetro nenhum, ocorre o seguinte, se no seu formulário vc tem os parâmetros name e password por ex, na sua Action vc terá o seguinte:

public class FooAction implements Action {

   private String name;
   private String password;

   public void execute() {

      //doStuff da vida...
   }

   //getters e setters
}

antes do execute() ser chamado os atributos da action ja estão populados com os parametros vindos do formulário, ele vai conferir o nome dos parametros do formulário e vai procurar por métodos set[i]NomeParametro/i na Action. E com relação a conversão de tipos, é automático tb, se tu tens um parametro idade, o Webwork vai se ligar q o método setIdade() recebe um int e vai tentar fazer um parse pra int… caso não dê, é claro q vai rolá uma exceptionzinha… mas nada q um interceptor não resolva antes :slight_smile:

Olá…

dexa ver se entendi…
vc quer através de um app J2ME chamar uma Action do Struts. Me diga onde está o problema?
se vc abrir no j2me uma httpconnection e chamar uma url tipo:
http://www.meuserver.com.br:8080/app/MyAction.do?idProduto=“1”

onde o Struts não funcionaria??
Onde está o seu problema?!

Abraços!

Juliano, o problema que eu não quero ter que “parsear” o retorno html que eu tenho do struts.

Outra, a aplicação j2me é MUITO mais simples, por enquanto não passaria de 4 “actions”. Não tem muito sentido eu carregar um monte de informações precisando de muito pouco. Pois os htmls que eu tenho na interface web, são bem mais simples na interface j2me…

Viajei?

Jujo, ele não quer fazer a requisição HTTP pro Struts. Pelo q eu entendi ele quer aproveitar a camada control que ele já tem codada(infelizmente em Struts) na aplicação J2ME. Isto evitaria um monte de retrabalho, como validação de dados, chamar os delegates(se existirem), chamar o Busines Object(BO) adequado, votlar para a tela adequada. Ou seja, todo a lógicade fluxo de controle.

(desinterrei a thread)

Ahhhh… agora entendi… mas acho que você não vai ter como fugir de ter uma camada intermediária acessando o seu Controller… não importando se em Struts ou não, a não ser que sua (action) faça um OutputStream.write direto, vc sempre vai ter o html no meio. Por isso precisaria de uma camada intermediária acessando esse Controller e dai fazendo o parser do html recebido.

Há alguma outra forma de fazer isso, sem ser assim? vejamos, com o WebWork cairíamos no mesmo problema não?! sendo que as classes “Action” do WW também retornarão para um html certo!? que é onde ele faz o outputStream, com o objeto do Response, correto?! Com o Spring não vai ser a mesma coisa?! visto que tudo o que vem do Server é html.

Uma camada intermediária com um Servlet, por exemplo, resolveria isso, fazendo ele mesmo a requisição para a action e devolvendo somente os dados pertinentes para o J2ME.

Não sei se falei um monte de besteiras aqui… mas acho qeu é isso não?!
Isso tbm, se entendi bem o que nosso amigo queria…

hehehehehe

Sei la…

Jujo,

com webwork sim, cairia no mesmo problema de gerar HTML.
Mas com XWork, não.
Xwork é o command Framework do WebWork.

[quote=“Franklin”]Jujo,

com webwork sim, cairia no mesmo problema de gerar HTML.
Mas com XWork, não.
Xwork é o command Framework do WebWork.[/quote]

Ahn…
que qeu o XWork faz de diferente?! ta meio abstrato pra mim…
digamos que eu faça um request para uma determinada “Action”. Ela em seu funcionamente normal, processaria alguma coisa, e retornaria para uma página html. Até ai ok! Mas o meu request não veio de um browser e sim de um celular via HttpConnection do J2ME. como poderia através do XWork mandar somente os dados pertinentes ?!?

Desculpa ai… eh que não consegui ainda entender qual a diferença :wink:

abraços!

Teria que codar a camada de Controller em ciam do XWork.

Além disto, o que o pessoal está propondo(pelo o que eu entendi) é justamente não usa HTTP do lado J2ME. Eles querem apenas reaproveitar a lógica de negócios e lógica de controle. Portanto não teria uma HttpConnection do J2Me envolvida.
Seriam aplicações diferentes, uma em J2Me outra J2EE, mas com o máximo de reuso possível. Para isto teria que ser codado um framework que faça Control tanto em J2ME quanto em J2EE, por isto a sugestão do XWork.

Aposto que se procurarmos no google vamos encontrar algo do tipo. Lembro que muito tempo atrás haviam inciado um plugin de Struts q fazia isto com Swing.

Opa…

Não usar Http?!
Como faria essa conexão?! Sendo o servidor um servidor Web.

Um mesmo controller para o J2EE e J2ME? Para J2EE vc pode mandar o tanto de informações que vc quizer, já para uma aplicação J2ME não… é complicado de mensurar isso, um dos lados irá ser prejudicado.

Pode ser ignorancia minha mesmo, mas ainda não consegui visualizar tal aplicação =/

Ai vão alguns links interessantes que eu achei:

http://java.sun.com/features/2001/11/j2eebluprnts.html
http://www.theserverside.com/articles/article.tss?l=Hemphill
Artigo do Rodrigo Urubatan

Abraços!

A aplicação J2ME não tem conexão com webserver(pelo o que eu entendi). Eles querem usar as mesmas classes nas duas aplicações.

Tipo classe que calcula imposto de renda. Tu pode rodar isto numa página web e num celular. Só que eles também querem reaproveitar as classes responsáveis pelo fluxo de controle e navegação da aplicação.

Usar as classes que ele implementar para j2ee no celular?! ahn… isso não vai dar certo… mesmo que forem BO´s, vc terá que usar somente coisas que puderem ser usadas tbm no j2me, como classes Wrapper, etc…

Ahhh na verdade mesmo… eu ainda não entendi o que é pra ser feito! hahahahaha

mas sei la

Como vai ser feita a conexão ainda não temos certeza, pelo que andei lendo, eu teria 4 opções…

http(s)
socket

e mais 2 que não recordo agora, mas que por algum motivo eu já tinha desconsiderado.

Agora, temos a model que acessada até o momento apenas pela control totalmente baseado no struts… implementa actions e tal… totalmente dependente do struts… baita cagada, eu sei. :slight_smile:

A idéia, colocar uma “interface” que implemente um control intermediaria para acesso direto a model… e outras controls que dêem o retorno necessário… ou seja, uma control que poderia ser struts… mas em vez de acessar diretamente a model, acessaria através desta “interface”… e da mesma forma o j2ee… isso é o que temos pensado de momento…

Valeu pelos comentários.
André

Só uma dúvida pq pra vcs usar struts é tão ruim assim ?