注册
 找回密码
 注册
江西广告网
查看: 267|回复: 0
打印 上一主题 下一主题

Beans入门必读之为Beans增加功能

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2008-12-28 12:10:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  EJB 上下文:通往容器的门户   存在如下信息:   1、关于bean的home对象和EJB对象的信息   2、bean的当前事务信息。   3、 对于客户授权的安全信息。Bean可以通过查询环境决定客户执行操作所需要的安全层次。   4、 bean的环境属性。   容器将所有这些信息保存在一个称为EJB context object的对象里。EJB上下文作为容器的物理部分,可以被bean访问。这些访问可以让bean得到当前的状态和改变当前的状态。   上下文可以在bean的生命期中被更改。   EJB1.0 javax.ejb.EJBContext接口:   public interface javax.ejb.EJBContext   {   public javax.ejb.EJBHome getEJBHome();   public java.util.Properties getEnvironment();   public java.security.Identity getCallerIdentity();   public boolean isCallerInRole(java.security.Identity);   public javax.jts.UserTransaction getUserTransaction();   public void setRollbackOnly();   public boolean getRollbackOnly();   }   会话bean的上下文   上下文根据bean的不同分为:会话上下文和实体上下文。它们分别被用于会话bean和实体bean      javax.ejb.EJBContext   public interface javax.ejb.SessionContext   extends javax.ejb.EJBContext   {   public javax.ejb.EJBObject getEJBObject();   }   注意:SessionContext接口继承了EJBContext接口,在EJBContext中定义的方法提供了对会话bean的存取路径。   对于会话bean,调用setSessionContext,这个方法在javax.ejb.SessionBean接口中被定义。对于实体bean,调用setEntityContext。   SessionContext.getEJBObject()   在EJB中,beans可以作为其他bean的客户端。如果一个bean需要调用另外的bean,getEJBObject()方法则是必需的。在java中,对象可以使用this关键字保存自身的参考。在EJB中,bean不能使用this关键字给其他bean传递对象,这是因为所有的客户调用bean上的方法都是间接调用bean的EJB对象。Bean可以使用this关键字将自己传给EJB对象。   了解EJB的安全性   首先,客户端必须是可被鉴别的。   其次,客户端必须是已经授权的。   第一步:鉴别   不同的EJB容器拥有不同的鉴别客户端的方法。例如:BEA的WebLogic中,当不同客户端代码使用JNDL定位Home对象时,提供不同的用户名和密码。   Properties props = System.getProperties();   props.put(Context.SECURITY_PRINCIPAL, "EmployeeA");   props.put(Context.SECURITY_CREDENTIALS, "myPassword1");   Context ctx = new InitialContext(props);   // Use the initial context to lookup home objects...   EJB没有制定如何鉴别的规范,因此这样就影响了可移植性。要了解这方面,查看各类容器的文档。   当运行这段代码时,应用服务器将验证你的用户名和密码,这是应用服务器规范。许多应用服务器允许在属性文件里设置用户名和密码。这个文件将在运行时由应用服务器读。   高级点的服务器支持已经存在的验证系统的整合。例如将用户名和密码列表存储在LDAP服务器中。   第二步:授权   只有经过授权的客户端才可以调用bean中的方法。EJB中有两种验证授权的方法:declaratively和programmatically。即:由容器执行所有的授权检验、在程序中进行授权检查。   Declarative授权检查时,要在配置描述符中声明bean的授权需要。例如使用BEA的WebLogic服务器的配置描述符的例子:   (accessControlEntries   submitPurchaseOrder [employees]   approvePurchaseOrder [managers]   DEFAULT [administrators]   ); end accessControlEntries   容器将在运行时自动的执行安全检查。抛会出java.lang.SecurityException异常。   Programmatic授权检查,必须查询EJB上下文得到当前客户端的授权信息。由两种方法调用CallerInRole(Identity role)和getCallerIdentity()。   isCallerInRole()   import java.security.Identity;   ...   public class MyBean implements SessionBean {   private SessionContext ctx;   ...   public void foo() {   Identity id = new MyIdentity("administrators");   if (ctx.isCallerInRole(id)) {   System.out.println("An admin called me");   return;   }   System.out.println("A non-admin called me");   }   }      import java.security.Identity;   public class MyIdentity extends Identity {   public MyIdentity(String id) {   super(id);   }   }   getCallerIdentity()   import java.security.Identity;   ...   public class MyBean implements SessionBean {   private SessionContext ctx;   ...   public void bar() {   Identity id = ctx.getCallerIdentity();   String name = id.getName();   System.out.println("The caller's name is " name);   }   }   了解EJB对象的操作   许多EJB应用程序需要客户端有与bean断开的能力,还要有与bean重建连接的能力。EJB提供了EJB object handles。EJB对象操作对于EJB对象是一个长生命期的代理。可以用它来重建与EJB对象的连接,并保证会话状态不被丢失。下面是EJB对象操作的代码   // First, get the EJB object handle from the EJB object.   javax.ejb.Handle myHandle = myEJBObject.getHandle();   // Next, serialize myHandle, and then save it in   // permanent storage.   ObjectOutputStream stream = ...;   stream.writeObject(myHandle);   // time passes...   // When we want to use the EJB object again,   // deserialize the EJB object handle   ObjectInputStream stream = ...;   Handle myHandle = (Handle) stream.readObject();   // Convert the EJB object handle back into an EJB object   MyRemoteInterface myEJBObject =   (MyRemoteInterface) myHandle.getEJBObject();   // Resume calling methods again   myEJBObject.callMethod();   例子:The Puzzle Game “Fazuul”
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表