第一次编写EJB总结!

    这个月打算学习EJB, 看了头3章,发现有点乱,呵呵。果然EJB不是那么容易学的,第一个HelloWorld就搞了4个小时,但总算听到了EJB的声音了。具体的全过程我就不说了,主要写下和我一样是菜鸟的朋友容易犯的错误,也欢迎大虾们指教。

    我用的是JBoss+Eclipse。

    安装JBoss没什么说得了,记得安装完后在环境变量里添加:JBOSS_HOME=c:/jboss-4.0.2(这里是你安装JBoss的路径),将%JBOSS_HOME%/bin加入至PATH中。

    说明下JBoss的目录结构,对初学者还是有些帮助的。
bin : JBoss 开关 Scripts   
client
: 与JBoss通讯使用的客户端 libraries ( JARs )
docs
: 设定文档样本. ( 如资讯库设定文档样本等 )
docs/dtd
: JBoss 不同XML 的 Document Type Definitions (DTDs) 档.
lib
: JBoss 启动时, 会读取放在这里被不同配置共享的 libraries.
server
: 存放 JBoss 不同配置档案.
server/default
: JBoss 预设的配置档案.
server/default/conf
: JBoss 配置档案.
server/default/data
: JBoss 资料库.
server/default/deploy
: JBoss 自动发布检测目录. ( EBJ-JARs, WARs 及 EARs 放下去, JBoss 会自动检测)
server/default/lib
: JBoss 启动此配置目录时, 会读取这里的 libraries.
server/default/log
: 存放 JBoss 日志档案.
server/default/tmp
: 存放 JBoss 咱存档案.
server/default/work
: 存放 JBoss 编译后的java byte code.  

注意事项:
    1:ejb-jar.xml是放在META-INF文件夹里,如果你要建立jboss.xml也是放在这里。
    2:如果你在同一台机器上运行客户端代码和JBOSS服务器的话,那以下代码无须任何修改就可以运行,
          env.put(Context.PROVIDER_URL, "localhost:1099");
          如果在别的机器更换IP即可。
    3:如果你运行时出现ClassNotFound诸如此类的异常,说明你没有导入包,导入即可。我现在运行是导入了         2个包,jnp-client.jar,jbossall-client.jar,它们是在JBoss下client目录里面的。
    4:看到网上有很多写建立个jboss.xml,我运行后才理解它是用于设置JNDI的,其实像咱们这么简单可以不            需要建立。
       记住:Object obj = ctx.lookup("Hello");这里"Hello"是你在ejb-jar.xml里面的<ejb-name>得值,如果你建立  
       了jboss.xml那么"Hello"应该换成<jndi-name>的值。

这是我jboss.xml:
   
    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "jboss_4_0.dtd" >
<jboss>
    <enterprise-beans>
        <session>
            <ejb-name>Hello</ejb-name>
            <jndi-name>example/Hello</jndi-name>
        </session>
    </enterprise-beans>
</jboss>

HelloClient.java:
   
package example;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import java.util.*;

public class HelloClient {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        Hashtable env = new Hashtable();
        
        env.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.jnp.interfaces.NamingContextFactory");
        env.put(Context.PROVIDER_URL, 
"localhost:1099");
        env.put(
"java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
        
        
try {
            Context ctx 
= new InitialContext(env);
            Object obj 
= ctx.lookup("Hello");
            
            HelloHome home 
= (HelloHome)javax.rmi.PortableRemoteObject.narrow(obj, HelloHome.class);
            Hello hello 
= home.create();
            
            System.out.println(hello.hello());
            
            hello.remove();
        }
 catch (Exception e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e.getMessage());
        }

    }


}


以上是我总结的些经验,希望给初学者一些帮助。
发布了13 篇原创文章 · 获赞 3 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章