Hi  Toby:
Thanks for you feedback.

I've did a small prototype: http://ask-me.appspot.com/ . It's working fine
locally, but it's throwing the following exception when executed on the
app-engine:

javax.servlet.ServletContext log: Exception while dispatching incoming RPC
call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public
abstract com.albertattard.askme.client.utils.AssessmentTO
com.albertattard.askme.client.AssessorService.assessCode(java.lang.String)'
threw an unexpected exception: java.lang.VerifyError: (class:
org/codehaus/janino/ByteArrayClassLoader, method: findClass signature:
(Ljava/lang/String;)Ljava/lang/Class;) Illegal type in constant pool
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:360)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:546)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:166)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
at
com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at
com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:237)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
at
com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
at
com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:139)
at
com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:235)
at
com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4823)
at
com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4821)
at
com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)
at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:359)
at com.google.net.rpc.impl.Server$2.run(Server.java:820)
at
com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:56)
at
com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:516)
at com.google.net.rpc.impl.Server.startRpc(Server.java:775)
at com.google.net.rpc.impl.Server.processRequest(Server.java:348)
at
com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java:436)
at
com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:319)
at
com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:290)
at com.google.net.async.Connection.handleReadEvent(Connection.java:428)
at
com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:762)
at
com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:207)
at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:101)
at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java:251)
at
com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run(JavaRuntime.java:374)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.VerifyError: (class:
org/codehaus/janino/ByteArrayClassLoader, method: findClass signature:
(Ljava/lang/String;)Ljava/lang/Class;) Illegal type in constant pool
at
org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java)
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java)
at org.codehaus.janino.Cookable.cook(Cookable.java)
at org.codehaus.janino.Cookable.cook(Cookable.java)
at org.codehaus.janino.Cookable.cook(Cookable.java)
at
com.albertattard.askme.server.DemoSwapAssessor.assess(DemoSwapAssessor.java:21)
at
com.albertattard.askme.server.AssessorServiceImpl.assessCode(AssessorServiceImpl.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_$3.run(Method_.java:149)
at java.security.AccessController.doPrivileged(Native Method)
at
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.privilegedInvoke(Method_.java:147)
at
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke(Method_.java:120)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:527)
... 43 more


The janino ByteArrayClassLoader is not working well (not accepted) on the
app-engine :(

Any other options?

Cheers,
Albert Attard

Marie von 
Ebner-Eschenbach<http://www.brainyquote.com/quotes/authors/m/marie_von_ebnereschenbac.html>
- "Even a stopped clock is right twice a day."

2009/8/14 Toby Reyelts <[email protected]>

>
> We don't have any near term plans to whitelist javax.tools. Do you think
> something like janino <http://www.janino.net/> might work for you?
>
>
> On Fri, Aug 14, 2009 at 2:50 AM, Albert Attard <[email protected]>wrote:
>
>> Hi everyone:
>>
>> Background about the problem:
>> I'm a Java lecturer and would like to create an automated question
>> web application similar to a multiple choice questions and answers but where
>> the students can practice coding instead of simply selecting an answer.
>>
>> Multiple choice questions are very popular in web exams as these are fully
>> automated. You do the test and the system corrects it for you and gives you
>> the results there and then. I would like to go one step further and have the
>> student to supply a code fragment or even a class(es) and have the system
>> automatically correcting it in a similar fashion to the multiple choice
>> questions.
>>
>> Example (in a nutshell):
>> The student is asked to write a method: that given an array of int and two
>> indices of type int (between 0 and the size of the array - 1), this method
>> will swap the elements at the given indices. The student
>> will write the method in the provided text area and submit it. Then the
>> system will include this method into a class, compile it and by
>> using reflection executes it with an array of values (similar to JUnit) to
>> ensure that it is working as expected. During this process the system will
>> be awarding the student marks and will display the final result together
>> with comments as required.
>>
>> Google Appengine
>> I have a prototype and it works great on Tomcat. Yes I know that it
>> is subject to Java code injection but that's not an issue at this
>> stage. This issue can be fixed at a later stage. Unfortunately I cannot
>> implement it on the Google Appengine as most of the
>> required functionality, such as writing to a file or JavaCompiler is
>> disabled . I've managed to compile the classes to database (without writing
>> to the file system) and load classes from database (without reading from the
>> file system), which can integrate well with the provided datastore.
>> Is there a way (or a procedure) of implementing such a system on
>> the Google Appengine? This application will be a free education tool
>> for everyone who would like to use it.
>>
>> Thanks in advance,
>> Albert Attard
>>
>> Ted Turner <http://www.brainyquote.com/quotes/authors/t/ted_turner.html> - 
>> "Sports is like a war without the killing."
>>
>>
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to