Miles to go …

August 29, 2008

FREE Ticket to Rails Conf Europe 2008

Filed under: web2.0 — arungupta @ 6:38 am

Are you a Start up company interested in jump starting and meets the following criteria ?

  • In business six years or less
  • A maximum of 150 employees, including any affiliates
  • Based in a country in which the program is offered
  • A verifiable company presence (website, company profile, etc.)
  • Agree to accept the program’s terms and conditions

Sun Startup Essentials program provided discounted hardware, partner hosting & storage, FREE support & Training, even connects with over 200 investors and much more. What are you waiting for ? Apply Today!

We’ll throw in a FREE ticket to Rails Conf Europe 2008 – FREE as in FREE beer :) Read more details here.

And then if you are using GlassFish for Rails deployment, then I can give you a FREE 30-second promo in my talk.

And if you are in Berlin, then you might as well attend Berlin JUG event – which is also FREE.

And if you are using GlassFish in your startup, then we even provide FREE cloud computing – partnering with Layered Technologies!

Read more about Sun @ Rails Conf Europe 2008.

See you there!

Technorati: conf glassfish netbeans railsconf rubyonrails berlin startupessentials sun

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

August 28, 2008

Typo on GlassFish v3 – Ruby-on-Rails Blogging Engine

Filed under: web2.0 — arungupta @ 5:00 am



Typo is an open-source Blogging Engine written using Ruby-on-Rails framework. It provides a lean engine that makes blogging easy. It’s main attribtues are ease of use, usability, beauty and excellent support of web standards.

I found out about this application from Sang “Passion” Shin‘s Lab 5543 (part of FREE 20-week course on Ruby-on-Rails started on Jul 15, 2008). But instead of using standard WEBrick/Mongrel deployment, I describe the steps to deploy this application using GlassFish v3 that supports native deployment of Rails applications. 

  1. Typo can be installed as Gem or from Sources. Installing as gem gives the following error:

    JRuby limited openssl loaded. gem install jruby-openssl for full support.
    http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
    Building native extensions.  This could take a while…
    /Users/arungupta/tools/rails20/jruby-1.1.3/lib/ruby/1.8/mkmf.rb:7: JRuby does not support native extensions. Check wiki.jruby.org for alternatives. (NotImplementedError)
            from /Users/arungupta/tools/rails20/jruby-1.1.3/lib/ruby/1.8/mkmf.rb:1:in `require’
            from extconf.rb:1
    ERROR:  Error installing typo:
            ERROR: Failed to build gem native extension.

    /Users/arungupta/tools/rails20/jruby-1.1.3/bin/jruby extconf.rb install typo

    Gem files will remain installed in /Users/arungupta/tools/rails20/jruby-1.1.3/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection.
    Results logged to /Users/arungupta/tools/rails20/jruby-1.1.3/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out

    This is discussed here. In the meanwhile, download and unzip Typo 5.1.2 as:

    ~/samples/jruby >unzip ~/Downloads/typo-5.1.2.zip
    Archive:  /Users/arungupta/Downloads/typo-5.1.2.zip
       creating: typo-5.1.2/
       creating: typo-5.1.2/app/
       creating: typo-5.1.2/app/apis/
       . . .
      inflating: typo-5.1.2/vendor/uuidtools/lib/uuidtools.rb 
      inflating: typo-5.1.2/vendor/uuidtools/rakefile 
      inflating: typo-5.1.2/vendor/uuidtools/README
  2. Create the database:
    ~/samples/jruby >sudo mysqladmin create typo_dev

    Typo 5.1.x works with Rails 2.0.x only and so migrate as shown below:

    ~/samples/jruby/typo-5.1.2 >~/tools/rails20/jruby-1.1.3/bin/jruby -S rake db:migrate
    (in /Users/arungupta/samples/jruby/typo-5.1.2)
    == 1 InitialSchema: migrating =================================================
    — create_table(:users)
       -> 0.0377s
    — create_table(:articles)
       -> 0.0189s
    — add_index(:articles, :permalink)
       -> 0.0094s
    — create_table(:categories)
       -> 0.0069s

     . . .

    == 69 AddModulesToProfile: migrating ==========================================
    — add_column(:profiles, :modules, :text)
       -> 0.0072s
    == 69 AddModulesToProfile: migrated (0.0454s) =================================

    == 70 AddUsersToNonAdmins: migrating ==========================================
    == 70 AddUsersToNonAdmins: migrated (0.0488s) =================================

    Typo 5.2 (scheduled in 3 days) will work with Rails 2.1.

  3. Download GlassFish (nightly, promoted or build-your-own) and install by unzipping. I tried the nightly of 8/24 as:

    ~/tools/glassfish/v3/8-24 >unzip ~/Downloads/glassfish-snapshot-v3-prelude-08_24_2008.zip
    Archive:  /Users/arungupta/Downloads/glassfish-snapshot-v3-prelude-08_24_2008.zip
       creating: glassfish/
       creating: glassfish/docs/
       creating: glassfish/docs/css/
       creating: glassfish/docs/graphics/
    . . .
      inflating: glassfish/lib/templates/login.conf 
      inflating: glassfish/lib/templates/profile.properties 
      inflating: glassfish/lib/templates/server.policy
  4. Start GlassFish as:
    ~/tools/glassfish/v3/8-24/glassfish >java -DJRUBY_HOME=/Users/arungupta/tools/rails20/jruby-1.1.3 -jar modules/glassfish-10.0-SNAPSHOT.jar
    Aug 26, 2008 5:56:10 PM com.sun.enterprise.glassfish.bootstrap.ASMain main
    INFO: Launching GlassFish on Apache Felix OSGi platform

    Welcome to Felix.
    =================

    Aug 26, 2008 5:56:11 PM HK2Main start
    INFO: contextRootDir = /Users/arungupta/tools/glassfish/v3/8-24/glassfish/modules
    Aug 26, 2008 5:56:11 PM OSGiFactoryImpl initialize

    . . .

    INFO: APIClassLoader = Class Loader for Bundle [GlassFish-Application-Common-Module [66] ]
    Aug 26, 2008 5:56:13 PM CommonClassLoaderManager Skipping creation of CommonClassLoader as there are no libraries available
    INFO: urls = []
    Aug 26, 2008 5:56:13 PM com.sun.enterprise.v3.server.AppServerStartup run
    INFO: Glassfish v3 started in 2176 ms

  5. And deploy Typo as:

    ~/samples/jruby >~/tools/glassfish/v3/8-24/glassfish/bin/asadmin deploy typo-5.1.2

    Command deploy executed successfully.

The application is available at “http://localhost:8080/typo-5.1.2″ and some of the screenshots follow:


Also check out Redmine, Substruct and Mephisto on GlassFish v3. There are some performance issues when running Typo on GlassFish and this is tracked at Issue #5662.

If your Rails application does not work on the gem, file bugs here with “jruby” as “subcomponent” (default version is “v3″).

Technorati: rubyonrails glassfish v3 jruby ruby typo blogging

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

August 27, 2008

Interested in a 30 second promotion in Rails Conf Europe 2008 ?

Filed under: web2.0 — arungupta @ 11:32 pm
RailsConf Europe 2008 Are you deploying Rails application on GlassFish  in any manner (WAR-based, Gem or Technology Preview 2) ?
Are you using Rails and GlassFish combination in a creative way ?
Having you been following Rails/GlassFish development/deployment options and have an opinion ?

If answer to any of the above questions is yes, then drop a comment on this blog or send me an email (arun dot gupta at sun dot com). I’ll be happy to give you a 30-second promotion (at my discretion ;-) in my Rails Conf Europe talk next week. Here is the information I’m looking for:

Title:
Public URL:
Brief Description:
Credits (icon/logo if possible):

And if you are not aware of any of the options mentioned above, then Rails powered by the GlassFish Application Server provides all the details for you to get started!

Technorati: conf railsconf glassfish rubyonrails

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

TOTD #43: GlassFish v3 Build Flavors

Filed under: General — arungupta @ 3:00 am

Here are different flavors of GlassFish v3 builds:

  • Build your self
  • Nightly
  • Promoted
  • Stable (Technology Preview 2 as of this writing)

You can subscribe to for all the fun! Otherwise check out plan and schedule for GlassFish v3 Prelude.

Technorati: totd glassfish v3 builds prelude

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

August 26, 2008

LOTD #6: Rails Deployment on GlassFish in 4 steps and 15 minutes

Filed under: web2.0 — arungupta @ 3:00 am

Charlie describes, in 4 easy steps, how to deploy any Rails application on GlassFish:

The main steps are:

Step 1: The App Server
Step 2: Package your App
Step 3: Deploy your application
Step 4: Tweaking (Optional)

And it should only take 15 minutes on GlassFish v2!

The conclusion of the blog is:

Hopefully this walkthrough clears up some confusion around JRuby on Rails deployment to an app server. It’s really a simple process, despite the not-so-simple history surrounding Enterprise Application Servers, and GlassFish almost makes it fun :)

The next version, GlassFish v3, allows Rails application to be deployed natively, i.e. no packaging is required. You create a Rails application and run it – just the way you are used to! Read all about it here.

All previous entries in this series are archived at LOTD.

Technorati: lotd rubyonrails jruby ruby glassfish

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

August 25, 2008

LOTD #5: Blogging Gold for Sun – Forrester loves it!

Filed under: General — arungupta @ 3:00 am

A recent report by Forrester Research published a list of 15 companies that really get corporate blogging and produce blogs that are informative, fascinating, and a joy to read even for people who aren’t die-hard fans of the company. Here is what the report says about Sun Microsystems:

Like Adobe, Sun allows their employees to blog. They’ve been doing it for a long time, and their blog portal has over 4,500 bloggers covering over 110,000 posts. Some of their blogs, such as that of Web 2.0 and Web Services Evangelist Arun Gupta, have become quite popular on their own. That’s 110,000 posts of promotional gold for Sun and they know it.

Here are recent statistics of blogs.sun.com:

That’s a comment for each post! I’m happy that this blog contibutes it’s share.

All previous entries in this series are archived at LOTD.

Technorati: lotd milestogo sun forrester blogging

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

August 22, 2008

GlassFish @ Berlin-Brandenburg JUG and TU Berlin

Filed under: web2.0 — arungupta @ 3:00 am


I’ll be providing an overview of GlassFish – engineering update on v2 and v3, adoption & success stories, and the vibrant community around it at a joint Berlin-Brandenburg JUG and TU-Berlin meet on Sep 3, 2008.

The coordinates are:

Wednesday, September 3rd
17:30-ca. 19:30
Room FR5516, Technical University of Berlin
Franklinstrasse 28/29
10587 Berlin

The directions are available and please register here.

Thanks to Daniel Freund (Sun’s Campus Ambassador in Berlin) & Ralph Bergman for coordinating this! And many thanks to ever-energetic and highly-connected Aaron Houston (JUG Program Coordinator) for initiating the link :)

And of course, I’ll also be speaking at Rails Conf Europe 2008 on Rails Powered by GlassFish.

Anybody knows good running trails around Jolly Hotel ?

UPDATE: The venue has changed to a different room. The new room now is FR3003 in the same building.

Technorati: conf glassfish netbeans railsconf rubyonrails jug berlin tuberlin

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

August 21, 2008

LOTD #4: Rails running on GlassFish @ LinkedIn

Filed under: web2.0 — arungupta @ 2:45 am

Light Engineering team (BumperSticker fame) at LinkedIn has chosen GlassFish for running their Rails application. One of the developers on the team reports:

Using Warbler, we successfully wrapped our Rails applications into WAR files and deployed on Glassfish (we’ll probably write a more detailed tutorial of this at a future date). A WAR file is completely self contained application that can be deployed simply by copying to an autodeploy directory. No more Apache/Nginx reverse proxy, no more Capistrano, no more installing gems on a production container, no more of any of that madness. This was a huge win, and we broke out the champagne bottles.

Read the complete entry at:

JDBC Connection Pooling for Rails on GlassFish

Stay tuned for more details!

NetBeans development and GlassFish deployment already provide an ideal environment for Rails deployment. You can read about successful deployments of Rails and GlassFish here.

All previous entries in this series are archived at LOTD.

Technorati: lotd rubyonrails jruby ruby netbeans glassfish stories

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

August 20, 2008

2000 comments on “Miles to go…”

Filed under: General — arungupta @ 10:46 am

This blog has now been commented (including trackbacks) 2000 times. Here are the statistics as of this morning:

With 671 entries, that makes it approx 3 comments/entry.

And the tag cloud showing the # of blog entries on each topic. GlassFish is certainly way above others :)

And finally a tool to evaluate blog worth:


weblogs.java.net/blog/arungupta blogs.sun.com/arungupta


My blog is worth $14,113.50.
How much is your blog worth?


My blog is worth $64,357.56.
How much is your blog worth?


“Miles to go” worth has gone up 57 times since it’s last evaluation in Mar 2007. The java.net blog worth is still the same which makes me doubt the mechanics to measure the worth!

Learn more about how this blog has grown here.

There are still many more miles to go …

Technorati: milestogo

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot

TOTD #42: Hello JavaServer Faces World with NetBeans and GlassFish

Filed under: web2.0 — arungupta @ 5:00 am

This TOTD (Tip Of The Day) shows how to create a simple Java Server Faces application using NetBeans IDE 6.1. This is my first ever Java Server Faces application :) Much more comprehensive applications are already available in NetBeans and GlassFish tutorials.

The application is really simple – it allows you to create a database of cities/country that you like. You enter the city & country name on a page and click on Submit. This stores the data entered in the backend database and displays all the stored values in a new page. This application demonstrates simple JSF concepts:

  • How to create a JSF application using NetBeans IDE ?
  • How to populate a JSF widget with a Managed Bean ?
  • How to use a Persistence Unit with JSF widgets ?
  • How to setup navigation rules between multiple pages ?
  • How to print simple error validation messages ?
  • How to inject a bean into another class ?

This particular TOTD is using JSF 1.2 that is already bundled with GlassFish v2. Let’s get started.

  1. In NetBeans IDE, create a new project
    1. Create a new NetBeans Web project and enter the values (“Cities”) as shown:

      and click on “Next”.

    2. Choose GlassFish v2 as the deployment server and click on “Next”.
    3. Select “JavaServer Faces” framework as shown below:

      take defaults and click on “Finish”.

  2. Create a Persistence Unit as explained in TOTD #38. The values required for this TOTD are slightly different and given below.
    1. Use the following table definition:

      create table cities(id integer AUTO_INCREMENT,
                          city_name varchar(20),
                          country_name varchar(20),
                          PRIMARY KEY(id));
    2. There is no need to populate the table.
    3. Use “jndi/cities” as Data Source name.
    4. There is no need to create a Servlet.
    5. Add the following NamedQuery:
      @NamedQuery(name = “Cities.findAll”, query = “SELECT c FROM Cities c”), 

      right after the highlighted parentheses shown below:

  3. Create a new bean which will perform all the database operations
    1. Right-click on “Source Packages”, select “New”, “Java Class…” and specify the values as shown below:

      and click on “Finish”.

    2. Create a new class instance variable for “Cities” entity class by adding a new variable and accessor methods as shown below:
          private Cities cities;
          
          public void setCities(Cities cities) {
              this.cities = cities;
          }

      and then injecting in “faces-config.xml” as shown by the fragment below:

          <managed-bean>
              <managed-bean-name>cities</managed-bean-name>
              <managed-bean-class>server.Cities</managed-bean-class>
              <managed-bean-scope>request</managed-bean-scope>
          </managed-bean>
          <managed-bean>
              <managed-bean-name>dbUtil</managed-bean-name>
              <managed-bean-class>server.DatabaseUtil</managed-bean-class>
              <managed-bean-scope>request</managed-bean-scope>
              <managed-property>
                  <property-name>cities</property-name>
                  <value>#{cities}</value>
              </managed-property>
          </managed-bean>
    3. In “server.DatabaseUtil”
      1. Inject EntityManager and UserTransaction as shown:

            @PersistenceContext(unitName=”CitiesPU”)
            private EntityManager entityManager;
            
            @Resource
            UserTransaction utx;
      2. Add a method that returns a Collection of all entries in the database table as shown below:
            public Collection<Cities> getAllCities() {
                Collection<Cities> allCities = new ArrayList<Cities>();

                List list = entityManager.createNamedQuery(“Cities.findAll”).getResultList();
                for (int i = 0; i < list.size(); i++) {
                    allCities.add((Cities)list.get(i));
                }
                return allCities;
            }

      3. Add a method that will save a new ent
        ry in the database by using values from the injected “Cities” entity class as shown below:

        public String saveCity() throws NotSupportedException, SystemException, RollbackException, HeuristicMixedException, HeuristicRollbackException {
                utx.begin();
                entityManager.persist(cities);
                utx.commit();
                
                return “submit”;
            }
      4. Finally, right-click in the editor pane and select “Fix Imports”:

        and click on “OK”. Make sure to pick the right package name for “NotSupportedException” and “RollbackException”.

  4. Add Java Server Faces widgets in the main entry page
    1. In “welcomeJSF.jsp”, drag/drop “JSF Form” widget on line 22 as shown below:

    2. Select “Form Generated from Entity Class” and specify “server.Cities” entity class in the text box as shown:

    3. The generated code fragment looks like:
      <h2>Detail</h2>
       <h:form>
        <h:panelGrid columns=”2″>
          <h:outputText value=”Id:”/>
          <h:outputText value=”#{anInstanceOfserver.Cities.id}” title=”Id” />
          <h:outputText value=”CityName:”/>
          <h:outputText value=”#{anInstanceOfserver.Cities.cityName}” title=”CityName” />
          <h:outputText value=”CountryName:”/>
          <h:outputText value=”#{anInstanceOfserver.Cities.countryName}” title=”CountryName” />
        </h:panelGrid>
       </h:form>

      It generates a 2-column table based upon fields from the entity class. We will use this form for accepting inputs by making the following changes:

      1. Remove first two “h:outputText” entries because “id” is auto generated.
      2. Change “h:outputText” that uses value expression to “h:inputText” to accept the input.
      3. Use “cities” managed bean instead of the default generated expression.
      4. Add required=”true” to inputText fields. This will ensure that the form can not be submitted if text fields are empty.
      5. Add “id” attributes to inputText fields. This will be used to display the error message if fields are empty.

      The updated code fragment (with changes highlighted in bold) looks like:

      <h2>Detail</h2>
       <h:form>
        <h:panelGrid columns=”2″>
          <h:outputText value=”CityName:”/>
          <h:inputText value=”#{cities.cityName}” title=”CityName” id=”cityName” required=”true”/>
          <h:outputText value=”CountryName:”/>
          <h:inputText value=”#{cities.countryName}” title=”CountryName” id=”countryName” required=”true”/>
        </h:panelGrid>
       </h:form>

      Issue# 144217 will ensure to pick a pre-declared managed-bean or declare a new one if it does not exist already. After issue# 144499 is fixed then “id” attributes will be generated by default.

    4. Add a button to submit the results:

      <h:commandButton action=”#{dbUtil.saveCity}” value=”submit”/>

      This must be added between </h:panelGrid> and </h:form> tags.

    5. Add a placeholder for displaying error messages:
      <br><br>
      <h:message for=”cityName” showSummary=”true” showDetail=”false” style=”color: red”/><br>
      <h:message for=”countryName” showSummary=”true” showDetail=”false” style=”color: red”/>

      right after <h:commandButton> tag. The official docs specify the default value of “false” for both “showSummary” and “showDetail” attribute. But TLD says “false” for “showSummary” and “true” for “showDetail”. Issue# 773 will fix that.

  5. Add a new page that displays result of all the entries added so far
    1. Right-click on the main project, select “New”, “JSP…” and specify the name as “result”.
    2. Add the following namespace declarations at top of the page:
      <%@taglib prefix=”f” uri=”http://java.sun.com/jsf/core”%>
      <%@taglib prefix=”h” uri=”http://java.sun.com/jsf/html”%>

      Issue #144218 will ensure these namespaces are declared by the IDE.

    3. Drag/Drop a “JSF Data Table” widget in the main HTML body and enter the values as shown:

      The generated code fragment looks like:

      <f:view>
      <h:form>
       <h1><h:outputText value=”List”/></h1>
       <h:dataTable value=”#{arrayOrCollectionOfserver.Cities}” var=”item”>
      <h:column>
       <f:facet name=”header”>
       <h:outputText value=”Id”/>
       </f:facet>
       <h:outputText value=” #{item.id}”/>
      </h:column>
      <h:column>
      &nbsp
      ;<f:facet name=”header”>
       <h:outputText value=”CityName”/>
       </f:facet>
       <h:outputText value=” #{item.cityName}”/>
      </h:column>
      <h:column>
       <f:facet name=”header”>
       <h:outputText value=”CountryName”/>
       </f:facet>
       <h:outputText value=” #{item.countryName}”/>
      </h:column>
      </h:dataTable>
       </h:form>
      </f:view>

      Change the <h:dataTable> tag as shown below (changes highlighted in bold):

       <h:dataTable value=”#{dbUtil.allCities}” var=”item”>
    4. This page will be used to show the results after an entry is added to the database. Add a new button to go back to the entry page by adding the following fragment:
      <h:form>
           <h:commandButton action=”back” value=”back”/>
      </h:form>

      between </h:form> and </f:view> tags.

  6. Add the navigation rules to “faces-config.xml” as shown below:

    The corresponding XML fragment is:

        <navigation-rule>
            <from-view-id>/welcomeJSF.jsp</from-view-id>
            <navigation-case>
                <from-outcome>submit</from-outcome>
                <to-view-id>/result.jsp</to-view-id>
            </navigation-case>
        </navigation-rule>
        <navigation-rule>
            <from-view-id>/result.jsp</from-view-id>
            <navigation-case>
                <from-outcome>back</from-outcome>
                <to-view-id>/welcomeJSF.jsp</to-view-id>
            </navigation-case>
        </navigation-rule>

Let’s run the application by right-clicking on the project and selecting “Deploy and Undeploy”. The welcome page shows up and looks like as shown below:

Clicking on “Submit” without entering any values shows the default error messages as shown below:

Enter your favorite city/country and click on “Submit” to see the result page as:

Click on “Back” and enter few more cities. The updated result page looks like:

Here are some useful pointers for you:

  • JSF Tag Library & API docs
  • javaserverfaces.dev.java.net – the community website
  • Java EE 5 JSF Tutorial and many more on the community website right navbar.
  • Java Server Faces on SDN
  • GlassFish Webtier Aggregated Feed
  • Feedback

Subsequent entries on this trail will show how Java Server Faces Technology Extensions, Facelets, Mojarra make the application richer.

Please leave suggestions on other TOTD (Tip Of The Day) that you’d like to see. A complete archive of all tips is available here.

Technorati: totd mysql javaserverfaces netbeans glassfish

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot
Older Posts »

The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
Powered by WordPress