一个helloworld的例子,以及讲明如何用ant去打包以及其脚本.

首先是程序

package com.liao;

public interface HelloWorld {
    public String SayHello(String name);
}

package liao;

public interface HelloWorldLocal extends HelloWorld{

}


 


package com.liao.impl;

import com.liao.HelloWorld;
import com.liao.HelloWorldLocal;

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless(mappedName="HelloWorldBean")
@Remote (HelloWorld.class)
@Local (HelloWorldLocal.class)
public class HelloWorldBean implements HelloWorld, HelloWorldLocal {

    public String SayHello(String name) {       
        return name +"说:你好!?";
    }

}

web部分的测试jsp:
 <%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.foshanshop.ejb3.*, javax.naming.*"%>
<%
 try {  
        InitialContext ctx = new InitialContext();
      HelloWorldLocal local = (HelloWorldLocal) ctx.lookup("java:comp/env/ejb/HelloWorldLocal");
      out.println(local.SayHello("test"));
 } catch (Exception e) {
  out.println(e.getMessage());
 }
%>

web.xml:
  <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <description>foshanshop ejb3.0 Sample</description>
  
  <ejb-local-ref>
    <ejb-ref-name>ejb/HelloWorldLocal</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>com.foshanshop.ejb3.HelloWorldLocal</local>
 <!-- 如果一个EAR文件中存在多个EJB jar,而这些jar分别含有相同名称的EJB时,
     应在EJB名称前加上jar文件名和#号,如:HelloWorld.jar#HelloWorldBean -->
    <ejb-link>HelloWorldBean</ejb-link>
  </ejb-local-ref>
    <welcome-file-list>
      <welcome-file>Test.jsp</welcome-file>     
  </welcome-file-list>
</web-app>

 当ejb模块和web一起打包成.ear时,要在meta-inf下放application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"
             version="5">
 <display-name>EJB3 Sample Application</display-name>
 <module>
  <web>
   <web-uri>HelloWorld.war</web-uri>
   <context-root>HelloWorld</context-root>
  </web>
 </module> 
 <module>
     <ejb>HelloWorld.jar</ejb>
 </module> 
</application>

ant的配置文件:

  

<?xml version="1.0"?>
<!-- ======================================================================= -->
<!-- EJB3 WeblogicHelloWorld build file                                      -->
<!-- ======================================================================= -->
<project name="WeblogicHelloWorld" default="ear" basedir="..">
 <property name="app.dir" value="${basedir}/WeblogicHelloWorld" />
 <property name="src.dir" value="${app.dir}/src" />
 <property name="weblogic.home" value="C:/bea/wlserver_10.3"  description="weblogic产品所在目录,本书安装在C:/bea/wlserver_10.3"/>
 <property name="wls.username" value="weblogic" description="登录用户名,默认为weblogic"/>
 <property name="wls.password" value="weblogic" description="登录密码,默认为weblogic"/>
 <property name="wls.hostname" value="localhost" description="主机名称"/>
 <property name="wls.port" value="7001" description="所在端口,默认为7001"/>
 <property name="wls.server.name" value="examplesServer" description="weblogic中的目标服务器,默认为examplesServer"/>
 <property name="build.dir" value="${app.dir}/build" />
 <property name="build.classes.dir" value="${build.dir}/classes" />
 <!-- Build classpath -->
 <path id="build.classpath">
  <fileset dir="${basedir}/lib/javaee">
   <include name="*.jar" />
  </fileset>
  <fileset dir="${weblogic.home}/server/lib">
   <include name="weblogic.jar" />
  </fileset>
  <pathelement location="${build.classes.dir}" />
 </path>
 <!-- 定义一个Ant任务标签 -->
 <taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy" classpathref="build.classpath"/>
 <!-- =================================================================== -->
 <!-- Prepares the build directory                                        -->
 <!-- =================================================================== -->
 <target name="prepare" depends="clean">
  <mkdir dir="${build.dir}" />
  <mkdir dir="${build.classes.dir}" />
 </target>

 <!-- =================================================================== -->
 <!-- Compiles the source code                                            -->
 <!-- =================================================================== -->
 <target name="compile" depends="prepare" description="编绎">
  <javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="com/**">
   <classpath refid="build.classpath" />
  </javac>
 </target>

 <target name="ear" depends="compile" description="创建JavaEE发布包">
  <jar jarfile="${app.dir}/HelloWorld.jar">
   <fileset dir="${build.classes.dir}">
    <include name="com/**/*.class" />
   </fileset>
  </jar>
     <war warfile="${app.dir}/HelloWorld.war" webxml="${app.dir}/web/WEB-INF/web.xml">
       <fileset dir="${app.dir}/web">
         <include name="*.*"/>
       </fileset>
     </war>
  <ear earfile="${app.dir}/HelloWorld.ear" appxml="${app.dir}/META-INF/application.xml">
   <fileset dir="${app.dir}">
    <include name="HelloWorld.jar"/>
    <include name="HelloWorld.war"/>
   </fileset>
  </ear>
  <delete file="${app.dir}/HelloWorld.jar" />
  <delete file="${app.dir}/HelloWorld.war" />
 </target>
 <!-- =================================================================== -->
 <!-- 需要先启动weblogic                                                    -->
 <!-- =================================================================== -->
 <target name="deploy" depends="undeploy,ear" description="把应用发布到weblogic,部署名称为HelloWorld,你不再需要手工部署">
  <wldeploy action="deploy" name="HelloWorld"
       source="${app.dir}/HelloWorld.ear" targets="${wls.server.name}"
       user="${wls.username}" password="${wls.password}"
       adminurl="t3://${wls.hostname}:${wls.port}"
       debug="true" verbose="true" failοnerrοr="true"/>
    <echo message="你可以通过http://${wls.hostname}:${wls.port}/HelloWorld/Test.jsp调用EJB"/>
    <echo message="或者通过单元测试用例HelloWorldTest调用EJB,需要使用JDK1.6,并且把[weblogic home]/wlserver_10.3/server/lib/weblogic.jar加入到类路径下"/>
 </target>

 <target name="undeploy" description="卸载部署名称为HelloWorld的应用">
  <wldeploy action="undeploy" name="HelloWorld" targets="${wls.server.name}"
   user="${wls.username}" password="${wls.password}"
   adminurl="t3://${wls.hostname}:${wls.port}"
      debug="false" verbose="false" failοnerrοr="false" />
 </target>
 
 <!-- =================================================================== -->
 <!-- Cleans up generated stuff                                           -->
 <!-- =================================================================== -->
 <target name="clean">
  <delete dir="${build.dir}" />
 </target>
</project>


而如果用J2SE的测试文件:

 

package junit.test;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.junit.Test;

import com.liao.HelloWorld;
/**
 * 执行该用例,你需要JDK1.6以上版本,并且需要把[weblogic home]/wlserver_10.3/server/lib/weblogic.jar加入到类路径下
 * @author lihuoming
 *
 */
public class HelloWorldTest {
 
 @Test
 public void testSayHello() {
  try {
    Properties props = new Properties();
    props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    props.setProperty(Context.PROVIDER_URL, "t3://localhost:7001");
    InitialContext ctx = new InitialContext(props);
    HelloWorld remote = (HelloWorld) ctx.lookup("HelloWorldBean#"+ HelloWorld.class.getName());
    System.out.println(remote.SayHello("test"));
  } catch (NamingException e) {
   e.printStackTrace();
  }
 }

}