|
|
||
Vivek Pandey's BlogMarch 2008 ArchivesMy first Jython web app on GlassFish v3Posted by vivekp on March 26, 2008 at 04:17 PM | Permalink | Comments (6)I have been thinking of playing with Jython and GlassFish for quite some time. I thought of taking the first shot at it. So after looking around a bit I found out that I can simply use PyServlet to delegate the HTTP requests to my Jython servlet which can do whatever with the Python script and write it back to the Servlet output stream. Let us see how I did it: Setup
Create a Python Servlet
Deploy the Python web application
[/c/dev] $./glassfish/bin/asadmin deploy calendar properties=(name=calendar) Now access http://localhost:8080/calendar/Show.py, it should show this page:
This was simply a jython servlet but there was no Python specific libraries involved. Invoke Python librariesWe will show Year 2008 calendar using python class calendar. Let us modify Show.py.
import sys,calendar,time
from javax.servlet.http import HttpServlet
class Show (HttpServlet):
def doGet(self,request,response):
self.doPost (request,response)
def doPost(self,request,response):
toClient = response.getWriter()
response.setContentType ("text/html")
toClient.println
("<body><h1>Calendar</h1><pre>%s</pre></body></html>" %
calendar.calendar(time.localtime()[0]))
Notice that the main change made to Show.py is that we invoke calendar.calendar() and pass it the localtime. Also, there is an import of calendar and time. Now, go back to your browser and refresh the page and you would see Year 2008 calendar:
This is it! However it involves Jython Servlet and some wiring and could be lot simpler. Frank plans to work on simplified and better integrated support for Jython on GlassFish. Stay tuned there is more to come... Using JPA with Rails on GlassFish and MySQLPosted by vivekp on March 21, 2008 at 12:56 AM | Permalink | Comments (2)In my last post I mentioned that "...with Rails there are some known limitations, such as the ORM in Rails is not pluggable" by which I basically meant that you can't plug in another ORM and the Rails Model creation and db migration will not generate the correct code for another kind of ORM. The good news is that with little bit of coding you can reuse your entity classes. caroljmcdonald commented on my blog that Brian in his blog succssfully tried out JPA and Rails on WEBRick using JavaDB. So, in this blog I would go over what you would need to do to make JPA and Rails work on GlassFish v2.
Let's first try to understand how it is going to work: Rails by default uses ActiveRecords for Object Relational Mapping purposes or ORM. JPA is another ORM technique in JavaEE. Model class and database migration in Rails is what Entity class and persistence provider does for you in Java. Essentially In Java you just provide the Entity class and on the Rails side, you would provide the Model corresponding to the Entity class to do CRUD and that is pretty much it. The JPA provider does the rest. Setup GlassFish v2 and NetBeans
Create Java Entity Beans with MySQLFirst we create an entity class and a persistence unit.
Create the Rails ApplicationSimply download the Rails application then do the following:
cd $GLASSFISH_HOME/jruby/samples unzip jpa_blog.zip cd jpa_blog
Brian's sample Rails application was created using Rails 1.2.3 and GlassFish v2 JRuby module includes Rails version 1.2.6. So edit config/environment.rb and replace The last thing you want to do is prepare this rails application for deployment over GlassFish v2:
[/c/tools/glassfish/jruby/samples/jpa_blog]
$ant -f ../../install.xml create-shared
Buildfile: ..\..\install.xml
create-shared:
[mkdir] Created dir: c:\tools\glassfish\jruby\samples\jpa_blog\WEB-INF
[copy] Copying 1 file to c:\tools\glassfish\jruby\samples\jpa_blog\WEB-INF
BUILD SUCCESSFUL
Total time: 0 seconds
Simply deploy your rails application on to GlassFish (if you have not started Glassfish during GlassFish setup, you should do it now):
[/c/tools/glassfish/jruby/samples/jpa_blog] $cd .. [/c/tools/glassfish/jruby/samples] $../../bin/asadmin.bat deploy jpa_blog Command deploy executed successfully. In the GlassFish server.log you should see:
[#|2008-03-20T17:46:32.250-0700|INFO|sun-appserver9.1|javax.enterprise.system.to ols.deployment|_ThreadID=20;_ThreadName=Thread-28;|deployed with moduleid = jpa_ blog|#] [#|2008-03-20T17:46:33.531-0700|INFO|sun-appserver9.1|javax.enterprise.system.co ntainer.web|_ThreadID=21;_ThreadName=ObjectPoolManager;|PWC1412: WebModule[/jpa_ blog] ServletContext.log():JRuby init time: 94ms|#] [#|2008-03-20T17:46:39.296-0700|INFO|sun-appserver9.1|javax.enterprise.system.co ntainer.web|_ThreadID=21;_ThreadName=ObjectPoolManager;|PWC1412: WebModule[/jpa_ blog] ServletContext.log():Rails init time: 5750ms|#] [#|2008-03-20T17:46:39.296-0700|INFO|sun-appserver9.1|javax.enterprise.system.co ntainer.web|_ThreadID=21;_ThreadName=ObjectPoolManager;|PWC1412: WebModule[/jpa_ blog] ServletContext.log():Runtime 0 loaded|#] [#|2008-03-20T17:46:39.296-0700|INFO|sun-appserver9.1|javax.enterprise.system.co ntainer.web|_ThreadID=21;_ThreadName=ObjectPoolManager;|PWC1412: WebModule[/jpa_ blog] ServletContext.log():Requests can now be processed|#]
Now, accessing
Create a new Blog entry:
See the list of all the blogs:
I wanted to try it out on Glassfish gem but JPA is under development in GlassFish v3 and I get exception coming form inside GlassFish v3 where it can't find the PersistenceProvider:
javax.persistence.PersistenceException: No resource files named META-INF/services/javax.persistence.spi.PersistenceProvider were found. Please make sure that the persistence provider jar file is in your classpath. Mitesh is working on JPA support in Glassfish v3, I would do a follow-up blog for GlassFish gem as soon as I see it working. You can get the Rails and Entity code using the following link: Continue using JRuby on GlassFish and keep sending us feedback on GlassFish forums, dev@glassfish or gem mailing list. For the latest information about the gem and JRuby Update Center module can be found at GlassFish JRuby wiki.
Report on JRuby On Glassfish@Silicon Valley JUGPosted by vivekp on March 19, 2008 at 11:22 AM | Permalink | Comments (2)I was at Silicon Valley JUG (Java User's Group) to talk about Ruby on Rails in GlassFish. See Arun's announcement on this talk. The slides used in this presentation can be found here. The main theme of my presentation was on highlighting Rails development and deployment on GlassFish v2 and using GlassFish gem with live demos. These are some of the questions asked during presentation and my answer to those Q:This is cool that Rails applications can be deployed and run over GlassFish a JavaEE application server, but can the JavaEE features be invoked from inside a Rails application? A:Yes we think it can be done, with JRuby you can call anything in Java. We know from one of the JRuby users that he is able to call in to EJB service form Rails. Having said that with Rails there are some known limitations, such as the ORM in Rails is not pluggable, so we can't plugin GlassFish JPA implementation in to Rails to take benefit of it. Merb allows such pluggable ORM. As a followup we would provide samples/blogs on Rails and JavaEE features. Q:What is the performance comparison between JRuby vs Ruby? Q:No formal performance study has been done. There are some blog posts that talk about it, such as this one by Nick, that shows with warm up JRuby/GlassFish as good as C-Ruby/Mogreal and there is another JRuby on GlassFish comparison to Ruby/Mogrel. We expect with GlassFish gem these numbers would look even better. In next few months the focus is going to be on performance and scalability, so stay tuned. Q:Can you call in to Ruby from Java? A:Yes, you can do it using JSR-223 APIs. JSR-223 scripting APIs are part of JDK6, with JDK 5 or earlier versions, you can get it from here. Q:Does standalone JRuby programs can also get affect from PermGen issue? A:It really depends on the application. For example, in a Rails application, because Rails being single threaded and so it results in to creating Rails for each of the concurrent requests and hence each Rails instance ends up consuming more of Permanent heap space. There were more questions that I can't recall now. The talk was video recorded, I am not sure where and when it will be posted but when I get that link, I will add it to this blog. Please use JRuby on GlassFish and send us feedback on GlassFish forums, dev@glassfish or gem mailing list. For the latest information about the gem and JRuby Update Center module can be found at GlassFish JRuby wiki.
Grails application now working on GlassFish v3Posted by vivekp on March 07, 2008 at 01:58 PM | Permalink | Comments (1)Recently Guillaume reported to me about his Grail app not deploying on GlassFish v3 Preview 2. The problem reported was that the Grail app was taking lots of time to deploy on GlassFish v3 Preview 2. Although such failures are not acceptable but considering GlassFish v3 is a complete new architecture, is still under development and feature incomplete and above all the preview releases do not go thru the normal test cycle so such bugs can appear. This issue was discussed at the GlassFish mailing list, see the discussion here and the corresponding bug. The good news is that Jerome quickly found out what the problem was and after the code went thru reviews, it was checked in and the fix went into yesterday's nightly build. Here is how I created and deployed a Grails application on GlassFish v3: Create a simple Grails appSetup Grails This is the standard way you would setup the Grails environments:
Start GlassFish v3
You can see above it took 733ms to boot up! Deploy the Grails AppNow that I have built MyFirstGrailsApp, it is time to deploy. So first I will create a war file:
The server log tells, it took about 9.7 seconds to deploy it:
Now when I accessing http://localhost:8080/MyFirstGrailsApp-0.1/ my Grails app appears in the Firefox:
GlassFish v3 has been going thru continuous improvements and the development team is busy making it rock solid while adding new features to it. Continue sending your
feedbacks to users@glassfish.dev.java.net.
Python@SunPosted by vivekp on March 03, 2008 at 11:54 AM | Permalink | Comments (0)This is further progress in solidifying Sun's Python story for dynamic language support in the JVM. Frank has been involved with Jython for quite some time and will be working on making Python language support in JVM. Ted will be represening Python in the open source world. Welcome Frank and Ted! See more on this story here. This is just so exciting - JRuby, Jython, Da Vinci Machine, all of these are going to make it easier to not only have better support of dynamic languages in JVM but also in GlassFish! I am looking forward to working with Frank and Ted for Python/Jyton support in GlassFish! | ||
|
|