2008-04-03
| 11:11 | cgrand | It seems that when calling a method on a type hinted value, the object is cast to the declaring class of the method not to the hinted class. Am I right? Can I rely on this behavior or is it an implementation detail? |
| 11:12 | rhickey | when does distinguishing it become important? |
| 11:13 | cgrand | *out* is tagged as an OutputStreamWriter and I bind it to a PrintWriter (in a servelt) |
| 11:13 | cgrand | Right now it works |
| 11:14 | rhickey | hmm... |
| 11:15 | rhickey | it probably should just be hinted Writer |
| 11:16 | rhickey | I can't promise it will never cast to hinted type |
| 11:16 | cgrand | and I would not have to worry :-) |
| 11:16 | Chouser | cgrand: are you using webjure? |
| 11:18 | cgrand | casting to the hinted type can provide some performance gains (methods declared final... or final classes... hey does it means that actually Strings are cast to CarSequence?) |
| 11:18 | cgrand | chouser: no writing write a minimal servlet wrapper |
| 11:19 | cgrand | chouser: (delete "write") |
| 11:20 | rhickey | cgrand: the hints are just used to find resolve methods, the casts are based upon the methods themselves right now |
| 11:22 | cgrand | rhichey: ok |
| 11:23 | rhickey | cgrand: *out* type hint now Writer |
| 11:23 | cgrand | rhickey: thanks |
| 11:29 | Chouser | cgrand: I'm currently writing a minimal webserver that may or may not be able to load and run servlets eventually. |
| 11:30 | Chouser | cgrand: are you writing Java code to run clojure in a standard Java server, or some other piece? |
| 11:33 | cgrand | chouser: a simple servlet which setup clojure and delegates everything to clojure code with nearly no wrapping of java objects (request & response) |
| 11:36 | cgrand | chouser: are you building your webserver from scratch? |
| 11:37 | Chouser | cgrand: yeah, I just want something that's super-easy to deploy, esp. in a development environment. |
| 11:41 | Chouser | so you're passing the servlet req and resp directly into clojure code? |
| 11:42 | Chouser | will the clojure code register some kind of handler with the servlet, or will it be more hard-wired? |
| 11:43 | cgrand | chouser: yes, I bing them to servlet/*request* and *response* (and *in* and *out* to their reader/writer) |
| 11:43 | cgrand | chouser: s/bing/bind/ |
| 11:43 | rhickey | cgrand: it's easy, right? |
| 11:44 | Chouser | ok, cool. |
| 11:44 | cgrand | really easy and I tak the name of the boot script for the app from a servlet parameter |
| 11:44 | rhickey | I'll eventually put a servlet stub class in Clojure |
| 11:44 | rhickey | to make even easier and standardize |
| 11:47 | cgrand | rhickey: how would you dispatch requests to clojure code? with a map (http-method => handler), with a single clojure function "service" or several functions (one by http method)? |
| 11:47 | Chouser | isn't the input stream already in the request? Sorry, I'm new to servlets. |
| 11:49 | rhickey | cgrand: probably a single service fn, to allow the most flexibility, since the advantages of overriding them separately on the Java side are lost once you override them all |
| 11:50 | rhickey | the idea of the stub would be to get out of Java ASAP |
| 11:51 | cgrand | chouser: it is, I just think it's fairly common to want to bind *out* to the response outputstream so that print works. |
| 11:51 | Chouser | yeah, ok. |
| 11:59 | cgrand | chouser: did you consider Jetty? http://docs.codehaus.org/display/JETTY/Embedding+Jetty |
| 11:59 | Chouser | yes I did |
| 12:01 | Chouser | I started trying to install and configure Jetty. I got maven installed ok, but then it was pulling in all sorts of libraries to build Jetty. The binary installation of Jetty was over 20MB. |
| 12:02 | cgrand | lightweight :-) |
| 12:02 | Chouser | I don't mean to whine, but I don't really want all that just for playing around with development. |
| 12:03 | Chouser | I expect to have a minimal web server .clj file to weigh in at around 150 LOC. With minimal servlet support, maybe add another 100. |
| 12:04 | Chouser | Sure, if I'm going to deploy a production server I can expect signicant installation work, and I can compare Jetty and TomCat and whatever, and do what makes sense. |
| 12:05 | Chouser | But I've played with a few web "frameworks" in a few languages (python, C++/Qt, ruby (guess which one!)) and being able to install a small framework and run a command to get your sample site running in a little webserver is just really pleasant. |
| 12:05 | Chouser | I think it's a good way to help get a newbie hooked on any particular framework. |
| 12:06 | Chouser | or maybe my little webserver will be useless for anything but helping me learn Clojure and servlets. That's ok too. :-) |
| 12:06 | rhickey | yeah, until people realize the built-in webservers for those frameworks are not so hot. |
| 12:06 | rhickey | Once you have a servlet host installed, everything else is easy |
| 12:07 | rhickey | but you've built on an architecture that lets you swap in Tomcat/Jetty/Resin/GlassFish... |
| 12:07 | rhickey | grows into authentication, JDBC connection pooling |
| 12:07 | Chouser | but what if the code you write for the built-in webserver can be dropped directly into a standerd servlet host? |
| 12:08 | rhickey | your clients can get support for the servers from Sun/IBM/JBoss |
| 12:08 | Chouser | what's the downside then? |
| 12:08 | rhickey | as I said before, you'd have to provide all of the features of servlets, accurately |
| 12:09 | Chouser | so you really think this is a dead end. |
| 12:09 | rhickey | When Webjure was released, I was on a client site and had no servlet host on my laptop... |
| 12:10 | rhickey | I downloaded Jetty into a directory, started it, dumped webjure into the deploy directory, fired up a browser and it worked - 10 minutes |
| 12:11 | rhickey | Chouser: yes, while J2EE is overkill, servlets are sweet, and all of those servlet containers are really nice open source tech - to good to ignore |
| 12:11 | Chouser | Do you have a recommendation for a low-cost hosting service that includes servlet support? Ususally that one feature seems to crank the monthly price up significantly. |
| 12:13 | rhickey | not offhand - most of my clients are self-hosted/internal |
| 12:13 | cgrand | rhickey: would you mind making RT.loadResourceScript public? |
| 12:13 | Chouser | yeah. Makes sense for most businesses, I suppose. |
| 12:15 | rhickey | cgrand: done |
| 12:15 | cgrand | rhickey: thanks |
| 12:25 | Chouser | So no love from the Java folks for FastCGI or SCGI. Makes me sad. |
| 12:25 | Chouser | I guess I'll try to find a work-around. |
| 12:29 | Chouser | cgrand: do you plan on putting your wrapper in clojure-contrib? |
| 13:15 | Chouser | ok, I seem to have tomcat running. I guess I'll use webjure until cgrand's wrapper is done, if he feels like sharing. |
| 14:28 | cgrand | Chouser: sorry, I was away. I'll put in in the grop asap. |
| 14:52 | Chouser | cgrand: cool! I'm stumbling along fine with webjure for now, but a more minimal solution will be great. |
| 14:52 | Chouser | Ugh, I'm so bad at dealing with the Java libs. |
| 15:33 | abrooks | rhickey: Will you ever be open to having platform support code as part of a general Clojure distribution? (i.e. JNI via "(. posix.something (mumble...))") There are some generally useful OS interfaces and some more specific (RDMA / various hardware MPI assist for HPC for example) interfaces which would be interesting for various domains. |
| 15:34 | rhickey | abrooks: I think the core should be pure Java |
| 15:35 | abrooks | Agreed. I was more asking about side libraries that could be bundled with the sources and be available on supported platforms. I wasn't imagining that this would in any way be in the core language implementation (however we're both defining "core" ;). |
| 15:38 | rhickey | abrooks: I don't see it, at present |
| 16:00 | abrooks | rhickey: That's understandable. :) Just testing the waters. |
| 16:00 | rhickey | abrooks: never say never :) |
| 22:25 | ericthor | what is the painless way to deal with the equivalent of function that takes Object[] ? Like new Object[] { new SomeType(),2,new SomOtherType()} |
| 22:25 | ericthor | nevermind...i just thought of something |