My favorites | Sign in
Project Logo
                
Search
for
Updated Jan 12, 2008 by dominic.cioccarelli
Labels: Featured
Running  

The latest releases are available from the UIDL page on Google code, at http://code.google.com/p/uidl/downloads/list. The SVN repository for the UIDL source code is hosted by Google code at http://code.google.com/p/uidl/source. Installation

The UIDL distribution comes with pre-built UIDL JARs and all supporting JARs. Most of the files in the distribution are not for the UIDL browser itself but rather for the supporting examples (which require things like Spring and Hibernate).

You should unzip the distribution into a local directory.

The source files for the UIDL browser are located in the /src directory whilst the source files for the example scenarios are are located in the /examples directory. Ant build scripts are provided for both the browser and the examples and are located in the /build directory. A pre-populated Derby database is provided in the /db directory for the "CarSales" example application. The /lib directory contains all the Java libraries required to build either the browser or the example applications. Run time JARs to support the example applications are located in /webapp/WEB-INF/lib.

The /webapp directory contains all the server side code required for the example applications and is also used to server the initial files for the UIDL browser and the subsequent UIDL pages.

Running the Example Applications

Statically Hosted Files

To illustrate how simple it is to run a very simple (static) UIDL application, you can simply copy the contents of the /webapp directory to a normal web server. From there you can navigate to the index page (index.html) and run either the Java WebStart or Applet version of the UIDL browser. Once running the browser, you can run any of the static UIDL examples (i.e. those which don't use remoting). These include simple.uidl and converter.uidl.

Using the embedded Jetty Application Server

Obviously, more complex applications will require some interaction with business logic running on the server. As a result, we need to run the server side code for the example applications within a web application container.

You can simply run "webserver.bat" or "webserver.sh" from the root directory. This will used an embedded version of the Jetty web application server to publish the contents of the "webapp" sub-directory.

After running Jetty, point your browser to http://localhost:8080/uidl/ and run either the applet or Java WebStart UIDL browser from there.

Using a Web Application Server

<Context docBase="C:/cep/uidl/webapp" debug="0" privileged="false" reloadable="true">
</Context>	

Configuring the "CarSales" Data Source

Irrespective of how you run the UIDL web application, you should look at the "applicationContext.xml" file (in the /WEB-INF directory) to see how the CarSales Derby database is configured. The location of the database is defined by the JDBC URI, which is located in the Spring "applicationContext.xml", i.e.:

<!-- Configuration for an application managed JDBC datasource -->
<bean id="carsalesDataSource" class="org.apache.commons.dbcp.BasicDataSource" 
destroy-method="close">
<property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="url" value="jdbc:derby:carsales;create=true"/>
<property name="username" value=""/>
<property name="password" value=""/>
</bean>

Alternatively you can configure the data source in your web application server and reference it from the Spring configuration file as follows:

<bean id="carsalesDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/carsales"/>
</bean>

The default URI (jdbc:derby:carsales;create=true) will create a database in the root directory where you run the application from. Alternatively you can specify a fixed path as follows: jdbc:derby:C:/cep/uidl/db/carsales;create=true.

The default configuration will create and export a new database schema each time the application server is started (or the web application is restarted). This is defined in the following configuration:

<property name="hibernateProperties">
    <props>
	<prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop>
	<prop key="hibernate.hbm2ddl.auto">create</prop>
    </props>
</property>

The application will automatically populate the database with some default data if it finds that it is empty. Typically though, after your first run (when the Derby database is created) you should comment out the schema export code as follows:

<property name="hibernateProperties">
    <props>
	<prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop>
	<!-- <prop key="hibernate.hbm2ddl.auto">create</prop> -->
    </props>
</property>

Failure to complete this configuration will mean that whenever the web application is restarted it will be recreated and repopulated with the default content.


Comment by SithNightraid, Sep 11, 2008

import java.util.List; import java.util.Stack; import java.util.Vector;

/

  • See the license below. Obviously, this is not a Javascript credit card number
  • generator. However, The following class is a port of a Javascript credit card
  • number generator.
  • @author robweber
public class RandomCreditCardNumberGenerator? {
/
  • Javascript credit card number generator Copyright (C) 2006 Graham King
  • graham@darkcoding.net
  • This program is free software; you can redistribute it and/or modify it
  • under the terms of the GNU General Public License as published by the
  • Free Software Foundation; either version 2 of the License, or (at your
  • option) any later version.
  • This program is distributed in the hope that it will be useful, but
  • WITHOUT ANY WARRANTY; without even the implied warranty of
  • MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  • Public License for more details.
  • You should have received a copy of the GNU General Public License along
  • with this program; if not, write to the Free Software Foundation, Inc.,
  • 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  • www.darkcoding.net

public static final String VISA_PREFIX_LIST = new String { "4539",
"4556", "4916", "4532", "4929", "40240071", "4485", "4716", "4" };
public static final String MASTERCARD_PREFIX_LIST = new String { "51",
"52", "53", "54", "55" };
public static final String AMEX_PREFIX_LIST = new String { "34", "37" };
public static final String DISCOVER_PREFIX_LIST = new String { "6011" };
public static final String DINERS_PREFIX_LIST = new String { "300",
"301", "302", "303", "36", "38" };
public static final String ENROUTE_PREFIX_LIST = new String { "2014",
"2149" };
public static final String JCB_16_PREFIX_LIST = new String { "3088",
"3096", "3112", "3158", "3337", "3528" };
public static final String JCB_15_PREFIX_LIST = new String { "2100",
"1800" };
public static final String VOYAGER_PREFIX_LIST = new String { "8699" };
static String strrev(String str) {
if (str == null)
return "";
String revstr = ""; for (int i = str.length() - 1; i >= 0; i--) {
revstr += str.charAt(i);
}
return revstr;
}
/
  • 'prefix' is the start of the CC number as a string, any number of digits.
  • 'length' is the length of the CC number to generate. Typically 13 or 16
static String completed_number(String prefix, int length) {
String ccnumber = prefix;
// generate digits
while (ccnumber.length() < (length - 1)) {
ccnumber += new Double(Math.floor(Math.random() 10)).intValue();
}
// reverse number and convert to int
String reversedCCnumberString = strrev(ccnumber);
List<Integer> reversedCCnumberList = new Vector<Integer>(); for (int i = 0; i < reversedCCnumberString.length(); i++) {
reversedCCnumberList.add(new Integer(String
.valueOf(reversedCCnumberString.charAt(i))));
}
// calculate sum
int sum = 0; int pos = 0;
Integer reversedCCnumber = reversedCCnumberList
.toArray(new IntegerreversedCCnumberList.size()?);
while (pos < length - 1) {
int odd = reversedCCnumberpos? 2; if (odd > 9) {
odd -= 9;
}
sum += odd;
if (pos != (length - 2)) {
sum += reversedCCnumber+ 1?;
} pos += 2;
}
// calculate check digit
int checkdigit = new Double(
((Math.floor(sum / 10) + 1) 10 - sum) % 10).intValue();
ccnumber += checkdigit;
return ccnumber;
}
public static String credit_card_number(String prefixList, int length,
int howMany) {
Stack<String> result = new Stack<String>(); for (int i = 0; i < howMany; i++) {
int randomArrayIndex = (int) Math.floor(Math.random()
  • prefixList.length);
String ccnumber = prefixListrandomArrayIndex?; result.push(completed_number(ccnumber, length));
}
return result.toArray(new Stringresult.size()?);
}
public static String generateMasterCardNumbers(int howMany) {
return credit_card_number(MASTERCARD_PREFIX_LIST, 16, howMany);
}
public static String generateMasterCardNumber() {
return credit_card_number(MASTERCARD_PREFIX_LIST, 16, 1)0?;
}
public static boolean isValidCreditCardNumber(String creditCardNumber) {
boolean isValid = false;
try {
String reversedNumber = new StringBuffer?(creditCardNumber)
.reverse().toString();
int mod10Count = 0; for (int i = 0; i < reversedNumber.length(); i++) {
int augend = Integer.parseInt(String.valueOf(reversedNumber
.charAt(i)));
if (((i + 1) % 2) == 0) {
String productString = String.valueOf(augend 2); augend = 0; for (int j = 0; j < productString.length(); j++) {
augend += Integer.parseInt(String.valueOf(productString
.charAt(j)));
}
}
mod10Count += augend;
}
if ((mod10Count % 10) == 0) {
isValid = true;
}
} catch (NumberFormatException? e) { }
return isValid;
}
public static void main(String args) {
int howMany = 0; try {
howMany = Integer.parseInt(args0?);
} catch (Exception e) {
System.err
.println("Usage error. You need to supply a numeric argument (ex: 500000)");
} String creditcardnumbers = generateMasterCardNumbers(howMany); for (int i = 0; i < creditcardnumbers.length; i++) {
System.out.println(creditcardnumbersi?
+ ":" + (isValidCreditCardNumber(creditcardnumbersi?) ? "valid"
: "invalid"));
}
}

}


Sign in to add a comment
Hosted by Google Code