You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@jclouds.apache.org by Édouard Mercier sur Gmail <th...@gmail.com> on 2015/03/02 22:16:35 UTC

Any support for running jclouds on the Google App Engine?

Hello.

I've been digging a long time, both using the v1.8.1 and the
v2.0.0-SNAPSHOT, and found no way to jclouds BlobStore to work on the
current GAE Java flavor v1.9.18.

When attempting to use the "BlobStore.putBlob()" method, I get this

"""
java.lang.SecurityException: java.lang.IllegalAccessException: Reflection
is not allowed on java.lang.String(int,int,char[])
at com.google.appengine.runtime.Request.process-
6c82fef5146f94d9(Request.java)
at java.lang.reflect.Constructor.setAccessible(Constructor.java:40)
at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:156)
at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:152)
at com.google.common.cache.LocalCache$LoadingValueReference.
loadFuture(LocalCache.java:3527)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.
java:2282)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
at com.google.common.cache.LocalCache$LocalLoadingCache.
get(LocalCache.java:4824)
at org.jclouds.reflect.Reflection2.get(Reflection2.java:345)
at org.jclouds.reflect.Reflection2.constructors(Reflection2.java:99)
at org.jclouds.json.internal.NamingStrategies$AnnotationConstructorNamingStr
ategy.getDeserializer(NamingStrategies.java:248)
at org.jclouds.json.internal.DeserializationConstructorAndR
eflectiveTypeAdapterFactory.create(DeserializationConstructorAndR
eflectiveTypeAdapterFactory.java:122)
at com.google.gson.Gson.getAdapter(Gson.java:358)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(
ReflectiveTypeAdapterFactory.java:46)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(
ReflectiveTypeAdapterFactory.java:84)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
createBoundField(ReflectiveTypeAdapterFactory.java:83)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
getBoundFields(ReflectiveTypeAdapterFactory.java:129)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(
ReflectiveTypeAdapterFactory.java:75)
at com.google.gson.Gson.getAdapter(Gson.java:358)
at com.google.gson.Gson.toJson(Gson.java:587)
at com.google.gson.Gson.toJson(Gson.java:574)
at com.google.gson.Gson.toJson(Gson.java:529)
at com.google.gson.Gson.toJson(Gson.java:509)
at org.jclouds.json.internal.GsonWrapper.toJson(GsonWrapper.java:52)
at org.jclouds.googlecloudstorage.binders.MultipartUploadBinder.
bindToRequest(MultipartUploadBinder.java:53)
at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
RestAnnotationProcessor.java:324)
at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
RestAnnotationProcessor.java:129)
at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(
InvokeHttpMethod.java:188)
at org.jclouds.rest.internal.InvokeHttpMethod.invoke(
InvokeHttpMethod.java:84)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(
InvokeHttpMethod.java:73)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(
InvokeHttpMethod.java:44)
at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.
handleInvocation(FunctionalReflection.java:117)
at com.google.common.reflect.AbstractInvocationHandler.invoke(
AbstractInvocationHandler.java:87)
at com.sun.proxy.$Proxy62.multipartUpload(Unknown Source)
at org.jclouds.googlecloudstorage.blobstore.GoogleCloudStorageBlobStore.
putBlob(GoogleCloudStorageBlobStore.java:224)
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:45)
at com.google.inject.internal.DelegatingInvocationHandler.invoke(
DelegatingInvocationHandler.java:37)
at com.sun.proxy.$Proxy60.putBlob(Unknown Source)
"""

exception (this one was caused using jclouds v2.0.0-SNAPSHOT).

I've seen that there has been initiatives to have jclouds working on the
GAE in the past, but would like to know if this is still on the roadmap.
Any help which shows how to have jclouds BlobStore working on GAE is very
welcome.

Thank you for your support. Regards,
Édouard

Re: Any support for running jclouds on the Google App Engine?

Posted by Édouard sur Smart&Soft <ed...@smartnsoft.com>.
Understood: here is the ticket:
https://issues.apache.org/jira/browse/JCLOUDS-836. Hope that someone will
put his/her eyes shortly, because jclouds would really save us much code ;)
Regards, Édouard

2015-03-04 9:08 GMT+01:00 Ignasi Barrera <na...@apache.org>:

> Yes, an account is required. I'd open the issue myself but if you don't
> mind creating an account you'll be able to describe it better and provide
> better context.
>
> Thanks!
> El 04/03/2015 07:59, "Édouard sur Smart&Soft" <ed...@smartnsoft.com>
> escribió:
>
> Thank you Ignassi for your detailed answer.
>>
>> I'm pretty sure that if jclouds is supported on GAE, you will have many
>> newcomers. Sure, I will open a JIRA ticket, but can you confirm that this
>> requires me to create an account, first ?
>>
>> Thank you for your support. Regards,
>> Édouard
>>
>> 2015-03-03 23:05 GMT+01:00 Ignasi Barrera <na...@apache.org>:
>>
>>> Hi Édouard,
>>>
>>> We have the GAE driver that used to work, but that was more about
>>> configuring a single-threaded executor and some other http related stuff.
>>>
>>> As far as I know, the GAE support has been untested for several
>>> releases, as I believe the community is not using it, but it is good to
>>> have a real use case!
>>>
>>> I haven't seen reflection restrictions before, but I'm not a GAE user,
>>> so I don't know the details and its limitations. Looking at the
>>> stacktrace, it seems that the failure happens when trying to build the
>>> deserialization context. jclouds uses Gson to deserialize the API
>>> responses, and it uses reflection to make sure it will be able to build the
>>> corresponding Java object, by making all the constructors accessible.
>>>
>>> This seems to be not allowed in GAE, and we could try to configure the
>>> GAE module to "disable" that reflection, and use only the visible
>>> constructor. However, this has been out there since 2013 and I'm not sure
>>> if working only with the visible constructors would be compatible with the
>>> current domain model of all providers.
>>>
>>> In any case, it is worth giving it a try. Mind opening a JIRA [1] issue
>>> so we can properly track this?
>>>
>>> Thanks!
>>>
>>> I.
>>>
>>> [1] https://issues.apache.org/jira/browse/jclouds
>>>
>>> On 2 March 2015 at 22:16, Édouard Mercier sur Gmail <
>>> the.edouard.mercier@gmail.com> wrote:
>>>
>>>> Hello.
>>>>
>>>> I've been digging a long time, both using the v1.8.1 and the
>>>> v2.0.0-SNAPSHOT, and found no way to jclouds BlobStore to work on the
>>>> current GAE Java flavor v1.9.18.
>>>>
>>>> When attempting to use the "BlobStore.putBlob()" method, I get this
>>>>
>>>> """
>>>> java.lang.SecurityException: java.lang.IllegalAccessException:
>>>> Reflection is not allowed on java.lang.String(int,int,char[])
>>>> at com.google.appengine.runtime.Request.process-
>>>> 6c82fef5146f94d9(Request.java)
>>>> at java.lang.reflect.Constructor.setAccessible(Constructor.java:40)
>>>> at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:156)
>>>> at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:152)
>>>> at com.google.common.cache.LocalCache$LoadingValueReference.
>>>> loadFuture(LocalCache.java:3527)
>>>> at com.google.common.cache.LocalCache$Segment.loadSync(
>>>> LocalCache.java:2319)
>>>> at com.google.common.cache.LocalCache$Segment.
>>>> lockedGetOrLoad(LocalCache.java:2282)
>>>> at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
>>>> at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
>>>> at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
>>>> at com.google.common.cache.LocalCache$LocalLoadingCache.
>>>> get(LocalCache.java:4824)
>>>> at org.jclouds.reflect.Reflection2.get(Reflection2.java:345)
>>>> at org.jclouds.reflect.Reflection2.constructors(Reflection2.java:99)
>>>> at org.jclouds.json.internal.NamingStrategies$
>>>> AnnotationConstructorNamingStrategy.getDeserializer(
>>>> NamingStrategies.java:248)
>>>> at org.jclouds.json.internal.DeserializationConstructorAndR
>>>> eflectiveTypeAdapterFactory.create(DeserializationConstructorAndR
>>>> eflectiveTypeAdapterFactory.java:122)
>>>> at com.google.gson.Gson.getAdapter(Gson.java:358)
>>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>>>> getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
>>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>>>> access$100(ReflectiveTypeAdapterFactory.java:46)
>>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(
>>>> ReflectiveTypeAdapterFactory.java:84)
>>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>>>> createBoundField(ReflectiveTypeAdapterFactory.java:83)
>>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>>>> getBoundFields(ReflectiveTypeAdapterFactory.java:129)
>>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(
>>>> ReflectiveTypeAdapterFactory.java:75)
>>>> at com.google.gson.Gson.getAdapter(Gson.java:358)
>>>> at com.google.gson.Gson.toJson(Gson.java:587)
>>>> at com.google.gson.Gson.toJson(Gson.java:574)
>>>> at com.google.gson.Gson.toJson(Gson.java:529)
>>>> at com.google.gson.Gson.toJson(Gson.java:509)
>>>> at org.jclouds.json.internal.GsonWrapper.toJson(GsonWrapper.java:52)
>>>> at org.jclouds.googlecloudstorage.binders.MultipartUploadBinder.
>>>> bindToRequest(MultipartUploadBinder.java:53)
>>>> at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
>>>> RestAnnotationProcessor.java:324)
>>>> at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
>>>> RestAnnotationProcessor.java:129)
>>>> at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(
>>>> InvokeHttpMethod.java:188)
>>>> at org.jclouds.rest.internal.InvokeHttpMethod.invoke(
>>>> InvokeHttpMethod.java:84)
>>>> at org.jclouds.rest.internal.InvokeHttpMethod.apply(
>>>> InvokeHttpMethod.java:73)
>>>> at org.jclouds.rest.internal.InvokeHttpMethod.apply(
>>>> InvokeHttpMethod.java:44)
>>>> at org.jclouds.reflect.FunctionalReflection$
>>>> FunctionalInvocationHandler.handleInvocation(
>>>> FunctionalReflection.java:117)
>>>> at com.google.common.reflect.AbstractInvocationHandler.invoke(
>>>> AbstractInvocationHandler.java:87)
>>>> at com.sun.proxy.$Proxy62.multipartUpload(Unknown Source)
>>>> at org.jclouds.googlecloudstorage.blobstore.
>>>> GoogleCloudStorageBlobStore.putBlob(GoogleCloudStorageBlobStore.
>>>> java:224)
>>>> 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:45)
>>>> at com.google.inject.internal.DelegatingInvocationHandler.invoke(
>>>> DelegatingInvocationHandler.java:37)
>>>> at com.sun.proxy.$Proxy60.putBlob(Unknown Source)
>>>> """
>>>>
>>>> exception (this one was caused using jclouds v2.0.0-SNAPSHOT).
>>>>
>>>> I've seen that there has been initiatives to have jclouds working on
>>>> the GAE in the past, but would like to know if this is still on the
>>>> roadmap. Any help which shows how to have jclouds BlobStore working on
>>>> GAE is very welcome.
>>>>
>>>> Thank you for your support. Regards,
>>>> Édouard
>>>>
>>>
>>>
>>

Re: Any support for running jclouds on the Google App Engine?

Posted by Ignasi Barrera <na...@apache.org>.
Yes, an account is required. I'd open the issue myself but if you don't
mind creating an account you'll be able to describe it better and provide
better context.

Thanks!
El 04/03/2015 07:59, "Édouard sur Smart&Soft" <ed...@smartnsoft.com>
escribió:

> Thank you Ignassi for your detailed answer.
>
> I'm pretty sure that if jclouds is supported on GAE, you will have many
> newcomers. Sure, I will open a JIRA ticket, but can you confirm that this
> requires me to create an account, first ?
>
> Thank you for your support. Regards,
> Édouard
>
> 2015-03-03 23:05 GMT+01:00 Ignasi Barrera <na...@apache.org>:
>
>> Hi Édouard,
>>
>> We have the GAE driver that used to work, but that was more about
>> configuring a single-threaded executor and some other http related stuff.
>>
>> As far as I know, the GAE support has been untested for several releases,
>> as I believe the community is not using it, but it is good to have a real
>> use case!
>>
>> I haven't seen reflection restrictions before, but I'm not a GAE user, so
>> I don't know the details and its limitations. Looking at the stacktrace,
>> it seems that the failure happens when trying to build the deserialization
>> context. jclouds uses Gson to deserialize the API responses, and it uses
>> reflection to make sure it will be able to build the corresponding Java
>> object, by making all the constructors accessible.
>>
>> This seems to be not allowed in GAE, and we could try to configure the
>> GAE module to "disable" that reflection, and use only the visible
>> constructor. However, this has been out there since 2013 and I'm not sure
>> if working only with the visible constructors would be compatible with the
>> current domain model of all providers.
>>
>> In any case, it is worth giving it a try. Mind opening a JIRA [1] issue
>> so we can properly track this?
>>
>> Thanks!
>>
>> I.
>>
>> [1] https://issues.apache.org/jira/browse/jclouds
>>
>> On 2 March 2015 at 22:16, Édouard Mercier sur Gmail <
>> the.edouard.mercier@gmail.com> wrote:
>>
>>> Hello.
>>>
>>> I've been digging a long time, both using the v1.8.1 and the
>>> v2.0.0-SNAPSHOT, and found no way to jclouds BlobStore to work on the
>>> current GAE Java flavor v1.9.18.
>>>
>>> When attempting to use the "BlobStore.putBlob()" method, I get this
>>>
>>> """
>>> java.lang.SecurityException: java.lang.IllegalAccessException:
>>> Reflection is not allowed on java.lang.String(int,int,char[])
>>> at com.google.appengine.runtime.Request.process-
>>> 6c82fef5146f94d9(Request.java)
>>> at java.lang.reflect.Constructor.setAccessible(Constructor.java:40)
>>> at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:156)
>>> at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:152)
>>> at com.google.common.cache.LocalCache$LoadingValueReference.
>>> loadFuture(LocalCache.java:3527)
>>> at com.google.common.cache.LocalCache$Segment.loadSync(
>>> LocalCache.java:2319)
>>> at com.google.common.cache.LocalCache$Segment.
>>> lockedGetOrLoad(LocalCache.java:2282)
>>> at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
>>> at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
>>> at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
>>> at com.google.common.cache.LocalCache$LocalLoadingCache.
>>> get(LocalCache.java:4824)
>>> at org.jclouds.reflect.Reflection2.get(Reflection2.java:345)
>>> at org.jclouds.reflect.Reflection2.constructors(Reflection2.java:99)
>>> at org.jclouds.json.internal.NamingStrategies$
>>> AnnotationConstructorNamingStrategy.getDeserializer(
>>> NamingStrategies.java:248)
>>> at org.jclouds.json.internal.DeserializationConstructorAndR
>>> eflectiveTypeAdapterFactory.create(DeserializationConstructorAndR
>>> eflectiveTypeAdapterFactory.java:122)
>>> at com.google.gson.Gson.getAdapter(Gson.java:358)
>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>>> getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>>> access$100(ReflectiveTypeAdapterFactory.java:46)
>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(
>>> ReflectiveTypeAdapterFactory.java:84)
>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>>> createBoundField(ReflectiveTypeAdapterFactory.java:83)
>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>>> getBoundFields(ReflectiveTypeAdapterFactory.java:129)
>>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(
>>> ReflectiveTypeAdapterFactory.java:75)
>>> at com.google.gson.Gson.getAdapter(Gson.java:358)
>>> at com.google.gson.Gson.toJson(Gson.java:587)
>>> at com.google.gson.Gson.toJson(Gson.java:574)
>>> at com.google.gson.Gson.toJson(Gson.java:529)
>>> at com.google.gson.Gson.toJson(Gson.java:509)
>>> at org.jclouds.json.internal.GsonWrapper.toJson(GsonWrapper.java:52)
>>> at org.jclouds.googlecloudstorage.binders.MultipartUploadBinder.
>>> bindToRequest(MultipartUploadBinder.java:53)
>>> at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
>>> RestAnnotationProcessor.java:324)
>>> at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
>>> RestAnnotationProcessor.java:129)
>>> at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(
>>> InvokeHttpMethod.java:188)
>>> at org.jclouds.rest.internal.InvokeHttpMethod.invoke(
>>> InvokeHttpMethod.java:84)
>>> at org.jclouds.rest.internal.InvokeHttpMethod.apply(
>>> InvokeHttpMethod.java:73)
>>> at org.jclouds.rest.internal.InvokeHttpMethod.apply(
>>> InvokeHttpMethod.java:44)
>>> at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.
>>> handleInvocation(FunctionalReflection.java:117)
>>> at com.google.common.reflect.AbstractInvocationHandler.invoke(
>>> AbstractInvocationHandler.java:87)
>>> at com.sun.proxy.$Proxy62.multipartUpload(Unknown Source)
>>> at org.jclouds.googlecloudstorage.blobstore.GoogleCloudStorageBlobStore.
>>> putBlob(GoogleCloudStorageBlobStore.java:224)
>>> 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:45)
>>> at com.google.inject.internal.DelegatingInvocationHandler.invoke(
>>> DelegatingInvocationHandler.java:37)
>>> at com.sun.proxy.$Proxy60.putBlob(Unknown Source)
>>> """
>>>
>>> exception (this one was caused using jclouds v2.0.0-SNAPSHOT).
>>>
>>> I've seen that there has been initiatives to have jclouds working on
>>> the GAE in the past, but would like to know if this is still on the
>>> roadmap. Any help which shows how to have jclouds BlobStore working on
>>> GAE is very welcome.
>>>
>>> Thank you for your support. Regards,
>>> Édouard
>>>
>>
>>
>

Re: Any support for running jclouds on the Google App Engine?

Posted by Édouard sur Smart&Soft <ed...@smartnsoft.com>.
Thank you Ignassi for your detailed answer.

I'm pretty sure that if jclouds is supported on GAE, you will have many
newcomers. Sure, I will open a JIRA ticket, but can you confirm that this
requires me to create an account, first ?

Thank you for your support. Regards,
Édouard

2015-03-03 23:05 GMT+01:00 Ignasi Barrera <na...@apache.org>:

> Hi Édouard,
>
> We have the GAE driver that used to work, but that was more about
> configuring a single-threaded executor and some other http related stuff.
>
> As far as I know, the GAE support has been untested for several releases,
> as I believe the community is not using it, but it is good to have a real
> use case!
>
> I haven't seen reflection restrictions before, but I'm not a GAE user, so
> I don't know the details and its limitations. Looking at the stacktrace,
> it seems that the failure happens when trying to build the deserialization
> context. jclouds uses Gson to deserialize the API responses, and it uses
> reflection to make sure it will be able to build the corresponding Java
> object, by making all the constructors accessible.
>
> This seems to be not allowed in GAE, and we could try to configure the GAE
> module to "disable" that reflection, and use only the visible constructor.
> However, this has been out there since 2013 and I'm not sure if working
> only with the visible constructors would be compatible with the current
> domain model of all providers.
>
> In any case, it is worth giving it a try. Mind opening a JIRA [1] issue so
> we can properly track this?
>
> Thanks!
>
> I.
>
> [1] https://issues.apache.org/jira/browse/jclouds
>
> On 2 March 2015 at 22:16, Édouard Mercier sur Gmail <
> the.edouard.mercier@gmail.com> wrote:
>
>> Hello.
>>
>> I've been digging a long time, both using the v1.8.1 and the
>> v2.0.0-SNAPSHOT, and found no way to jclouds BlobStore to work on the
>> current GAE Java flavor v1.9.18.
>>
>> When attempting to use the "BlobStore.putBlob()" method, I get this
>>
>> """
>> java.lang.SecurityException: java.lang.IllegalAccessException:
>> Reflection is not allowed on java.lang.String(int,int,char[])
>> at com.google.appengine.runtime.Request.process-
>> 6c82fef5146f94d9(Request.java)
>> at java.lang.reflect.Constructor.setAccessible(Constructor.java:40)
>> at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:156)
>> at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:152)
>> at com.google.common.cache.LocalCache$LoadingValueReference.
>> loadFuture(LocalCache.java:3527)
>> at com.google.common.cache.LocalCache$Segment.loadSync(
>> LocalCache.java:2319)
>> at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.
>> java:2282)
>> at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
>> at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
>> at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
>> at com.google.common.cache.LocalCache$LocalLoadingCache.
>> get(LocalCache.java:4824)
>> at org.jclouds.reflect.Reflection2.get(Reflection2.java:345)
>> at org.jclouds.reflect.Reflection2.constructors(Reflection2.java:99)
>> at org.jclouds.json.internal.NamingStrategies$
>> AnnotationConstructorNamingStrategy.getDeserializer(
>> NamingStrategies.java:248)
>> at org.jclouds.json.internal.DeserializationConstructorAndR
>> eflectiveTypeAdapterFactory.create(DeserializationConstructorAndR
>> eflectiveTypeAdapterFactory.java:122)
>> at com.google.gson.Gson.getAdapter(Gson.java:358)
>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>> getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(
>> ReflectiveTypeAdapterFactory.java:46)
>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(
>> ReflectiveTypeAdapterFactory.java:84)
>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>> createBoundField(ReflectiveTypeAdapterFactory.java:83)
>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
>> getBoundFields(ReflectiveTypeAdapterFactory.java:129)
>> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(
>> ReflectiveTypeAdapterFactory.java:75)
>> at com.google.gson.Gson.getAdapter(Gson.java:358)
>> at com.google.gson.Gson.toJson(Gson.java:587)
>> at com.google.gson.Gson.toJson(Gson.java:574)
>> at com.google.gson.Gson.toJson(Gson.java:529)
>> at com.google.gson.Gson.toJson(Gson.java:509)
>> at org.jclouds.json.internal.GsonWrapper.toJson(GsonWrapper.java:52)
>> at org.jclouds.googlecloudstorage.binders.MultipartUploadBinder.
>> bindToRequest(MultipartUploadBinder.java:53)
>> at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
>> RestAnnotationProcessor.java:324)
>> at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
>> RestAnnotationProcessor.java:129)
>> at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(
>> InvokeHttpMethod.java:188)
>> at org.jclouds.rest.internal.InvokeHttpMethod.invoke(
>> InvokeHttpMethod.java:84)
>> at org.jclouds.rest.internal.InvokeHttpMethod.apply(
>> InvokeHttpMethod.java:73)
>> at org.jclouds.rest.internal.InvokeHttpMethod.apply(
>> InvokeHttpMethod.java:44)
>> at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.
>> handleInvocation(FunctionalReflection.java:117)
>> at com.google.common.reflect.AbstractInvocationHandler.invoke(
>> AbstractInvocationHandler.java:87)
>> at com.sun.proxy.$Proxy62.multipartUpload(Unknown Source)
>> at org.jclouds.googlecloudstorage.blobstore.GoogleCloudStorageBlobStore.
>> putBlob(GoogleCloudStorageBlobStore.java:224)
>> 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:45)
>> at com.google.inject.internal.DelegatingInvocationHandler.invoke(
>> DelegatingInvocationHandler.java:37)
>> at com.sun.proxy.$Proxy60.putBlob(Unknown Source)
>> """
>>
>> exception (this one was caused using jclouds v2.0.0-SNAPSHOT).
>>
>> I've seen that there has been initiatives to have jclouds working on the
>> GAE in the past, but would like to know if this is still on the roadmap.
>> Any help which shows how to have jclouds BlobStore working on GAE is
>> very welcome.
>>
>> Thank you for your support. Regards,
>> Édouard
>>
>
>

Re: Any support for running jclouds on the Google App Engine?

Posted by Ignasi Barrera <na...@apache.org>.
Hi Édouard,

We have the GAE driver that used to work, but that was more about
configuring a single-threaded executor and some other http related stuff.

As far as I know, the GAE support has been untested for several releases,
as I believe the community is not using it, but it is good to have a real
use case!

I haven't seen reflection restrictions before, but I'm not a GAE user, so I
don't know the details and its limitations. Looking at the stacktrace, it
seems that the failure happens when trying to build the deserialization
context. jclouds uses Gson to deserialize the API responses, and it uses
reflection to make sure it will be able to build the corresponding Java
object, by making all the constructors accessible.

This seems to be not allowed in GAE, and we could try to configure the GAE
module to "disable" that reflection, and use only the visible constructor.
However, this has been out there since 2013 and I'm not sure if working
only with the visible constructors would be compatible with the current
domain model of all providers.

In any case, it is worth giving it a try. Mind opening a JIRA [1] issue so
we can properly track this?

Thanks!

I.

[1] https://issues.apache.org/jira/browse/jclouds

On 2 March 2015 at 22:16, Édouard Mercier sur Gmail <
the.edouard.mercier@gmail.com> wrote:

> Hello.
>
> I've been digging a long time, both using the v1.8.1 and the
> v2.0.0-SNAPSHOT, and found no way to jclouds BlobStore to work on the
> current GAE Java flavor v1.9.18.
>
> When attempting to use the "BlobStore.putBlob()" method, I get this
>
> """
> java.lang.SecurityException: java.lang.IllegalAccessException: Reflection
> is not allowed on java.lang.String(int,int,char[])
> at com.google.appengine.runtime.Request.process-
> 6c82fef5146f94d9(Request.java)
> at java.lang.reflect.Constructor.setAccessible(Constructor.java:40)
> at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:156)
> at org.jclouds.reflect.Reflection2$1.load(Reflection2.java:152)
> at com.google.common.cache.LocalCache$LoadingValueReference.
> loadFuture(LocalCache.java:3527)
> at com.google.common.cache.LocalCache$Segment.loadSync(
> LocalCache.java:2319)
> at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.
> java:2282)
> at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
> at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
> at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
> at com.google.common.cache.LocalCache$LocalLoadingCache.
> get(LocalCache.java:4824)
> at org.jclouds.reflect.Reflection2.get(Reflection2.java:345)
> at org.jclouds.reflect.Reflection2.constructors(Reflection2.java:99)
> at org.jclouds.json.internal.NamingStrategies$
> AnnotationConstructorNamingStrategy.getDeserializer(
> NamingStrategies.java:248)
> at org.jclouds.json.internal.DeserializationConstructorAndR
> eflectiveTypeAdapterFactory.create(DeserializationConstructorAndR
> eflectiveTypeAdapterFactory.java:122)
> at com.google.gson.Gson.getAdapter(Gson.java:358)
> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
> getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(
> ReflectiveTypeAdapterFactory.java:46)
> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(
> ReflectiveTypeAdapterFactory.java:84)
> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
> createBoundField(ReflectiveTypeAdapterFactory.java:83)
> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.
> getBoundFields(ReflectiveTypeAdapterFactory.java:129)
> at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(
> ReflectiveTypeAdapterFactory.java:75)
> at com.google.gson.Gson.getAdapter(Gson.java:358)
> at com.google.gson.Gson.toJson(Gson.java:587)
> at com.google.gson.Gson.toJson(Gson.java:574)
> at com.google.gson.Gson.toJson(Gson.java:529)
> at com.google.gson.Gson.toJson(Gson.java:509)
> at org.jclouds.json.internal.GsonWrapper.toJson(GsonWrapper.java:52)
> at org.jclouds.googlecloudstorage.binders.MultipartUploadBinder.
> bindToRequest(MultipartUploadBinder.java:53)
> at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
> RestAnnotationProcessor.java:324)
> at org.jclouds.rest.internal.RestAnnotationProcessor.apply(
> RestAnnotationProcessor.java:129)
> at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(
> InvokeHttpMethod.java:188)
> at org.jclouds.rest.internal.InvokeHttpMethod.invoke(
> InvokeHttpMethod.java:84)
> at org.jclouds.rest.internal.InvokeHttpMethod.apply(
> InvokeHttpMethod.java:73)
> at org.jclouds.rest.internal.InvokeHttpMethod.apply(
> InvokeHttpMethod.java:44)
> at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.
> handleInvocation(FunctionalReflection.java:117)
> at com.google.common.reflect.AbstractInvocationHandler.invoke(
> AbstractInvocationHandler.java:87)
> at com.sun.proxy.$Proxy62.multipartUpload(Unknown Source)
> at org.jclouds.googlecloudstorage.blobstore.GoogleCloudStorageBlobStore.
> putBlob(GoogleCloudStorageBlobStore.java:224)
> 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:45)
> at com.google.inject.internal.DelegatingInvocationHandler.invoke(
> DelegatingInvocationHandler.java:37)
> at com.sun.proxy.$Proxy60.putBlob(Unknown Source)
> """
>
> exception (this one was caused using jclouds v2.0.0-SNAPSHOT).
>
> I've seen that there has been initiatives to have jclouds working on the
> GAE in the past, but would like to know if this is still on the roadmap.
> Any help which shows how to have jclouds BlobStore working on GAE is very
> welcome.
>
> Thank you for your support. Regards,
> Édouard
>