myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gerhard Petracek <gerhard.petra...@gmail.com>
Subject Re: Apache CODI x JEE7 Glassfish4
Date Wed, 30 Oct 2013 21:33:46 GMT
hi edilmar,

apache deltaspike is the official successor of codi/seam/... (including
support for ee7+).
some parts (including codi-conversations) are still on our list, however,
you can try it with [1] (it's the same code - just different packages and
based on deltaspike).

@kay (and your comment about conversations):
std. cdi conversations are available since cdi 1.0 and have many
disadvantages compared to codi-conversations.
that was the reason for introducing codi-conversations at all (see e.g.
[2]) -> they are still useful.

regards,
gerhard

[1]
http://os890.blogspot.co.at/2013/07/add-on-codi-scopes-for-deltaspike.html
[2] http://os890.blogspot.co.at/2011/04/slides-codi-conversations.html

http://www.irian.at

Your JSF/JavaEE powerhouse -
JavaEE Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces



2013/10/30 Edilmar Alves <edilista@gmail.com>

> I think CODI is a great replacement for my actual environment, the only
> problem is to deploy in GF4.
>
>
> 2013/10/30 Edilmar Alves <edilista@gmail.com>
>
> > Hi,
> >
> > I use CODI ConversationScoped and @Inject Conversation because it is
> > better than original CDI implementation.
> > I have many java files using CODI at this time.
> > Then, to go back to CDI, I will have to change many files, and I don't
> > know if the webapp will continue to work 100%,
> > because the management of the Conversation object made by CODI is great,
> > for example it decreases problems like
> > LazyException caused by Hibernate with JSF fields.
> >
> >
> > 2013/10/30 Kay Wrobel <kay.wrobel@gmx.net>
> >
> >> Also, you might want to check with RichFaces. I found this blog <
> >> http://www.bleathem.ca/blog/**2013/09/richfaces-434final-**
> >> release-announcement.html<
> http://www.bleathem.ca/blog/2013/09/richfaces-434final-release-announcement.html
> >>
> >> and the moderator mentions that full JSF 2.2 support is planned for
> >> RichFaces 5. I had some of the same issues with PrimeFaces 3.5 which was
> >> incompatible with JSF 2.2 and I had to wait for PrimeFaces 4.0 to come
> out.
> >>
> >>
> >> On 10/30/2013 03:17 PM, Kay Wrobel wrote:
> >>
> >>> I'm looking at CDI 1.1 spec <http://docs.jboss.org/cdi/**
> >>> spec/1.1/cdi-spec.html<
> http://docs.jboss.org/cdi/spec/1.1/cdi-spec.html>>
> >>> and ot looks like @ConversationScope is already part of CDI 1.1, no
> CODI
> >>> needed for that.
> >>>
> >>> GlassFish 4 includes CDI 1.1 by way of Weld API 2.0 <
> >>> http://www.cdi-spec.org/**download/ <http://www.cdi-spec.org/download/
> >>
> >>> which is bundled inside the weld-osgi-bundle.jar.
> >>>
> >>> On 10/30/2013 02:55 PM, Edilmar Alves wrote:
> >>>
> >>>> Hi friends,
> >>>>
> >>>> Thanks for help!
> >>>> Look at these situations...
> >>>> 1) Glassfish 3.1.1 and 3.1.2.2 has the same behaviour. But I use in
> >>>> production 3.1.1 because there are many servers using my webapp with
> >>>> this
> >>>> version, and it is not simple to upgrade.
> >>>> 2) I am testing Glassfish 4/JEE7 because Glassfish is the oficial
> server
> >>>> approved by the enterprise, I can't change for other server. Then, I
> >>>> test
> >>>> version 4 because there are some other functionalities I would like
to
> >>>> use
> >>>> from JEE7 in my webapp, but with CODI it is not possible to deploy.
> >>>> 3) I didn't understand the suggestion to use Myfaces 2.2. Has it a
> >>>> replacement for the CODI ConversationScoped, for example? Because this
> >>>> scope is used in many pages of my webapp, the main resource from CODI
> >>>> that
> >>>> I use and need an alternative. I can't use Myfaces, for example, to
> >>>> change
> >>>> Richfaces.
> >>>>
> >>>>
> >>>> 2013/10/30 Kay Wrobel <kay.wrobel@gmx.net>
> >>>>
> >>>>  Or he can stick with Glassfish 3.1.2.2, which is GlassFish' last
> final
> >>>>> release targeting Java EE 6. Unless he wants to incorporated new
> >>>>> features
> >>>>> that only Java EE 7 can provide, I'd say, stick with what currently
> >>>>> works.
> >>>>> Or try alternatives, such as TomEE 1.5.2 or TomEE 1.6 which still
> >>>>> targets
> >>>>> Java EE 6, or JBoss AS 7 which also targets Java EE 6.
> >>>>>
> >>>>>
> >>>>> On 10/30/2013 02:08 PM, Howard W. Smith, Jr. wrote:
> >>>>>
> >>>>>  Also, MyFaces 2.2 (beta, which has JavaEE7 JSF2.2 features) was
> >>>>>> just/recently released (yesterday, I think). Feel free to give
that
> a
> >>>>>> try.
> >>>>>>
> >>>>>> TomEE and tomcat8 is and/or will be targeting JEE7.
> >>>>>>
> >>>>>> is it a requirement to deploy to Glassfish 4, or you just want
to
> >>>>>> deploy
> >>>>>> to
> >>>>>> your local machine for testing purposes only?
> >>>>>>
> >>>>>> if for testing purposes only, download latest tomee 1.6 snapshot
and
> >>>>>> Myfaces 2.2 (beta), drop MyFaces 2.2 api + impl JARs in tomee/lib
> >>>>>> folder,
> >>>>>> and give them a try. and if you have any tomee-related questions,
> >>>>>> please
> >>>>>> subscribe to tomee user list and ask questions there. they are
> >>>>>> 'apache',
> >>>>>> too, and just as helpful there, 'too'. :)
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On Wed, Oct 30, 2013 at 2:59 PM, Kay Wrobel <kay.wrobel@gmx.net>
> >>>>>> wrote:
> >>>>>>
> >>>>>>   Hi Edilmar.
> >>>>>>
> >>>>>>> I had the same issues. There are incompatibilities apparently
with
> >>>>>>> JSF
> >>>>>>> 2.2
> >>>>>>> that ships with GlassFish 4. And JSF 2.2 has some much improved
CDI
> >>>>>>> features, such as proper @ViewScope.
> >>>>>>>
> >>>>>>> Kay
> >>>>>>>
> >>>>>>>
> >>>>>>> On 10/30/2013 01:03 PM, Edilmar Alves wrote:
> >>>>>>>
> >>>>>>>   Hi,
> >>>>>>>
> >>>>>>>> I have an webapp that runs fine in GF3.1.1 using Weld1.1
+ CODI +
> >>>>>>>> JPA2 +
> >>>>>>>> Hibernate4.2.6 + JSF2 + RichFaces4.3.4.
> >>>>>>>> Then, when I try to deploy in GF4, server.log arises
this error,
> and
> >>>>>>>> searching on Internet, some people said this is a
> >>>>>>>> problem with CODI, that is not compatible with JEE7
projects. Is
> >>>>>>>> this
> >>>>>>>> true?
> >>>>>>>> If it is not compatible, is there some alternative
> >>>>>>>> that makes the same as CODI ConversationScoped for example,
that I
> >>>>>>>> use
> >>>>>>>> in
> >>>>>>>> many places in my webapp?
> >>>>>>>>
> >>>>>>>>     [2013-07-29T10:44:42.206-0400] [glassfish 4.0] [SEVERE]
> >>>>>>>> [NCLS-CORE-00026]
> >>>>>>>> [javax.enterprise.system.core] [tid: _ThreadID=36
> >>>>>>>> _ThreadName=admin-listener(5)] [timeMillis: 1375109082206]
> >>>>>>>> [levelValue:
> >>>>>>>> 1000] [[
> >>>>>>>>
> >>>>>>>>      Exception during lifecycle processing
> >>>>>>>>
> >>>>>>>> org.glassfish.deployment.******common.DeploymentException:
CDI
> >>>>>>>> deployment
> >>>>>>>> failure:WELD-001408 Unsatisfied dependencies for type
[Validator]
> >>>>>>>> with
> >>>>>>>> qualifiers [@Default] at injection point [[UnbackedAnnotatedField]
> >>>>>>>> @Inject
> >>>>>>>> private
> >>>>>>>> org.hibernate.validator.******internal.cdi.interceptor.**
> >>>>>>>> ValidationInterceptor.******validator]
> >>>>>>>>
> >>>>>>>>        at org.glassfish.weld.******WeldDeployer.event(****
> >>>>>>>> WeldDeployer.java:225)
> >>>>>>>>
> >>>>>>>>        at org.glassfish.kernel.event.*****
> >>>>>>>> *EventsImpl.send(EventsImpl.**
> >>>>>>>> java:131)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.internal.data.******ApplicationInfo.load(**
> >>>>>>>> ApplicationInfo.java:328)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.server.******ApplicationLifecycle.**
> >>>>>>>> deploy(****
> >>>>>>>> ApplicationLifecycle.java:493)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.server.******ApplicationLifecycle.**
> >>>>>>>> deploy(****
> >>>>>>>> ApplicationLifecycle.java:219)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.deployment.******admin.DeployCommand.execute(**
> >>>>>>>> DeployCommand.java:491)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.admin.******CommandRunnerImpl$2$1.run(**
> >>>>>>>> CommandRunnerImpl.java:527)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.admin.******CommandRunnerImpl$2$1.run(**
> >>>>>>>> CommandRunnerImpl.java:523)
> >>>>>>>>
> >>>>>>>>        at java.security.******AccessController.doPrivileged(**
> >>>>>>>> ****Native
> >>>>>>>> Method)
> >>>>>>>>
> >>>>>>>>        at javax.security.auth.Subject.******doAs(Subject.java:356)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.admin.******CommandRunnerImpl$2.execute(****
> >>>>>>>> CommandRunnerImpl.java:522)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.admin.******CommandRunnerImpl.doCommand(****
> >>>>>>>> CommandRunnerImpl.java:546)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.admin.******CommandRunnerImpl.doCommand(****
> >>>>>>>> CommandRunnerImpl.java:1423)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.admin.******CommandRunnerImpl.access$**
> >>>>>>>> 1500(****
> >>>>>>>> CommandRunnerImpl.java:108)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.admin.******CommandRunnerImpl$**
> >>>>>>>> ExecutionContext.execute(******CommandRunnerImpl.java:1762)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.admin.******CommandRunnerImpl$**
> >>>>>>>> ExecutionContext.execute(******CommandRunnerImpl.java:1674)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.admin.rest.******resources.admin.******
> >>>>>>>> CommandResource.**
> >>>>>>>> executeCommand(******CommandResource.java:396)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.admin.rest.******resources.admin.******
> >>>>>>>> CommandResource.**
> >>>>>>>> execCommandSimpInMultOut(******CommandResource.java:234)
> >>>>>>>>
> >>>>>>>>        at sun.reflect.******NativeMethodAccessorImpl.******
> >>>>>>>> invoke0(Native
> >>>>>>>> Method)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> sun.reflect.******NativeMethodAccessorImpl.******invoke(**
> >>>>>>>> NativeMethodAccessorImpl.java:******57)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> sun.reflect.******DelegatingMethodAccessorImpl.******invoke(**
> >>>>>>>> DelegatingMethodAccessorImpl.******java:43)
> >>>>>>>>
> >>>>>>>>        at java.lang.reflect.Method.******invoke(Method.java:601)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******model.internal.**
> >>>>>>>> ResourceMethodInvocationHandle******rFactory$1.invoke(**
> >>>>>>>> ResourceMethodInvocationHandle******rFactory.java:81)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******model.internal.**
> >>>>>>>> AbstractJavaResourceMethodDisp******atcher.invoke(**
> >>>>>>>> AbstractJavaResourceMethodDisp******atcher.java:125)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******model.internal.**
> >>>>>>>> JavaResourceMethodDispatcherPr******ovider$ResponseOutInvoker.**
> >>>>>>>> ****
> >>>>>>>> doDispatch(**
> >>>>>>>> JavaResourceMethodDispatcherPr******ovider.java:152)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******model.internal.**
> >>>>>>>> AbstractJavaResourceMethodDisp******atcher.dispatch(**
> >>>>>>>> AbstractJavaResourceMethodDisp******atcher.java:91)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******model.ResourceMethodInvoker.****
> >>>>>>>> invoke(ResourceMethodInvoker.******java:346)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******model.ResourceMethodInvoker.****
> >>>>>>>> apply(ResourceMethodInvoker.******java:341)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******model.ResourceMethodInvoker.****
> >>>>>>>> apply(ResourceMethodInvoker.******java:101)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******ServerRuntime$1.run(**
> >>>>>>>> ServerRuntime.java:224)
> >>>>>>>>
> >>>>>>>>        at org.glassfish.jersey.internal.**
> >>>>>>>> ****Errors$1.call(Errors.java:****
> >>>>>>>> 271)
> >>>>>>>>
> >>>>>>>>        at org.glassfish.jersey.internal.**
> >>>>>>>> ****Errors$1.call(Errors.java:****
> >>>>>>>> 267)
> >>>>>>>>
> >>>>>>>>        at org.glassfish.jersey.internal.**
> >>>>>>>> ****Errors.process(Errors.**java:*
> >>>>>>>> ***315)
> >>>>>>>>
> >>>>>>>>        at org.glassfish.jersey.internal.**
> >>>>>>>> ****Errors.process(Errors.**java:*
> >>>>>>>> ***297)
> >>>>>>>>
> >>>>>>>>        at org.glassfish.jersey.internal.**
> >>>>>>>> ****Errors.process(Errors.**java:*
> >>>>>>>> ***267)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.process.******internal.RequestScope.**
> >>>>>>>> runInScope(RequestScope.java:******317)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******ServerRuntime.process(**
> >>>>>>>> ServerRuntime.java:198)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.server.******ApplicationHandler.handle(**
> >>>>>>>> ApplicationHandler.java:946)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.jersey.grizzly2.******httpserver.**
> >>>>>>>> GrizzlyHttpContainer.service(******GrizzlyHttpContainer.java:***
> >>>>>>>> *331)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>>
> org.glassfish.admin.rest.******adapter.******JerseyContainerCommandService$
> >>>>>>>>
> >>>>>>>> ****
> >>>>>>>> 3.service(******JerseyContainerCommandService.******java:165)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.admin.rest.******adapter.RestAdapter.service(**
> >>>>>>>> RestAdapter.java:181)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> com.sun.enterprise.v3.******services.impl.ContainerMapper.******
> >>>>>>>> service(ContainerMapper.java:******246)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.http.******server.HttpHandler.**
> >>>>>>>> runService(****
> >>>>>>>> HttpHandler.java:191)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.http.******server.HttpHandler.doHandle(****
> >>>>>>>> HttpHandler.java:168)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.http.******server.HttpServerFilter.**
> >>>>>>>> handleRead(HttpServerFilter.******java:189)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.******filterchain.ExecutorResolver$******
> >>>>>>>> 9.execute(ExecutorResolver.******java:119)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.******filterchain.******
> >>>>>>>> DefaultFilterChain.****
> >>>>>>>> executeFilter(
> >>>>>>>> **DefaultFilterChain.java:288)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>>
> org.glassfish.grizzly.******filterchain.******DefaultFilterChain.**
> >>>>>>>> executeChainPart(******DefaultFilterChain.java:206)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>>
> org.glassfish.grizzly.******filterchain.******DefaultFilterChain.execute(**
> >>>>>>>>
> >>>>>>>> DefaultFilterChain.java:136)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>>
> org.glassfish.grizzly.******filterchain.******DefaultFilterChain.process(**
> >>>>>>>>
> >>>>>>>> DefaultFilterChain.java:114)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.******ProcessorExecutor.execute(**
> >>>>>>>> ProcessorExecutor.java:77)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.nio.******transport.TCPNIOTransport.**
> >>>>>>>> fireIOEvent(TCPNIOTransport.******java:838)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.******strategies.AbstractIOStrategy.****
> >>>>>>>> **fireIOEvent(**
> >>>>>>>> AbstractIOStrategy.java:113)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>>
> org.glassfish.grizzly.******strategies.******WorkerThreadIOStrategy.run0(**
> >>>>>>>>
> >>>>>>>> WorkerThreadIOStrategy.java:******115)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>>
> org.glassfish.grizzly.******strategies.******WorkerThreadIOStrategy.access$
> >>>>>>>>
> >>>>>>>> ****
> >>>>>>>> 100(WorkerThreadIOStrategy.******java:55)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.******strategies.******
> >>>>>>>> WorkerThreadIOStrategy$**
> >>>>>>>> WorkerThreadRunnable.run(******WorkerThreadIOStrategy.java:****
> >>>>>>>> **135)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.******threadpool.AbstractThreadPool$****
> >>>>>>>> **Worker.doWork(**
> >>>>>>>> AbstractThreadPool.java:564)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.glassfish.grizzly.******threadpool.AbstractThreadPool$******
> >>>>>>>> Worker.run(AbstractThreadPool.******java:544)
> >>>>>>>>
> >>>>>>>>        at java.lang.Thread.run(Thread.******java:722)
> >>>>>>>>
> >>>>>>>> Caused by: org.jboss.weld.exceptions.******DeploymentException:
> >>>>>>>> WELD-001408
> >>>>>>>> Unsatisfied dependencies for type [Validator] with qualifiers
> >>>>>>>> [@Default]
> >>>>>>>> at
> >>>>>>>> injection point [[UnbackedAnnotatedField] @Inject private
> >>>>>>>> org.hibernate.validator.******internal.cdi.interceptor.**
> >>>>>>>> ValidationInterceptor.******validator]
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.jboss.weld.bootstrap.******Validator.****
> >>>>>>>> validateInjectionPointForDeplo******
> >>>>>>>> ymentProblems(Validator.java:******403)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.jboss.weld.bootstrap.******Validator.******
> >>>>>>>> validateInjectionPoint(**
> >>>>>>>> Validator.java:325)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>>
> org.jboss.weld.bootstrap.******Validator.validateInterceptor(******
> >>>>>>>> Validator.java:554)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.jboss.weld.bootstrap.******Validator.******
> >>>>>>>> validateInterceptors(**
> >>>>>>>> Validator.java:530)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.jboss.weld.bootstrap.******Validator.validateDeployment(******
> >>>>>>>> Validator.java:479)
> >>>>>>>>
> >>>>>>>>        at
> >>>>>>>> org.jboss.weld.bootstrap.******WeldBootstrap.validateBeans(**
> >>>>>>>> WeldBootstrap.java:536)
> >>>>>>>>
> >>>>>>>>        at org.glassfish.weld.******WeldDeployer.event(****
> >>>>>>>> WeldDeployer.java:216)
> >>>>>>>>
> >>>>>>>>        ... 58 more
> >>>>>>>>
> >>>>>>>> ]]
> >>>>>>>>
> >>>>>>>> [2013-07-29T10:44:42.208-0400] [glassfish 4.0] [SEVERE]
[]
> >>>>>>>> [javax.enterprise.system.core] [tid: _ThreadID=36
> >>>>>>>> _ThreadName=admin-listener(5)] [timeMillis: 1375109082208]
> >>>>>>>> [levelValue:
> >>>>>>>> 1000] [[
> >>>>>>>>
> >>>>>>>>      Exception while loading the app]]
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>
> >>>
> >>>
> >>
> >
> >
> > --
> > Edilmar Alves
> > Analista de Sistemas, VascaĆ­no, Rockeiro e Nadador
> > face: /edilmar.alves, twitter: @edilista, skype: edilmar
> >
>
>
>
> --
> Edilmar Alves
> Analista de Sistemas, VascaĆ­no, Rockeiro e Nadador
> face: /edilmar.alves, twitter: @edilista, skype: edilmar
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message