很简单的啊。这样:
在ejbCreate()中,参数不用出现主键,在部署文件中,修改weblogic-cmp-rdbms-jar.xml如下:
<automatic-key-generation>
<generator-type>SQL_SERVER</generator-type>
</automatic-key-generation>
例如:
<!DOCTYPE weblogic-rdbms-jar PUBLIC
'-//BEA Systems, Inc.//DTD WebLogic 7.0.0 EJB RDBMS Persistence//EN'
'http://www.bea.com/servers/wls700/dtd/weblogic-rdbms20-persistence-700.dtd'>
<weblogic-rdbms-jar>
<weblogic-rdbms-bean>
<ejb-name>mssqlserverSequence</ejb-name>
<data-source-name>examples-dataSource-mssqlserverXAPool</data-source-name>
<table-map>
<table-name>ejbAccounts</table-name>
<field-map>
<cmp-field>accountId</cmp-field>
<dbms-column>id</dbms-column>
</field-map>
<field-map>
<cmp-field>balance</cmp-field>
<dbms-column>bal</dbms-column>
</field-map>
<field-map>
<cmp-field>accountType</cmp-field>
<dbms-column>type</dbms-column>
</field-map>
</table-map>
<automatic-key-generation>
<generator-type>SQL_SERVER</generator-type>
</automatic-key-generation>
</weblogic-rdbms-bean>
<create-default-dbms-tables>True</create-default-dbms-tables>
</weblogic-rdbms-jar>
其中accountId是自增主键。
在ejbCreate()中,参数不用出现主键,在部署文件中,修改weblogic-cmp-rdbms-jar.xml如下:
<automatic-key-generation>
<generator-type>SQL_SERVER</generator-type>
</automatic-key-generation>
例如:
<!DOCTYPE weblogic-rdbms-jar PUBLIC
'-//BEA Systems, Inc.//DTD WebLogic 7.0.0 EJB RDBMS Persistence//EN'
'http://www.bea.com/servers/wls700/dtd/weblogic-rdbms20-persistence-700.dtd'>
<weblogic-rdbms-jar>
<weblogic-rdbms-bean>
<ejb-name>mssqlserverSequence</ejb-name>
<data-source-name>examples-dataSource-mssqlserverXAPool</data-source-name>
<table-map>
<table-name>ejbAccounts</table-name>
<field-map>
<cmp-field>accountId</cmp-field>
<dbms-column>id</dbms-column>
</field-map>
<field-map>
<cmp-field>balance</cmp-field>
<dbms-column>bal</dbms-column>
</field-map>
<field-map>
<cmp-field>accountType</cmp-field>
<dbms-column>type</dbms-column>
</field-map>
</table-map>
<automatic-key-generation>
<generator-type>SQL_SERVER</generator-type>
</automatic-key-generation>
</weblogic-rdbms-bean>
<create-default-dbms-tables>True</create-default-dbms-tables>
</weblogic-rdbms-jar>
其中accountId是自增主键。
weblogic自己有例子的
<generator-type>NAMED_SEQUENCE_TABLE</generator-type>
<generator-name>sequence_table</generator-name>
<key-cache-size>10</key-cache-size>
</automatic-key-generation>
用序列表来实现
其中sequence_table为:
create table sequence {
sequence int not null //这个字段明必须为sequence int not null
}
SELECT OBJECT s FROM STUDENT(s)
好,然后,手改jboss-cmp.xml文件(我用的是JBOSS3)在jboss3中写入jboss ql语句(一种独立于ejbql的语句),因为ejb ql不提供SUM,MAX,ORDER BY这些东西,所以给人骂死了,但在2。1中将提供,到时,就要爽翻了
<query>
<description/>
<query-method>
<method-name>findMaxItem</method-name>
<method-params>
</method-params>
</query-method>
<jboss-ql>
<![CDATA[SELECT OBJECT(m) FROM Message m ORDER BY m.titleid DESC]]>
</jboss-ql>
</query>
OK,现在可以写CMP的代码喽:
long tid=getMaxItem();
tid+=1.0;
MessageHome messageHome=getMessageHome();
Message mbean=messageHome.create(new Long(tid),bounds,
java.sql.Timestamp.valueOf(messageTime),
content,title,mood,pid,
picture,space);
getMaxItem()的代码如下:
try{
Collection c=getMessageHome().findMaxItem();
Iterator it=c.iterator();
if(it.hasNext()){
Message mbean=(Message)it.next();
String tempstr=""+mbean.getTitleid();
int max=Integer.parseInt(tempstr);
return max;
}
else
{
return 0;
}
}catch(Exception ee){
return 0;
}
1.使用singleton模式,从应用程序第一次运行,把所有表的主键给读入内存,
在内存维护增长
2.使用时间做主键
数据库处理主键模式:
1.触发器
2.各个数据库特定的方法,oracle:sequence,sqlserver:identity
国人在解决EJB的瓶颈时都是从数据结构着手,这并不显得国人就怎么聪明,实际上这才体现了国人的笨,你想一个ORDER BY的功能,你要用什么自建数组来维护,效率时间功能上的东西就不考虑了??看看老外怎么解决的,一条<![CDATA[SELECT OBJECT(m) FROM Message m ORDER BY m.titleid DESC]]>JBOSSQL的语句就解决了,把空下来的时间放在研究项目的通用性上和功能上,因此强烈建议大家在LINUX下用VI结合ANT手写EJB,不要再用JBUILDER和WEBLOGIC这种烂东东了
帮忙顶顶.
什么都要用免费的,你的工程才值钱,jboss比WEBLOGIC好不知道多少倍!!!
Long userId = sequence.getNext(userSequenceName);
User user = new UserDto(userId, userName, userPass);
userLocalHome.create(user);
return user;
}说明:
1. sequence 是一个 stateless sessionbean 用来做sql “select sequenceName.nextval from dual”并返回结果。
2. userLocalHome 是 local entity bean 的 localhome 接口,提供 create 方法。
3. userDto 实现 User 接口,是 User 的 valueObject。
你数据结构学得很好,可是你不配做一个企业级开发程序员!!
国人在解决EJB的瓶颈时都是从数据结构着手,这并不显得国人就怎么聪明,实际上这才体现了国人的笨,你想一个ORDER BY的功能,你要用什么自建数组来维护,效率时间功能上的东西就不考虑了??看看老外怎么解决的,一条<![CDATA[SELECT OBJECT(m) FROM Message m ORDER BY m.titleid DESC]]>JBOSSQL的语句就解决了,把空下来的时间放在研究项目的通用性上和功能上,因此强烈建议大家在LINUX下用VI结合ANT手写EJB,不要再用JBUILDER和WEBLOGIC这种烂东东了
本人不才,平日也用 Ant 手写开发,不过不是用厉害的 Linux+vi ,而是用不入大侠法眼的 Win2k+UltraEdit 。之所以不用 JBuilder,非不想也,实不能也,想必我的破赛羊是拉不动的。用了一年多,并不觉得这样的方式就比别人如何高明了。传说真正的高手“草木皆可为剑”?手写EJB?无他,唯手熟耳。再说了,更高手的好像是老板,一声令下,我辈立刻要屁颠屁颠的加班写代码,他们何曾动手写过哪怕是一行?---------
重剑无锋◎大巧不工
---------
应用服务器的选用,也是要考虑很多方面的原因,有时候甚至不是自己能够掌握的,应该说,这个使用order by的方法可能确实比较简洁,但必须要用ejb2.1,可很多时候实在没条件用,难道项目就不要做了?就类似于现在都有了飞机汽车,那怎么还有人骑自行车,大多是因为条件所限把。
这位仁兄可能比较推崇jboss,可也不用如此贬低weblogic把。关于手写ejb,我也是用win2k+ultraEdit,主要是觉得速度较快,比较方便,倒也不是炫耀自己是高手等等,也炫耀不了什么。其实是因为JB之类的功能比较强大,所以使用也比较复杂,我一时间没耐心去研究。但其实这些IDE能够帮你生成一些代码,减少一些重复劳动的烦恼,又何乐而不为呢,又何必非得手写来故作高深呢。
使用vi,或者ultraedit的兄弟们,你们的调试怎么调的,我说的对于ejb的调试,因为我发现jbuilder的调试还是很好用的。lifetragedy(生活是场悲剧)说的对,调试是因为程序里面有错误,但是我只听说很少的人编程序是从来不调试的。哦~~我不想和谁辩论。。我只是想知道,如果不是用ide的话,对于ejb的调试是怎么处理的?就用println?么/
“中国人,受不了!!!”
“清华内编程好的人都是NOTEPAD或VI,开八个PANEL,16个VI”呵……,您牛!我等“水平臭”的,做“10万元级以下的小项目”的,没钱参加“印度的J2EE大会”的,就不多和大虾您废话了……,哈哈~~
方法是一个行而上的东西,和你用 JBuilder 做开发或者用 WebLogic 来运行并无关系。作一个或许不太恰当的比喻。如果你要写一篇小说,不会说仅仅因为你是用纸和笔来写的就会变成一篇滥文,也不会说仅仅因为你是用电脑写的那就会变成传世精品了。草木皆可为剑?神兵利器或者一块烂木,也只是工具罢了。
不知道这位大哥为什么非得说weblogic不好?非得死扣jboss不放?
做的更通用一些不好吗?
我不知道你是不是真的明白,这些方案其实都是和应用服务器无关,部署在哪个上都可以的。
:-)
自动增长的主键 的问题 在Jbuilder下的samples下EJB有一个
非常简单的方法:(我觉得简单实用为最佳:)
原理基本上:另建立一库和与之对应的EJB ,最大的ID、和数据库名,
用此库来管理,应新增的ID的值。
selectNextMaxID
lifetragedy(生活是场悲剧)可能你是比较牛
感觉用这句话 最能贴切的反映我的心情, 我鄙视你 :)奉劝1句,在抬高自己的时候,不要去贬低别人。“中国人,受不了!!!”
“清华内编程好的人都是NOTEPAD或VI,开八个PANEL,16个VI”
《--- 清华人不是中国人吗?