jndi-name>
<connection-url>jdbc:mysql://10.0.0.18:3306/test</connection-url>
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<user-name>root</user-name>
<password></password>
</local-tx-datasource>
</datasources>
注意上面文件中的IP和数据库用户名及密码与你自己的相同。
下面我们就开始来编写我们的实体Bean,同样,我们先建一个工作目录来存放我们这个实体Bean的所有发布前的文件。如上一节中所示,所有的目录均建立在JBOSS目录下的myproject目录中。
建立目录过程如下:
在JBOSS安装目录下建一个myproject 目录,如果你在上一节中己建了,可不建,然后在myproject目录下建一个AccountBMP目录存放我们这个Bean的所有的文件;然后再在AccountBMP目录下新建一个ejb目录和一个src目录,接着在ejb目录下新建一个account.jar目录和一个client目录。然后再在account.jar目录中新建一个account目录和一个META-INF目录及在account目录下面新建一个ejb目录;同样,在cient目录中新建一个account目录和在account下面再建一个ejb目录。
建好后的目录结构如下图1所示:
图1
接着,我们来编写我们的银行账户实体BEAN,进入src目录,所有的源文件都放在此目录中。
第一步编写Remote接口:
//Account.java
package account.ejb;
import javax.ejb.*;
import java.rmi.RemoteException;
public interface Account extends EJBObject{
//商务方法
public void storeinto(double amt) throws AccountException,RemoteException;
public void getout(double amt) throws AccountException,RemoteException;
//实体Bean上的获得器/设置器方法
public double getBalance() throws RemoteException;
public void setBalance(double balance) throws RemoteException;
public String getOwnerName() throws RemoteException;
public void setOwnerName(String name) throws RemoteException;
public String getAccountID() throws RemoteException;
public void setAccountID(String id) throws RemoteException;
}
大家看到,在这个方法中,我们抛出了一个自己定义的AccountException异常,我们在此给出它的代码如下:
//AccountException.java
package account.ejb;
//自定义异常类
public class AccountException extends Exception{
public AccountException(){
super();
}
public AccountException(Exception e){
super(e.toString());
}
public AccountException(String s){
super(s);
}
}
然后,我们编写Home接口,如下所示:
//AccountHome.java
package account.ejb;
import javax.ejb.*;
import java.util.Collection;
import java.rmi.RemoteException;
public interface AccountHome extends EJBHome{
Account create(String accountID,String ownerName,double balance) throws CreateException,RemoteException;
public Account findByPrimaryKey(AccountPK key) throws FinderException,RemoteException;
public Collection findByOwnerName(String name) throws FinderException,RemoteException;
//这个方法独立于所有的账户(即EJB实例)
public double getTotalBankValue() throws AccountException,RemoteException;
}
注意:上面的在Home接口中,我们定义了三个查找的方法,通常情况下,我们把查找实体Bean的方法都定义在Home接口中,把商务方法定义在Remote接口中,然后它们均在Bean类中实现。而且,我们必须将查找方法的名称均命为findByxxxx(),这种查找方法是与某一个实体Bean对象相关联的,如果我们需有其它的查找方法,可以自己定义名称,如上面的getTotalBankValue()方法,而且,我们在这里要注意:这里的命名与在Bean实现中的命名要对应起来。一般情况下,每一个BMP必须定义一个findByPrimaryKey()方法。
接着,我们来编写此实体Bean的主键类,主键类的格式比较固定,如下所示:
//AccountPK.java
package account.ejb;
import java.io.Serializable;
//主键类
public class AccountPK implements java.io.Serializable{
public String accountID;
public AccountPK(String id){
this.accountID = id;
}
public AccountPK(){
}
public String toString(){
return accountID;
}
public int hashCode(){
return accountID.hashCode();
}
public boolean equals(Object account){
return ((AccountPK)account).accountID.equals(this.accountID);
}
}
其中后三个方法是必须实现的。
接着,我们来实现我们的实体Bean类,它很长,希望不要认为它有占字数的嫌疑。这个类由四部分组成:setter/getter方法、容器调用的方法、商务
上一页 [1] [2] [3] [4] [5] [6] 下一页