Posted on 2007-12-24 13:36
G_G 阅读(1092)
评论(4) 编辑 收藏 所属分类:
EJB
为了了解hbm的rmic真正的威力还有为了更近一步了解;在此特使用文本和dos命令完成这次学习。
在此读者最好先做好不使用 IDE 的准备(^_^! 文本编辑,dos编辑和运行)
阅读需要:
java,javac,
rmiregistry,rmic,ant 等命令有所涉及(只是简单使用,不会也别怕!)可行性使用说明:
持久层程序员成功开启rmiregistry服务,在局域网内其他使用数据的队友就只要加载
hbmBean 的映射jar和 dao接口jar后 就可以取得数据。根本感觉不到hbn使用。
优点:
1.其他队员编译classpath中不需要hbm的任何东西,跟关注自己东西。
2.强制接口规范。
3.正交编程。
4.DAO测试性能方便。
5.这还是 EJB 原理,转换容易。
缺点:
1.rmic 突破放火墙能力有限,可以换成EJB
2.大型项目注册服务器,配置繁琐,可以使用EJB3.0
使用:1.jdk1.5
2.jar使用(为了用hbm)
jta.jar;
asm.jar;
commons-collections-2.1.1.jar;
commons-logging-1.0.4.jar;
hibernate3.jar;
dom4j-1.6.1.jar;
cglib-2.1.3.jar;
antlr-2.7.5H3.jar
MYSQL.jar
3.ant1.7(使用hbm生成 mapping;config...)
4.Middlegen-Hibernate-r5 同上
5.使用文件路径
E:\rmi_test->
+-src
--hibernate3.xml
--hibernate3_ant.properties
开始:
1>使用ant 对 hbm 配置映射参考 :ant 项目实际 并使用 hibernate3.xml
dos 输入 ->
ant -f hibernate3.xml ddl2hbm (使用了Middlegen-Hibernate-r5)
->
ant -f hibernate3.xml create_config (hibernate.cfg.xml建立)
在 hibernate.cfg.xml中添加-> <mapping resource="hibernate\Liu.hbm.xml" />
dos 输入 ->
ant -f hibernate3.xml hbm2java
变成+-src
|-hibernate
|-Liu.hbm.xml
|-Liu.java
|-hbmConfig
|-hibernate.cfg.xml
2>手动建hbm
HibernateSessionFactory在hbmConfig文件中
(为了简单copy->myeclipes生成的)
package hbmConfig;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html}.
*/
public class HibernateSessionFactory {
/**
* Location of hibernate.cfg.xml file.
* NOTICE: Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file. That
* is place the config file in a Java package - the default location
* is the default Java package.<br><br>
* Examples: <br>
* <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml".
* CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code>
*/
private static String CONFIG_FILE_LOCATION = "/hbmConfig/hibernate.cfg.xml";
/** Holds a single instance of Session */
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
/** The single instance of hibernate configuration */
private static final Configuration cfg = new Configuration();
/** The single instance of hibernate SessionFactory */
private static org.hibernate.SessionFactory sessionFactory;
/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* Default constructor.
*/
private HibernateSessionFactory() {
}
}
dos中编译->
E:\rmi_test\src>javac -cp .;D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.2\hibernate3.jar
hbmConfig/*.java
3>DAO实现
接口->
package rmic;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IHello extends Remote {
public String sayHello(String id) throws RemoteException;
}
实现类->
package rmic;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
//取消显示指定的编译器警告!
//参考 : http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/SuppressWarnings.html
@SuppressWarnings("serial")
public class Hello extends UnicastRemoteObject implements IHello {
public Hello() throws RemoteException {
super();
}
public void rebind(String name) {
try {
Naming.rebind(name,this);
System.out.println("Server is running");
} catch(Exception e) {
e.printStackTrace();
}
}
public String sayHello(String id) throws RemoteException {
System.out.println("run Server.");
org.hibernate.Session session = hbmConfig.HibernateSessionFactory.currentSession();
org.hibernate.Query qu = session.createQuery("from Liu lt where lt.id=:id");
hibernate.Liu ll = (hibernate.Liu)qu.setString("id",id).uniqueResult();
hbmConfig.HibernateSessionFactory.closeSession();
return "Hello "+ll.getName()+" This is processed by RMI";
}
}
dos编译->
E:\rmi_test\src>javac -cp .;D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.
2\hibernate3.jar rmic/*.java
4>java注册机开启
E:\rmi_test\src>rmiregistry 1099
5> 本例简单服务器开启
package start;
import java.rmi.RMISecurityManager;
import rmic.Hello ;
public class Start {
public static void main(String[] args) {
try {
//System.setSecurityManager(new RMISecurityManager());
new Hello().rebind("RMI/Mclaren");
} catch(Exception e) {
e.printStackTrace();
}
}
}
dos编译->E:\rmi_test\src>javac start/*.java
运行->
java -classpath .;D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.2\lib\jta.jar;
D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.2\lib\asm.jar;
D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.2\lib\commons-collections-2.1.1.jar;
D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.2\lib\commons-logging-1.0.4.jar;
D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.2\hibernate3.jar;
D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.2\lib\dom4j-1.6.1.jar;
E:\lib\MYSQL.JAR;D:\hbn\hibernate-3.2\hibernate-3.2.5.ga\hibernate-3.2\lib\cglib-2.1.3.jar;
E:\and\ant\bin\antlr-2.7.5H3.jar
start.Start
6>客户端
得到存根Hello_Stub.class-> E:\rmi_test\src>rmic rmic.Hello
换个地方:c:\\TT 并copy rmic中的IHello.class和Hello_Stub.class连同目录rmic一同copy
package client;
import java.rmi.Naming;
import rmic.IHello;
public final class Client {
public static void main(String[] args) {
System.out.println("client.");
try {
IHello hello = (IHello)Naming.lookup("rmi://localhost:1099/RMI/Mclaren");
System.out.println(hello.sayHello("1"));
} catch(Exception e) {
e.printStackTrace();
}
}
}
dos编译-> C:\TT>javac -d . Client.java
C:\TT>java client.Client
client....
Hello gg This is processed by RMI (gg就是数据 成功! )
mysql> select * from liu;
+----+------+-----+
| id | name | avg |
+----+------+-----+
| 1 | gg | 24 |
+----+------+-----+