Microsoft has for free the Virtual Server or Virtual PC 2007 SP 1 as virtualization software. I wanted to test Microsoft Windows 2003 R2 Server. On the Virtual Appliance Marketplace at VMware is only a VHD from Microsoft available. A VHD is the Microsoft vm image type. I installed the Microsoft Virtual Server and had no luck to start the vhd image successfully. Virtual PC 2007 works instead. I can start the VM and configure this vm server as active directory, DNS and WINS server like described in this howto. The networking functionality in Microsoft Virtual Server/PC is a pain in my ass. For active directory and dns server is a fixed ip configured inside the vm. No clue on which ip i can reach my vm from the host system. Sun virtualbox works in that aspect more like expected. You can switch between NAT and hostonly mode. With the host only networking mode has the VM a fixed ip inside the host system. So far so good. I tested this with a ubuntu 9.04 server as guest os inside virtualbox. For updates you need to shutdown, reconfigure to use NAT and start the vm again. In NAT mode is the vm only accessible via the virtualbox window. You have to define each port manually if you want to access the NAT vm from outside the virtualbox. Typically i use such a vm ubuntu server as subversion, maven artifactory, … server for development. VMware server 2.x works for me like expected. NAT networking to have internet access from the guest os and full access on all ports from the hostsystem. The guest os see a DHCP networking interface and the host os has a fixed ip to access the vm. So how do i get the 30 days trial edition from Microsoft Windows 2003 server get to run inside VMware server? After setting up the server inside Virtual PC you had to remove the Virtual Machine additions via the menu. This additions are not available as software package inside the software overview in windows 2003 server. Now shutdown the guest os and close virtual pc. With the VMWare vCenter Converter 3.0.3 (Starter Edition) you can convert the VHD to a VMX image for VMWare Server or Player. Select in the last step of the wizard to remove all checkpoints inside the guest os, to install VMWare tools and to setup the networking interface (NAT on one instead of two nic). The VHD image has 1,5 GB and needs on my laptop round about 1h to convert. After that i can start VMWare server and register this new guest os image. The converter has set the type correct to MS Windows 2003 server 32bit. A little bit annoying is that my bluetooth connected mouse works perfect inside Virtual PC but not out of the box inside the VMWare window
So i grabbed my old usb mouse to have a running mouse. With the Sysinternals ADExplorer i can examine my new active directory from my host os. Inside eclipse 3.5 is Apache Directory Studio a good choice to to access the AD via LDAP.
Tags: active directory, ldap, microsoft, server, virtualbox, vmware
The good news is that most of the common used software works. So far i install only the necessary software for such a netbook. No video editing, development tools, ide,…
Software which works
- Winscp
- Putty
- Firefox 3
- Office 2003
- Notepad++
- Thunderbird 2
- 7-zip
- Acrobat Reader
- Irfanview
- VLC
- Openoffice 3.1
- Flash under Firefox
Flash under IE8 work only with a trick. The direct download or installation from adobe.com does not work. Via PCWelt is the install exe as well available. Save the file and start the installation. Et voila.
The Samsung has no built in bluetooth device. I bought a ultra small usb Trust bluetooth 2.1 adapter. Windows 7 RC recognize most but not all functionality. The broadcom driver for Vista works perfect. After that i can install the Nokia PC Suite 7.1 and access my Nokia N95 successfully.
Tags: software, windows 7 rc
The Samsung netbook shipped with pre installed Windows XP and 1GB RAM. After upgrading to 2GB RAM and good tests of Windows 7 RC under Virtualbox and VMware i feel safe to install Windows 7 RC. I made under the running XP all available updates including bios firmware. My RAM dealer told me about a other customer with non bootable netbook after upgrading under windows 7. You need a USB Stick to extract the iso to it and boot from it like described here. Reboot the netbook and press F2 to enter the BIOS for changing the boot order. Push the “USB HDD” over the internal HDD and press F10 for “save and exit”. Insert the stick and enter the setup of windows 7 RC. The installation works perfect and nearly all hardware works out of the box. Windows update updates the lan,wlan and graphics driver. My netbook has a built in UTMS modem which is not recognized out of the box. Under XP are two possibility to establish HSPDA connections with the internal UMTS modem: Vodafone Dashboard or the Samsung Connectionmanager. I tried from samsung.de the XP version with no luck. The polish Samsung website has a newer working version. Another problem was the touchpad. Windows recognize only a PS/2 mouse… The vista driver from the synaptic download site works well. Good first place to look is the “troubleshoot compatibility” entry in context menu of each executeable. Set their the requirement to use Admin rights and Vista or XP (in that order) compatibility. The connectionmanager works only with Vista OS and Admin rights settings. WLAN at home was no problem. No jumps or quirks has to be done to establish a WPA2 AES connection.
I use AVG Antivir Free edition as antivirus solution. The newly maintenance center offers online a page with working products. Microsoft links directly to AVG Antivirus. AVG Antivir Free works as well with the limitation that windows is not informed about the state of virus definitions. You can disable this additional check inside the maintenance center to avoid further warnings about a maybe outdated antivirus solution. I tried inside Virtualbox Kapersky as trial which has a perfect integration.
Windows 7 RC compared to Vista is much faster. Even on a netbook will the Aero extension work. Other programs or windows get a glass l&f if you swith with the tab key through the runnning programs. The taskbar shows the running IE 8 including the possibility to navigate directly to the open tabs. Download progress is shown as a green filling taskbar icon.
Most software seems to run like Office 2003, Notepad++, 7-Zip or firefox.
Overall is the Samsung NC10 a good choice as netbook with the non glare display and the long running battery with 3-4h capicity.
Tags: netbook, samsung nc 10, windows 7 rc
Most enterprises use LDAP as interface to their company structure database. In the Microsoft world is Active Directory the implementation for LDAP. Under Linux is OpenLDAP the common choice for admins. Such LDAP directories are tree based. OpenLDAP is the reference implementation for LDAP v3.
The JNDI API inside the Java SDK is usable as implementation to access such LDAP directories. With Spring LDAP is more sophisticated API available.
My first code sample works in the company against their OpenLDAP server. For security reasons is the access not possible from outside. So my JUNIT Tests was code red after running in my homeoffice. Maven standard is to run all test prior to build a package like a J2EE war or ear file. So i decided to setup a OpenLDAP server inside my ubuntu 8.10 server vmware server vm.
First step is to retrieve and install the openldap package as root:
- sudo su -
- apt-get install slapd ldap-utils nmap php5-ldap db4.2-util
Now run the configuration assistant:
- dpkg-reconfigure slapd
Wizard steps:
- omit openldap server configuration? – no
- dns domain name? vm.example.org
- organization name? myCompany
- database backend to use? hdb
- do you want the database to be removed when slapd is purged? yes
- may be the question: move old database? yes
- administrator password? the same one as entered during installation
- confirm password? see last step
- allow LDAPv2 protocol? no
ldap_version 3 URI ldap://localhost:389 SIZELIMIT 0 TIMELIMIT 0 DEREF never BASE dc=vm,dc=example, dc=orgWith the command “ldapsearch -x” you should see the following output:
# extended LDIF # # LDAPv3 # baseFor easier admininstration exist a php admin ui called phpldapadmin and can be installed with:(default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # vm.example.org dn: dc=vm,dc=example,dc=org objectClass: top objectClass: dcObject objectClass: organization o: myCompany dc: vm # admin, vm.example.org dn: cn=admin,dc=vm,dc=example,dc=org objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
- apt-get install phpldapadmin
- ln -s /usr/share/phpldapadmin/ /var/www/phpldapadmin
/* Array of base DNs of your LDAP server. Leave this blank to have phpLDAPadmin
auto-detect it for you. */
$ldapservers->SetValue($i,'server','base',array('dc=vm,dc=example,dc=org'));
...
$ldapservers->SetValue($i,'login','dn','cn=admin,dc=vm,dc=example,dc=org');
Check your PHP5 memory settings in /etc/php5/apache2/php.ini:
memory_limit = 64M ; Maximum amount of memory a script may consume (16MB)Restart the apache to use this changed configuration
- /etc/init.d/apache2 restart
http://your.vm.ip/phpldapadmin
Click on the login link on the left side and enter as “login dn”:- cn=admin,dc=vm,dc=example,dc=org
- click on the left side on the link beside the world icon “dc=vm…”
- click on “create a child entry here”
- choose “organisational unit” as template
- enter “people” and click on “create object”
- click on this new orginsational unit people in the tree
- click on “create a child entry here”
- choose “Address Book Entry (mozillaOrgPerson)” as template
- enter “John” as “first name”
- enter “Doe” as “last name”
- go to common name (cn) and enter “John Doe”
- click on “create object”
# extended LDIF # # LDAPv3 # base(default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # vm.example.org dn: dc=vm,dc=example,dc=org objectClass: top objectClass: dcObject objectClass: organization o: myCompany dc: vm # admin, vm.example.org dn: cn=admin,dc=vm,dc=example,dc=org objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # people, vm.example.org dn: ou=people,dc=vm,dc=example,dc=org objectClass: organizationalUnit objectClass: top ou: people # John Doe, people, vm.example.org dn: cn=John Doe,ou=people,dc=vm,dc=example,dc=org objectClass: inetOrgPerson objectClass: top givenName: John sn: Doe cn: John Doe # search result search: 2 result: 0 Success # numResponses: 5 # numEntries: 4
Your LDAP server is now running and you can easily configure it inside your favorite browser

DBUnit is very nice for testing database content changes made by an application. You define in XML the data including the structure of your tables (dataset.xml).
Simple_Data is the name of the table and each column is a attribute in the xml doc with the content value e.g. id with value 1.
The Getting Started of DBUnit work with JUnit 3.8 and self handling of the JDBC Connection.
JUnit 4.x are more comfortable with annotations based test methods and Spring comes with dependency injection for separating
configuration from implementation code.
The following approach combines DBUnit with JUnit 4.4 and Spring 2.5.6 to test comfortable a Oracle 10g database.
I use Maven 2.x to define the depending libraries used by the example (pom.xml):
4.0.0 de.schaeftlein.dev.dbunit test-dbunit test-dbunit 0.0.1-SNAPSHOT org.dbunit dbunit 2.4.2 org.springframework spring 2.5.6 jar compile junit junit 4.4 commons-dbcp commons-dbcp 1.2.2 org.springframework spring-test 2.5.6 org.slf4j slf4j-api 1.5.6 org.slf4j log4j-over-slf4j 1.5.6 log4j log4j 1.2.14 org.slf4j slf4j-log4j12 1.5.6 com.oracle ojdbc14 10.2.0.2.0
Keep in mind that the Oracle JDBC Driver has to be downloaded manually.
The public maven repos include only the Pom definition for the oracle driver. Generate with maven command line tool the eclipse project files:
mvn clean eclipse:clean eclipse:eclipse
The JDBC datasource is defined via Spring (applicationContext.xml):
Additionally we define the expected data as well in XML for DBUnit (expectedDataSet.xml):
Now we can code our JUnit 4.x Test to
- load data before the test method
- change the data via JDBC to emulate a application
- compare the changed data with expected data
- clean up the database
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class TestDBUnitWithSpring {
@Autowired
private DataSource dataSource;
@Before
public void init() throws Exception{
// insert data into db
DatabaseOperation.CLEAN_INSERT.execute(getConnection(), getDataSet());
}
@After
public void after() throws Exception{
// insert data into db
DatabaseOperation.DELETE_ALL.execute(getConnection(), getDataSet());
}
private IDatabaseConnection getConnection() throws Exception{
// get connection
Connection con = dataSource.getConnection();
DatabaseMetaData databaseMetaData = con.getMetaData();
// oracle schema name is the user name
IDatabaseConnection connection = new DatabaseConnection(con,databaseMetaData.getUserName().toUpperCase());
DatabaseConfig config = connection.getConfig();
// oracle 10g
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new Oracle10DataTypeFactory());
// receycle bin
config.setFeature(DatabaseConfig.FEATURE_SKIP_ORACLE_RECYCLEBIN_TABLES, Boolean.TRUE);
return connection;
}
private IDataSet getDataSet() throws Exception{
// get insert data
File file = new File("src/test/resources/dataset.xml");
return new FlatXmlDataSet(file);
}
@Test
public void testSQLUpdate() throws Exception{
Connection con = dataSource.getConnection();
Statement stmt = con.createStatement();
// get current data
ResultSet rst = stmt.executeQuery("select * from simple_data where id = 1");
if(rst.next()){
// from dataset.xml
assertEquals("value_before", rst.getString("content"));
rst.close();
// update via sql
int count = stmt.executeUpdate("update simple_data set content='value_after' where id=1");
stmt.close();
con.close();
// expect only one row to be updated
assertEquals("one row should be updated", 1, count);
// Fetch database data after executing the code
QueryDataSet databaseSet = new QueryDataSet(getConnection());
// filter data
databaseSet.addTable("simple_data", "select * from simple_data where id = 1");
ITable actualTable = databaseSet.getTables()[0];
// Load expected data from an XML dataset
IDataSet expectedDataSet = new FlatXmlDataSet(new File("src/test/resources/expectedDataSet.xml"));
ITable expectedTable = expectedDataSet.getTable("simple_data");
// filter unnecessary columns of current data by xml definition
actualTable = DefaultColumnFilter.includedColumnsTable(actualTable, expectedTable.getTableMetaData().getColumns());
// Assert actual database table match expected table
assertEquals(1,expectedTable.getRowCount());
assertEquals(expectedTable.getRowCount(), actualTable.getRowCount());
assertEquals(expectedTable.getValue(0, "content"), actualTable.getValue(0, "content"));
} else {
fail("no rows");
rst.close();
stmt.close();
con.close();
}
}
}