以上是我打包部署后的文件目录结构,放在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>
其中几个文件内容如下:
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>
* 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;
}
}
------------GZ,我也是这个问题,UP,希望有人来帮帮忙!!!!
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;
}
最好还是不要带属性,这种是用在异步发布找定位
我是第一次弄这个,例子也是从书上抄来的,按你说的,该如何做呢?