|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。j2ee|计划特定厂商的weblogic-ejb-jar.xml
我们起首在weblogic-ejb-jar.xml中界说厂商特定的信息。在这里我们告知服务器在哪儿寄存当地存根(stub)和哪儿往查找CMP映照。
耐久映照信息:
<persistence-type>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>6.0</type-version>
<type-storage>META-INF/weblogic-cmp-rdbms-jar.xml<
/type-storage>
</persistence-type>
当地JNDI名字
<local-jndi-name>InventoryHome</local-jndi-name>
特定厂商的weblogic-cmp-rdbms-jar.xml
数据源(datasource)称号:(这个数据源在设置的时分被创立)
<data-source-name>InventoryDB</data-source-name>
表(table)名:
<table-name>inventory</table-name>
域(field)映照
<field-map>
<cmp-field>stock</cmp-field>
<dbms-column>stock</dbms-column>
</field-map>
<field-map>
<cmp-field>item</cmp-field>
<dbms-column>item</dbms-column>
</field-map>
<field-map>
<cmp-field>price</cmp-field>
<dbms-column>price</dbms-column>
</field-map>
如今我们有了我们想要得统统。容器将使用笼统类和部署信息来使统统事情的很好。因为某些缘故原由,我们大概让这个CMPbean移植到BMP。以下是为何我们要如许做的缘故原由
1.可移植性:以后,它只事情在WebLogic6.1,,而我们其实不想进修其他的工具。这十分一般假如我们想卖这个数据库组件的话--它可以运转在任何服务器上。
2.功能:假如我们想很好的运转SQL(用存储历程,表的团结等等)。
3.可交换的数据源:假如我们想会见分歧的数据源而不是RDBMS。
用BMP移植Bean
这里我们将会商移植形式。我们能够经由过程“酿成耐久办理器“形式将CMP移植到BMP。我们能够看到耐久办理器扩大了我们创立的笼统类并完成了笼统类的办法!终极的计划看起来如图二:
BMP实体bean
让我们看看这个行将成为BMPbean的bean类:
扩大笼统CMPbean类:
publicclassInventoryBeanBMPextendsInventoryBean{}
创立映照域:
publicStringitem;
publicfloatprice;
publicintstock;改写ejb*()系列办法:
为了改写EJB办法,我们必要记着在BMP中我们对每个办法所负的义务
办法义务
ejbLoad()从数据库中读取数据(SELECT)
ejbStore()更新数据库中的数据(UPDATE)
ejbRemove()从数据库中删除数据(DELETE)
ejbCreate()拔出新的数据(INSERT)
ejbFindByPrimaryKey(primarykey)确认主键存在
ejbFindAllPrices()为每项前往一个主键的collection
年夜多半项目看起来是一样的,以是让我们看个中一个办法(你能够在所下载的代码中看到其他代码)
publicStringejbCreate(Stringitem,floatprice,intstock)throwsCreateException{
//insertrowintodatabase
this.item=item;
this.price=price;
this.stock=stock;
//拔出数据库纪录
try{
Connectionconnection=getConnection();
PreparedStatementstatement=connection.prepareStatement
("INSERTINTOinventory(item,price,stock)valueS(?,?,?)");
statement.setString(1,item);
statement.setFloat(2,price);
statement.setInt(3,stock);
if(statement.executeUpdate()!=1){
statement.close();
connection.close();
thrownewCreateException("Couldnotcreate:"+item);
}
statement.close();
connection.close();
returnitem;
}
catch(SQLExceptione){
thrownewEJBException("Couldnotcreate:"+item,e);
}
}
完成get和set办法:
publicStringgetItem(){
returnthis.item;
}
publicvoidsetItem(Stringitem){
this.item=item;
}
publicfloatgetPrice(){
returnthis.price;
}
publicvoidsetPrice(floatprice){
this.price=price;
}
publicintgetStock(){
returnthis.stock;
}
publicvoidsetStock(intstock){
this.stock=stock;
}
帮助函数失掉一个JDBC毗连:
privateConnectiongetConnection()throwsSQLException{
DataSourceds=null;
try{
Contextctx=newInitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/InventoryDB")
}catch(NamingExceptionexp){
exp.printStackTrace()
}
return(ds==null)?null:ds.getConnection();
}
EJB部署形貌符
尺度ejb-jar.xml
从CMP转换成BMP时要改动部署情况:
class指向BMP类而不是笼统类,我们要让容器晓得我们本人办理耐久:
<ejb-class>InventoryBeanBMP</ejb-class>
<persistence-type>Bean</persistence-type>
到场JDBC数据源援用:(在下面getConnection()办法中利用)
<resource-ref>
<res-ref-name>jdbc/InventoryDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
厂商特定的weblogic-ejb-jar.xml:
<reference-descriptor>
<resource-description>
<res-ref-name>jdbc/InventoryDB</res-ref-name>
<jndi-name>inventoryDB</jndi-name>
</resource-description>
</reference-descriptor>
我们不用过量地体贴厂商特定的文件,正如我们在CMP中所做的。我们必要指定当地JNDI称号(与之前一样),我们必要指出数据源的当地地点,它部署在使用服务器中。我们已重用了笼统类,改写它满意我们所必要得BMP完成,然后把我们的部署形貌符打包
结论:
我们已研讨了无能净拖拉让CMP转换为BMP完成的形式。我们的BMP完成只是复杂的扩大了CMP笼统bean类然后让它运转!注重到我们以不异的逻辑到场了get/set办法以确保我们在ejbStore()中不做任何举措,大概做一个查询。我们仍就要记着尽量的用CMPbean,BMP做为最初的手腕[完]
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译) |
|