- 浏览: 303989 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (167)
- <HTML and JavaScript and CSS> (6)
- 《Java2 基础知识及概念》 (3)
- Java2 Tools及其他 (11)
- EJB2.0 相关 (3)
- 英语学习 (4)
- Oracle Database Server (27)
- 计算机理论 (9)
- Java持久层框架 (2)
- 《Linux操作系统》 (24)
- 杂项技术 (4)
- Application Server (15)
- Windows操作系统 (7)
- Java中间件 (6)
- 娱乐生活 (4)
- 《Java设计模式》 (3)
- 《Interview Skill》 (1)
- 《Struts原理及应用》 (1)
- Workflow (2)
- 云计算 (3)
- 项目实践 (3)
- WEB相关技术 (10)
- JavaScript技巧及应用 (1)
最新评论
(1)定义远程接口
package examples.ejb20.basic.statelessSession; import java.rmi.RemoteException; import javax.ejb.EJBObject; public interface Trader extends EJBObject { public TradeResult buy (String stockSymbol, int shares) throws RemoteException; public TradeResult sell (String stockSymbol, int shares) throws RemoteException; }
(2) 定义Home接口
package examples.ejb20.basic.statelessSession; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface TraderHome extends EJBHome { Trader create() throws CreateException, RemoteException; }
(3)定义EJB的实现类
package examples.ejb20.basic.statelessSession; import javax.ejb.CreateException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.naming.InitialContext; import javax.naming.NamingException; public class TraderBean implements SessionBean { private static final boolean VERBOSE = false; private SessionContext ctx; private int tradeLimit; // You might also consider using WebLogic's log service private void log(String s) { if (VERBOSE) System.out.println(s); } public void ejbActivate() { log("ejbActivate called"); } public void ejbRemove() { log("ejbRemove called"); } public void ejbPassivate() { log("ejbPassivate called"); } public void setSessionContext(SessionContext ctx) { log("setSessionContext called"); this.ctx = ctx; } 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 TradeResult 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 TradeResult(shares, stockSymbol); } public TradeResult 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 TradeResult(shares, stockSymbol); } }
(4) 配置文件
ejb-jar.xml
<?xml version="1.0"?> <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'> <ejb-jar> <enterprise-beans> <session> <ejb-name>statelessSession</ejb-name> <home>examples.ejb20.basic.statelessSession.TraderHome</home> <remote>examples.ejb20.basic.statelessSession.Trader</remote> <ejb-class>examples.ejb20.basic.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-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> <ejb-client-jar>ejb20_basic_statelessSession_client.jar</ejb-client-jar> </ejb-jar>
weblogic-ejb-jar.xml
<?xml version="1.0"?> <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN' 'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'> <weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>statelessSession</ejb-name> <enable-call-by-reference>True</enable-call-by-reference> <jndi-name>ejb20-statelessSession-TraderHome</jndi-name> </weblogic-enterprise-bean> </weblogic-ejb-jar>
(5)EJB client
package examples.ejb20.basic.statelessSession; 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.naming.NamingException; import javax.rmi.PortableRemoteObject; public class Client { private static final String JNDI_NAME = "ejb20-statelessSession-TraderHome"; private String url; private TraderHome home; public Client(String url) throws NamingException { this.url = url; home = lookupHome(); } public static void main(String[] args) throws Exception { log("\nBeginning statelessSession.Client...\n"); String url = "t3://localhost:7001"; Client client = null; // Parse the argument list if (args.length != 1) { log("Usage: java examples.ejb20.basic.statelessSession.Client t3://hostname:port"); return; } else { url = args[0]; } try { client = new Client(url); client.example(); } catch (NamingException ne) { log("Unable to look up the beans home: " + ne.getMessage()); throw ne; } catch (Exception e) { log("There was an exception while creating and using the Trader."); log("This indicates that there was a problem communicating with the server: "+e); throw e; } log("\nEnd statelessSession.Client...\n"); } /** * Runs this example. */ public void example() throws CreateException, RemoteException, RemoveException { // create a Trader log("Creating a trader"); Trader trader = (Trader) narrow(home.create(), Trader.class); String [] stocks = {"BEAS", "MSFT", "AMZN", "HWP" }; // execute some buys for (int i=0; i<stocks.length; i++) { int shares = (i+1) * 100; log("Buying "+shares+" shares of "+stocks[i]+"."); trader.buy(stocks[i], shares); } // execute some sells for (int i=0; i<stocks.length; i++) { int shares = (i+1) * 100; log("Selling "+shares+" shares of "+stocks[i]+"."); trader.sell(stocks[i], shares); } // remove the Trader log("Removing the trader"); trader.remove(); } /** * RMI/IIOP clients should use this narrow function */ private Object narrow(Object ref, Class c) { return PortableRemoteObject.narrow(ref, c); } /** * Lookup the EJBs home in the JNDI tree */ private TraderHome lookupHome() throws NamingException { // Lookup the beans home using JNDI Context ctx = getInitialContext(); try { Object home = ctx.lookup(JNDI_NAME); return (TraderHome) narrow(home, TraderHome.class); } catch (NamingException ne) { log("The client was unable to lookup the EJBHome. Please make sure "); log("that you have deployed the ejb with the JNDI name "+ JNDI_NAME+" on the WebLogic server at "+url); throw ne; } } /** * Using a Properties object will work on JDK 1.1.x and Java2 * clients */ private Context getInitialContext() throws NamingException { try { // Get an InitialContext Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); h.put(Context.PROVIDER_URL, url); return new InitialContext(h); } catch (NamingException ne) { log("We were unable to get a connection to the WebLogic server at "+url); log("Please make sure that the server is running."); throw ne; } } private static void log(String s) { System.out.println(s); } }
c:> java weblogic.ejbc ... 编译ejb.jar 现在都自动完成了
c:> java weblogic.deploy ...
打包成ear的配置文件application.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'> <application> <display-name>Basic StatelessSession ejb20</display-name> <description>Basic StatelessSession ejb20</description> <module> <ejb>ejb20_basic_statelessSession.jar</ejb> </module> </application>
使用ebj对象缓冲池来保存 无状态会话bean的对象。bean的实例都是相同的。缓冲池的设置取决于
(1) weblogic的线程数
(2) 数据库的连接数
生命周期的两种状态:
(1) 不存在
(2) 方法就绪池
发表评论
文章已被作者锁定,不允许评论。
相关推荐
JavaBean和Session Bean是Java企业级应用开发中的重要概念,特别是在使用Enterprise JavaBeans(EJB)技术时。本文将深入探讨这两个概念,以及如何在实际项目中使用它们。 首先,让我们了解什么是JavaBean。...
- 无状态SessionBean示例:同样包含一个Java类和接口,但这个类不会存储任何客户端特定的信息。测试代码可能展示了如何在高并发环境下使用SSB,以展示其效率。 - Swing程序:Swing是Java的一个图形用户界面(GUI)...
- **无状态Session Bean (Stateless Session Bean)**:每个客户端请求都会创建一个新的实例,不保存任何客户端状态,适合执行计算任务或事务操作。 - **有状态Session Bean (Stateful Session Bean)**:每个客户端...
与Stateful Session Bean(有状态会话Bean)不同,它维护了客户端会话状态,而Stateless Session Bean(无状态会话Bean)则不保留任何客户端状态,每次调用都独立于其他调用。Session Bean主要用于表示业务逻辑,...
标题"Stateful--sessionbean.zip_sessionBean_stateful"表明这个压缩包包含有关有状态会话Bean的实现资料,可能包括设计思路、步骤截图和源代码。这些资源对于理解如何创建和使用SFSB至关重要。 描述中的"有状态的...
"itfuture_sessionbean"的第二部分可能是指一系列教程或学习资料,聚焦于深入理解Session Bean的使用和实现。JBulider作为标签,表明这些材料可能与使用JBulider这一集成开发环境(IDE)来创建和管理Session Bean...
无状态会话 Bean(Stateless Session Bean)是企业级 Java(EJB)3.0 中的核心组件,主要用于实现业务逻辑,它不保存任何特定客户端的状态信息。本篇文章将深入讲解如何在 EJB3 中开发第一个无状态会话 Bean,以及...
例如,`@Stateless` 注解用于声明一个类为无状态SessionBean。 - **依赖注入**:通过`@EJB`注解,可以实现Bean之间的依赖关系,简化了代码的结构和管理。 - **简化接口**:EJB3.0支持本地接口(Local Interface)...
根据其设计模式,Session Bean分为有状态(Stateful Session Bean)和无状态(Stateless Session Bean)两种类型。本压缩包文件提供了这两个类型的实例,让我们深入探讨它们的概念、用途以及如何在实际应用中使用。 ...
在"ejb sessionbean demo"中,我们主要探讨的是如何使用EJB的Session Bean进行开发和演示。Session Bean通常用于实现业务逻辑,它们可以是无状态的,意味着每个请求都会创建一个新的Bean实例,不保留任何先前会话的...
本压缩包提供了两个关于Java EJB中状态ful(有状态)和stateless(无状态)SessionBean的实例,帮助开发者深入理解这两种类型的Bean。 一、有状态SessionBean(Stateful Session Bean) 有状态SessionBean(SFSB,...
【ejb入门录像 sessionBean】是针对企业级Java应用(Enterprise JavaBeans,简称EJB)技术的初学者设计的一段教学视频。EJB是Java EE(Java Platform, Enterprise Edition)框架的重要组成部分,它提供了一种标准的...
通过这两个示例,你可以学习如何在实际项目中创建和使用这两种类型的Session Bean,以及它们在处理并发请求和资源管理方面的差异。有状态Session Bean在处理并发时需要特别注意,因为它们必须确保同一时间只有一个...
无状态SessionBean(Stateless Session Bean)代表了一个业务逻辑单元,它不保存任何客户端的状态信息。这意味着每次客户端调用Bean的方法时,都会得到一个全新的、独立的Bean实例,不会记住之前的操作。无状态...
2. 无状态Session Bean(Stateless Session Bean) 无状态Session Bean(SSB)不保留任何特定客户端的状态信息,每个调用都是独立的,不受前一次调用的影响。SSB通常用于执行无状态的业务操作,如计算、查找或验证等...
本实例可能包含一个或多个演示程序,通过对比有状态和无状态SessionBean的使用场景和实现方式,帮助初学者理解这两种Bean的区别和应用场景。通过深入学习这些示例,你将更好地掌握如何在实际项目中运用EJB技术,提升...
根据会话的状态性,Session Bean分为有状态(Stateful)和无状态(Stateless)两种。无状态Session Bean对于每个方法调用都独立,不保留任何客户端会话信息;而有状态Session Bean则可以维护与特定客户端会话相关的...
简单的Java ejb实例代码,一个简单的Stateless Session Bean的例子,通过Bean使用远程接口方法访问数据,里面主要实现一个与时间有关的方法函数,同时编写了一个客户端测试程序。创建一个访问EJB的客户端应用程序,...
它定义了三种主要类型的Bean:Stateless Session Beans(无状态会话bean)、Stateful Session Beans(有状态会话bean)和Message Driven Beans(消息驱动bean)。我们关注的是Session Bean,它们通常代表业务逻辑,...