Mentawai + PostgreSQL + DI + Axis

Olá Pessoal!
Tenho um sistema com interface Swing conectando num WebService que faz as operações de persistência. Teria como eu utilizar a Injeção de Dependência do Mentawai sem ter uma interface web? Pois estou interessado em usá-lo mais tarde quando alguns módulos web forem implementados, além de poder usar os recursos do Mentabean que eu gostei bastante. Teria alguma forma de eu ter DI sem ter uma Action em si?

Obrigado desde já…

[quote=erico_kl]Olá Pessoal!
Tenho um sistema com interface Swing conectando num WebService que faz as operações de persistência. Teria como eu utilizar a Injeção de Dependência do Mentawai sem ter uma interface web? Pois estou interessado em usá-lo mais tarde quando alguns módulos web forem implementados, além de poder usar os recursos do Mentabean que eu gostei bastante. Teria alguma forma de eu ter DI sem ter uma Action em si?

Obrigado desde já…[/quote]

Dá para usar o Mentawai tranquilamente para fazer web services. Você pode fazer uma requisição web retornar JSON como resposta ou qualquer outra coisa (XML, String, etc.) Não será web service propriamente dito (SOAP ou REST) mas funcionará que é uma beleza e será extremamente simples. Agora tente fazer isso usando Hibernate e Spring. Uma zona que só…

Pois é, porém já tenho uma estrutura genérica inteira montada com Axis (via SOAP), e somente estava pensando em utilizar o Mentawai (com os recursos do Mentabean) que deixam os XMLs e Annotations de lado, para fazer ORM, CRUD e DI, porém sem interface web. Acredito que não seja possível nessa estrutura usar DI sendo que as instâncias das classes de serviços são feitas pelo Axis. Me corrija se eu estiver falando bobagem…

Levando isso em conta, neste caso não seria melhor utilizar Mentabean separadamente sem controles de IoC?

[quote=erico_kl]Pois é, porém já tenho uma estrutura genérica inteira montada com Axis (via SOAP), e somente estava pensando em utilizar o Mentawai (com os recursos do Mentabean) que deixam os XMLs e Annotations de lado, para fazer ORM, CRUD e DI, porém sem interface web. Acredito que não seja possível nessa estrutura usar DI sendo que as instâncias das classes de serviços são feitas pelo Axis. Me corrija se eu estiver falando bobagem…

Levando isso em conta, neste caso não seria melhor utilizar Mentabean separadamente sem controles de IoC?[/quote]

Sim, utiliza o MentaBean e o MentaConatiner de forma independente. Ambos suportam configuração programática.

http://mentacontainer.soliveirajr.com

http://mentabean.soliveirajr.com

hmmm, certo… e depois pra utilizar o Mentawai na parte web sem problemas? Pois classes provindas de BeanSession e até as próprias DAOs, por exemplo, são instanciadas manualmente… E outra, o load dos beans utilizando o BeanConfig também teria que ser feito separadamente? (que no Mentawai ficaria no ApplicationManager)

BeanSession e BeanConfig são coisas do MentaBean… o Mentawai oferece de forma integrada, mas tudo isso está no MentaBean.

Depois para usar o Mentawai vc também pode, mas aí vc vai ter que ver como vc vai integrar as coisas no seu app manager. Eu não tenho como te ajudar aqui, pois isso é coisa do seu sistema. Com certeza há como.

certo, vou dar uma investida para integrar nosso modelo de conexão com o MentaBean separadamente, até porque o pool de conexões que utilizo é gerenciado pelo container (Tomcat, no meu caso) e assim vou poder utilizar as vantagens desse framework sem alterar a estrutura de conexão…

vou colocar o tópico como resolvido, qualquer coisa volto a postar…

Obrigado saoj… e parabéns pelas APIs

mais uma pergunta…
eu teria como fazer a intância das DAOs de forma manual e as outras intâncias (como de BeanManager, Connection e BeanSession, por exemplo) serem injetadas?

Porque o acontece é o seguinte: um sistema swing poderá ter módulos web. Na parte de web service (que o swing invoca), as classes DAO são instanciadas em uma classe onde os serviços herdam, por exemplo, para uma DAO de Produto existe um ProdutoService (invocado pela aplicação swing) que herda de GenericWS, onde este instancia a DAO do produto. Teria como neste caso injetar a BeanSession e suas dpendências mesmo instanciando a DAO manualmente? Ou seja, somente parte das classes não ser injetada pelo Mentawai.

[quote=erico_kl]mais uma pergunta…
eu teria como fazer a intância das DAOs de forma manual e as outras intâncias (como de BeanManager, Connection e BeanSession, por exemplo) serem injetadas?

Porque o acontece é o seguinte: um sistema swing poderá ter módulos web. Na parte de web service (que o swing invoca), as classes DAO são instanciadas em uma classe onde os serviços herdam, por exemplo, para uma DAO de Produto existe um ProdutoService (invocado pela aplicação swing) que herda de GenericWS, onde este instancia a DAO do produto. Teria como neste caso injetar a BeanSession e suas dpendências mesmo instanciando a DAO manualmente? Ou seja, somente parte das classes não ser injetada pelo Mentawai.[/quote]

Sim, o MentaContainer possui o método inject que vc pode utilizar para fazer isso, ou seja, instancia um bean na mão e depois manda o container popular ele.

hmm legal… e pelo que vi eu consigo pegar o Container do AppManager, certo? Pois pretendo mesmo o sistema nao tendo interface web ainda, utilizar o Mentawai por completo.

Sim, o AppManager tem um método estático getContainer().

certo…
só estou vendo agora como integrar… provavelmente terei que implementar minha própria ConnectionHandler devido ao pool de conexões ser controlado pelo Tomcat…
Mais uma dúvida… O mentabean tem controle de transações também? Ou vc pega a Connection e faz o controle manualmente?

[quote=erico_kl]certo…
só estou vendo agora como integrar… provavelmente terei que implementar minha própria ConnectionHandler devido ao pool de conexões ser controlado pelo Tomcat…
[/quote]

Sim. Eu controlo o meu próprio pool de conexão logo não preciso ter esse integração com o pool do tomcat. O Mentawai oferece três pools de conexões. DBCP, C3P0 e BoneCP. O BoneCP é o melhor na minha opinIão.

Ele não tem como saber o que vc quer fazer com as transações. Então vc pega a connection e faz isso vc mesmo da maneira que precisar.

pois é, já tentei o uso do BoneCP mas pela versão do jar que baixei do site (mentawai-all-2.5.2.jar) o BoneCP não está embutido:

é necessário importar alguma lib externa?

[quote=saoj]
Ele não tem como saber o que vc quer fazer com as transações. Então vc pega a connection e faz isso vc mesmo da maneira que precisar.[/quote]
ok, quanto à isso blz…

Estanho o all.jar deveria vir com o BoneCP. Pega o jar aqui enquanto não corrigimos isso:

<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp</artifactId>
<version>0.7.1.RELEASE</version>
</dependency>

blz… baixei o jar, vou importar ele separado…
Só para informação, importei o BoneCP mas ainda precisa de outra lib, mas nem se estressa q vou pegando elas separadamente e importando sem problemas…

valeu

de acordo com os testes aqui precisei baixar mais 2 libs adicionais além da lib do BoneCP, slf4j-1.6.6 e uma lib do google que contém a classe com.google.common.base.FinalizableReferenceQueue, porém inserindo essa última ocorre o seguinte erro:

não sei se é o certo, somente fui baixando as libs que apontavam como dependência essas classes e aí cheguei neste erro…

Nuca vi esse erro. Eu uso Maven e importo no maven. Nunca usei o mentawai-all.jar.

http://www.mentaframework.org/mtw/Page/RefApp/mentawai-aplicacao-de-referencia

Pois é, já vi essa aplicação de referência, inclusive baixei os fontes do svn para entender alguns detalhes, porém estou tentando alguma forma de utilizar o jar na lib do WEB-INFO e fazer o build com o ant. Pois importando o jar no braço necessita dessas dependências…

Tu vai ter que googlar para entender esse erro aí de IllegalAccessError. Não é um erro comum. Talvez o Jar esteja corrompido? Ou vc baixou versões incompatíveis?

Só quebrando a cabeça mesmo agora. Depois me fala como vc resolveu!