Set Event Handlers For Row Elements With Prototype

January 10th, 2010

This article describes how to set event handlers for row elements using Prototype. This is especially handy when dynamically creating new elements on a page.

In this example, we have a data grid displayed as a table element. The id of the table is ‘myTableId’. We are going to set up two event handlers for each table row. On a single mouse click event, we’ll call a function that highlights the selected row. On a double click, we’ll call a function that opens the row data for editing. Both of these functions are omitted for brevity.

function setEventHandlers() {
    //get all row elements under element with id ‘myTableId’
    var rows = $$('#myTableId tr');
    rows.each(function(rowElement) {
        rowElement.observe('click', highlightRow);
        rowElement.observe('dblclick', editRow);
    });
}

Once again, Prototype does the dirty work of handling the differences in event handling between browsers. All we have to do is attach an event handler function to an element using the observe() method, and Prototype handles the rest.

Check out the details on the options available on the Event object in Prototype.

JBoss JNDI datasource not releasing connections with Spring/Hibernate

October 24th, 2009

I recently had a problem with my application not releasing the database connections when I switched to using JNDI. This was a JEE application that used Spring and Hibernate. Here are the versions that I was using:

  • JBoss 4.0.4
  • JDK 1.5
  • Spring 2.5.5
  • Hibernate 3.2.6

Solution

In my Spring applicationContext.xml file, I added the datasource JNDI entry for “Kramerica”. I referenced it in the Hibernate session factory bean:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/Kramerica"/>
</bean>
 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
  <property name="dataSource" ref="dataSource"/>
  <property name="hibernateProperties">
    <props>
	<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
	<prop key="hibernate.show_sql">false</prop>
	<prop key="hibernate.connection.release_mode">after_transaction</prop>
    </props>
  </property>
</bean>

The key entry is the property “hibernate.connection.release_mode”.
This property specifies when Hibernate should release JDBC connections.

By default, a JDBC connection is held until the session is explicitly closed or disconnected. For an application server JTA datasource, use “after_statement” to aggressively release connections after every JDBC call. For a non-JTA connection, it often makes sense to release the connection at the end of each transaction, by using “after_transaction”.

You can also set it to “auto”, which will choose “after_statement” for the JTA and CMT transaction strategies and “after_transaction” for the JDBC transaction strategy.

You can find more detail on the Hibernate connection settings at the Hibernate site. Happy coding!

JBoss error: java.rmi.server.ExportException: Port already in use: 1098

October 24th, 2009

I’ve encountered this error using JBoss within MyEclipse on several occasions. The JBoss server fails to start for no apparent reason. After reviewing the server log, the root cause is “ERROR [org.jboss.naming.NamingService] Starting failed jboss:service=Naming java.rmi.server.ExportException: Port already in use: 1098; nested exception is: java.net.BindException: Address already in use: JVM_Bind”. This is followed by an endless list of ClassNotFound exceptions, as well as other exceptions.

The problem is that some other process is running on port 1098. Fortunately, there is an easy solution. If you are using Win XP, you can run “netstat -a -n -o” from the command line to find out what process id is listening on port 1098. Use the task manager to find out what process id belongs to that application, and end that task. You should be able to start JBoss with no problems.

Common port 1098 uses are for Oracle and ICQ.

Iterate over a Map using Java 5 generics

August 2nd, 2009

One of the coolest features in Java 5 is the enhanced for loop. Instead of having to use clunky Iterators to loop through a Map, you can use the enhanced for loop just as though you were iterating over an array, a List, or other collection. Read the rest of this entry »

JavaScript validation of dynamically added form fields

July 5th, 2009

This article describes how to use JavaScript and the Prototype library to validate form fields that can be dynamically added at runtime. For example, let’s say that we have a table and the user can insert one or many new rows. Each row might contain multiple input text fields, which must be validated upon form submission.
Read the rest of this entry »

Managing legacy user login object with Spring (Part 2)

June 26th, 2009

In part 1 of this article, we discussed some alternatives to handling a user login object that is controlled by a legacy application framework outside of Spring. We also discussed some disadvantages with our approach. Read the rest of this entry »

Using Hibernate Validator for your Java classes

June 12th, 2009

This article discusses how to use the Hibernate Validator for your Java classes. Read the rest of this entry »

Managing legacy user login object with Spring (Part 1)

June 7th, 2009

Using Spring to manage your Java beans for dependency injection is fairly straightforward, but what do you do when you want Spring to manage beans that were created outside of the Spring container? I encountered this issue on a recent project. The user login credentials were handled by a legacy system and stored in the HTTP session. Read the rest of this entry »

ClassNotFound errors - Hibernate 3.1 and Spring 1.2

June 7th, 2009

I recently had a project that incorporated Hibernate and Spring. MyEclipse 5.0 was the IDE, and the app server was JBoss 4.0.4. We encountered a few problems trying to get the correct combination of Hibernate, Spring, and JBoss that would play well together. Read the rest of this entry »

Sorting data in Java using Apache BeanUtils

May 21st, 2009

Most data driven applications have a requirement to be able to sort data. Most of the time this can be accomplished at the data access layer by sorting the data when it is retrieved via SQL query, or by using JavaScript or some other scripting language to sort the data in the view layer. However, there are also times when it is convenient to sort a collection of POJOs in the business layer. Read the rest of this entry »