以上是我打包部署后的文件目录结构,放在jboss的server\all\deploy\目录下
其中几个文件内容如下:
index.jsp<%@ page language="java" import="java.util.*" %>
<jsp:useBean id="trderClient" class="webBean.TraderClient" scope="page"/><%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  
  <body>
<%
trderClient.example();
%>
    <%=path%> <br><%=basePath%><br><form method="get" action="servlet/FirstServlet"><input type='submit' value='GO'></form>
  </body>
</html>
--------------------------------------------------
/*
 * TraderClient.java
 */
package webBean;import java.rmi.RemoteException;
import java.util.Hashtable;import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;import statelessSession.Trader;
import statelessSession.TraderHome;public class TraderClient {
public TraderClient() {
} /**
 * Get the initial naming context
 */
protected Context getInitialContext() throws Exception {
Hashtable props = new Hashtable();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
props.put(Context.PROVIDER_URL, "jnp://localhost:1099");
Context ctx = new InitialContext(props);
return ctx;
} /**
 * Get the home interface
 */
protected TraderHome getHome() throws Exception {
Context ctx = this.getInitialContext();
Object o = ctx.lookup("statelessSession.TraderHome");
TraderHome intf = (TraderHome) PortableRemoteObject.narrow(o,
TraderHome.class);
return intf;
} public void example() {
try{
Trader trader = (Trader) narrow(getHome().create(), Trader.class);
String[] stocks = { "BEAS", "MSFT", "AMZN", "HWP" };
for (int i = 0; i < stocks.length; i++) {
int shares = (i + 1) * 100;
trader.buy(stocks[i], shares);
}

for (int i = 0; i < stocks.length; i++) {
int shares = (i + 1) * 100;
trader.sell(stocks[i], shares);
}
trader.remove();
}
catch(CreateException e){
System.out.println("CreateException:"+e);
}
catch(RemoteException e){
System.out.println("RemoteException:"+e);
}
catch(RemoveException e){
System.out.println("RemoveException:"+e);
}
catch(Exception e){
System.out.println("Other Exception:"+e);
}
}  private Object narrow(Object ref, Class c) {
return PortableRemoteObject.narrow(ref, c);
}
}-----------------------------------------------------------------
ejb-jar.xml
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "ejb-jar_2_0.dtd">
<ejb-jar>
<small-icon>images/green-cube.gif</small-icon>
<enterprise-beans>
<session>
<small-icon>images/orange-cube.gif</small-icon>
<ejb-name>statelessSession</ejb-name>
<home>statelessSession.TraderHome</home>
<remote>statelessSession.Trader</remote>
<ejb-class>statelessSession.TraderBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<env-entry>
<env-entry-name>WEBL</env-entry-name>
<env-entry-type>java.lang.Double</env-entry-type>
<env-entry-value>10.0</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>INTL</env-entry-name>
<env-entry-type>java.lang.Double</env-entry-type>
<env-entry-value>15.0</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>tradeLimit</env-entry-name>
<env-entry-type>java.lang.Integer</env-entry-type>
<env-entry-value>500</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>statelessSession</ejb-name>
<method-intf>Remote</method-intf>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
--------------------------------------------------------------------
jboss-service.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>statelessSession</ejb-name>
<jndi-name>statelessSession.TraderHome</jndi-name>
</session>
<secure>true</secure>
</enterprise-beans>
<resource-managers />
</jboss>

解决方案 »

  1.   

    /*
     * Created on 2004-11-24
     */
    package statelessSession;import java.rmi.RemoteException;import javax.ejb.EJBObject;/**
     * Trader.java
     */
    public interface Trader extends EJBObject {
    public TraderResult buy(String stockSymbol, int shares)
    throws RemoteException; public TraderResult sell(String stockSymbol, int shares)
    throws RemoteException;
    }-----------------------------------------------------------
    /*
     * TraderBean.java
     */
    package statelessSession;import java.rmi.RemoteException;import javax.ejb.CreateException;
    import javax.ejb.EJBException;
    import javax.ejb.SessionBean;
    import javax.ejb.SessionContext;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;public class TraderBean implements SessionBean {
    /**
     * <code>serialVersionUID</code> 的注释
     */
    private static final long serialVersionUID = 1L; private static final boolean VERBOSE = true; private SessionContext ctx; private int tradeLimit; public void log(String s) {
    if (VERBOSE)
    System.out.println(s);
    } /*
     * (non-Javadoc)
     * 
     * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
     */
    public void setSessionContext(SessionContext ctx) throws EJBException,
    RemoteException {
    log("setSessionContext called");
    this.ctx = ctx; } /*
     * (non-Javadoc)
     * 
     * @see javax.ejb.SessionBean#ejbRemove()
     */
    public void ejbRemove() throws EJBException, RemoteException {
    log("ejbRemove called"); } /*
     * (non-Javadoc)
     * 
     * @see javax.ejb.SessionBean#ejbActivate()
     */
    public void ejbActivate() throws EJBException, RemoteException {
    log("ejbActivate called"); } /*
     * (non-Javadoc)
     * 
     * @see javax.ejb.SessionBean#ejbPassivate()
     */
    public void ejbPassivate() throws EJBException, RemoteException {
    log("ejbPassivate called"); } public void ejbCreate() throws CreateException {
    log("ejbCreate called");
    try {
    InitialContext ic = new InitialContext();
    Integer tl = (Integer) ic.lookup("java:comp/env/tradeLimit");
    tradeLimit = tl.intValue();
    } catch (NamingException ne) {
    throw new CreateException("Failed to find environment value " + ne);
    }
    } public TraderResult buy(String stockSymbol, int shares) {
    if (shares > tradeLimit) {
    log("Attempt to buy " + shares + " is greater than limit of "
    + tradeLimit);
    shares = tradeLimit;
    }
    log("Buying " + shares + "shares of " + stockSymbol);
    return new TraderResult(shares, stockSymbol);
    } public TraderResult sell(String stockSymbol, int shares) {
    if (shares > tradeLimit) {
    log("Attempt to sell " + shares + " is greater than limit of "
    + tradeLimit);
    shares = tradeLimit;
    }
    log("Selling " + shares + "shares of " + stockSymbol);
    return new TraderResult(shares, stockSymbol);
    }}
    --------------------------------------------------------------
    /*
     * TraderHome.java
     */
    package statelessSession;import java.rmi.RemoteException;import javax.ejb.CreateException;
    import javax.ejb.EJBHome;
    public interface TraderHome extends EJBHome {
    Trader create() throws CreateException,RemoteException;}
    ------------------------------------------------------------
    /*
     * TraderResult.java
     */
    package statelessSession;import java.io.Serializable;
    public final class TraderResult implements Serializable {
    /**
     * <code>serialVersionUID</code> 的注释
     */
    private static final long serialVersionUID = 1L; private final int numberTraded; private final String stockSymbol; public TraderResult(int nt, String ss) {
    numberTraded = nt;
    stockSymbol = ss;
    } public int getNumberTraded() {
    return numberTraded;
    } public String getStockSymbol() {
    return stockSymbol;
    }
    }
      

  2.   

    请大家帮帮我啊,弄了好几天了一个j2EE测试还没调通,真郁闷啊!
      

  3.   

    请大家帮帮我啊,弄了好几天了一个j2EE测试还没调通,真郁闷啊!
    ------------GZ,我也是这个问题,UP,希望有人来帮帮忙!!!!
      

  4.   

    如果是在同一台电脑上做,这个
    protected Context getInitialContext() throws Exception {
    Hashtable props = new Hashtable();
    props.put(Context.INITIAL_CONTEXT_FACTORY,
    "org.jnp.interfaces.NamingContextFactory");
    props.put(Context.URL_PKG_PREFIXES,
    "org.jboss.naming:org.jnp.interfaces");
    props.put(Context.PROVIDER_URL, "jnp://localhost:1099");
    Context ctx = new InitialContext(props);
    return ctx;
    }
    最好还是不要带属性,这种是用在异步发布找定位
      

  5.   

    To:yeshucheng(叶澍成★七哥---女人的美莎酮))
    我是第一次弄这个,例子也是从书上抄来的,按你说的,该如何做呢?