RMI 数据源方式

相关资料:ObjectWeb  http://rmijdbc.ow2.org/
下载驱动:RmiJdbc.jar
 
Make your CLASSPATH variable point on the RmiJdbc.jar package: it is located in the dist/lib subdirectory of the RmiJdbc distribution
  • Unix example (bash style):
    export CLASSPATH=$CLASSPATH:/usr/local/RmiJdbc/dist/lib/RmiJdbc.jar
  • Windows example:
    set CLASSPATH=%CLASSPATH%;C:\RmiJdbc\dist\lib\RmiJdbc.jar

Start the RmiJdbc Server component:

java org.objectweb.rmijdbc.RJJdbcServer [-noreg] [-port regportnum] [-lp portnum] [-sm] [-ssl] [driverList]

Options:

  • -noreg: means you launch the RmiJdbc server with an external rmiregistry.
  • -port regportnum: specify the rmiregistry port (optional, useful if you launch rmiregistry on a port of your own).
  • -lp portnum: specify the listener port for remote objects (optional, useful if need to use a single port for remote objects – otherwise, dynamically allocated ports are used).
  • -sm: use the standard RMI SecurityManager (otherwise, a relaxed SecurityManager is used, equivalent to the RMI SecurityManager with AllPermissions set).
  • -ssl: use in SSL mode (see documentation for details).
  • driverList: list of JDBC Driver classes available on your server (ex. org.enhydra.instantdb.jdbc.idbDriver). You can also declare your driver list in the jdbc.drivers system property (java -Djdbc.drivers=driverList RmiJdbc.RJJdbcServer).

Then, a remote JDBC client can access your local database!

client code for example:

import java.sql.*;

import java.rmi.*;
import RmiJdbc.*;
import java.net.InetAddress;
/** * This is a sample program for RmiJdbc client/server jdbc Driver * RmiJdbc relies on Java RMI for jdbc objects distribution */
public class TestClient { 
 public static void main(String[] args) {    
      try {      
           // Register RmiJdbc Driver in jdbc DriverManager      
          // On some platforms with some java VMs, newInstance() is necessary...     
           Class.forName("org.objectweb.rmijdbc.Driver").newInstance();      
           // Test with InstantDB java database engine      
           // See http://www.lutris.com/products/instantDB/index.html      
            // for info & download     
            String url = "jdbc:idb:sample.prp";      // RMI host will point to local host     
          String rmiHost = new String(       "//" + InetAddress.getLocalHost().getHostName());      
           // RmiJdbc URL is of the form:     
          // jdbc:rmi://<rmiHostName[:port]>/<jdbc-url>      
          java.sql.Connection c = DriverManager.getConnection("jdbc:rmi:"       + rmiHost + "/" + url);             java.sql.Statement st = c.createStatement();     
    java.sql.ResultSet rs = st.executeQuery("SELECT * FROM import1");    
       java.sql.ResultSetMetaData md = rs.getMetaData();    
       while(rs.next()) {       
                  System.out.print("\nTUPLE: | ");      
                  for(int i=1; i<= md.getColumnCount(); i++) {        
                                 System.out.print(rs.getString(i) + " | ");        }      
                      }      rs.close();  
                    } catch(Exception e) {      e.printStackTrace();    }  }};
 
和Spring集成的方式(首先也需要Start the RmiJdbc Server component):
1.加入相应的Jar包
2.在applicationContext.xml中加入bean
     <bean id="wldtDataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
               <property name="driverClassName">
                     <value>org.objectweb.rmijdbc.Driver</value>
            </property>
           <property name="url">
                   <value>jdbc:rmi://172.20.52.26/jdbc:odbc:SiteWeaver</value><!--java默认1099端口-->
          </property></bean><bean id="wldtjdbcDAO" class="com.thunisoft.summer.dao.jdbc.JdbcDAO">
         <property name="dataSource">
                    <ref bean="wldtDataSource" />
        </property>
 </bean>
3.在DAO层注入数据源
        private JdbcTemplate getWldtJdbcTemplate()    {      
                return ((JdbcDAO) AppContext.getInstance().getAppContext().getBean( "wldtjdbcDAO")).getJdbcTemplate();    }
其中JdbcDAO继承了 JdbcDAO extends JdbcDaoSupport 在其中注入了相应的数据源,方便调用其提供的模版方法template
 

4.在RMI的server端还需要设置ODBC数据源

如图: