JiveJdon Community Forums
在线458人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 8 回复 / 1
 发表新帖子   回复该主题贴
trainking

悄悄话
发表文章: 42
注册时间: 2003年07月01日 16:53
EJB-QL问题 2003年09月02日 10:40 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表
我做了一个CMP,程序如下:
Customer.java
package MyCustomerEJB;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
import java.util.*;
public interface Customer extends EJBObject {
public void setSsn(java.lang.String ssn) throws RemoteException;
public java.lang.String getSsn()throws RemoteException;
public void setName(java.lang.String name)throws RemoteException;
public java.lang.String getName()throws RemoteException;
public void setPassword(java.lang.String password)throws RemoteException;
public java.lang.String getPassword()throws RemoteException;
}

CustomerHome.java
package MyCustomerEJB;
import java.util.Collection;
import java.rmi.RemoteException;
import javax.ejb.*;
public interface CustomerHome extends EJBHome {
public Customer create(java.lang.String ssn,java.lang.String name,java.lang.String password)
throws CreateException,RemoteException;
public java.util.Collection findByName(java.lang.String name)
throws FinderException,RemoteException;
public Customer findByPrimaryKey(java.lang.String ssn)
throws FinderException,RemoteException;
}

CustomerBean.java
package MyCustomerEJB;
import javax.ejb.*;
import javax.naming.*;
public abstract class CustomerBean implements EntityBean {
EntityContext entityContext;
public java.lang.String EJBCreate(java.lang.String ssn, java.lang.String name, java.lang.String password) throws CreateException {
setSsn(ssn);
setName(name);
setPassword(password);
return null;
}

public void EJBPostCreate(java.lang.String ssn, java.lang.String name,java.lang.String password) throws CreateException { }

public void EJBRemove() throws RemoveException { }

public abstract void setSsn(java.lang.String ssn);
public abstract void setName(java.lang.String name);
public abstract void setPassword(java.lang.String password);
public abstract java.lang.String getPassword();
public abstract java.lang.String getName();
public abstract java.lang.String getSsn();

public void EJBLoad() { }
public void EJBStore() { }
public void EJBActivate() { }
public void EJBPassivate() { }
public void unsetEntityContext() {
this.entityContext = null;
}
public void setEntityContext(EntityContext entityContext) {
this.entityContext = entityContext;
}
配置文件如下:
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>
<entity>
<ejb-name>CustomerCMPBean</ejb-name>
<home>MyCustomerEJB.CustomerHome</home>
<remote>MyCustomerEJB.Customer</remote>
<ejb-class>MyCustomerEJB.CustomerBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>CustomerBean</abstract-schema-name>
<cmp-field>
<field-name>ssn</field-name>
</cmp-field>
<cmp-field>
<field-name>name</field-name>
</cmp-field>
<cmp-field>
<field-name>password</field-name>
</cmp-field>
<primkey-field>ssn</primkey-field>
<query>
<description>finds customers in a given name</description>
<query-method>
<method-name>findByName</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<ejb-ql>
<![CDATA[FROM CustomerBean s WHERE s.name=?1]]>
</ejb-ql>
</query>
</entity>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>CustomerCMPBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>

weblogic-ejb-jar.xml
<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN"

"http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd" >
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>CustomerCMPBean</ejb-name>
<entity-descriptor>
<persistence>
<persistence-type>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>6.0</type-version>
<type-storage>META-INF/weblogic-cmp-rdbms.xml</type-storage>
</persistence-type>
<persistence-use>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>6.0</type-version>
</persistence-use>
</persistence>
</entity-descriptor>
<jndi-name>CMPCustomerEJB</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>

weblogic-cmp-rdbms.xml
<?xml version="1.0"?>
<!DOCTYPE weblogic-rdbms-jar PUBLIC
'-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB RDBMS Persistence//EN'
'http://www.bea.com/servers/wls600/dtd/weblogic-rdbms20-persistence-600.dtd'>
<weblogic-rdbms-jar>
<weblogic-rdbms-bean>
<ejb-name>CustomerCMPBean</ejb-name>
<data-source-name>CustomerDB</data-source-name>
<table-name>customer</table-name>
<field-map>
<cmp-field>ssn</cmp-field>
<dbms-column>SSN</dbms-column>
</field-map>
<field-map>
<cmp-field>name</cmp-field>
<dbms-column>NAME</dbms-column>
</field-map>
<field-map>
<cmp-field>password</cmp-field>
<dbms-column>PASSWORD</dbms-column>
</field-map>
</weblogic-rdbms-bean>
</weblogic-rdbms-jar>

当我做到java weblogic.ejbc pre_CMPCustomerEJB.jar CMPCustomerEJB.jar时,出现错误如下:
ERROR: Error from EJBc: Error while reading 'META-INF/weblogic-cmp-rdbms.xml'. T
he error was:
weblogic.ejb20.cmp.rdbms.finders.IllegalExpressionException:
While trying to process Finder
Method Name: findByName
Parameter Types: (java.lang.String)
EJB Query: FROM CustomerBean s WHERE s.name=?1
)
Could not parse EJB QL expression: FROM CustomerBean s WHERE s.name=?1
ERROR: EJBc found errors
可是我不觉得EJB QL有什么错误,恳请大家帮我看看,到底哪里错了,谢谢!
trainking

悄悄话
发表文章: 42
注册时间: 2003年07月01日 16:53
这里怎么xml文件不能正确显示啊! 2003年09月02日 11:04 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
我的EJB-jar.xml中
ejb-name:CustomerCMPBean
abstract-schema-name:CustomerBean
method-name:findByName
method-param:java.lang.String
ejb-ql:FROM CustomerBean s WHERE s.name=?1
容器管理的字段是:ssn,name,password

weblogic-cmp-rdbms.xml中
字段映射关系为:ssn――SSN,name――NAME,password――PASSWORD
banq

悄悄话
发表文章: 9524
注册时间: 2002年08月03日 17:08
Re: 这里怎么xml文件不能正确显示啊! 2003年09月02日 11:50 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
ejb-ql写法有误吧,使用code按钮可以原封不动发表code代码。




SELECT OBJECT(s) FROM Customer AS s WHERE s.lastName=?1


其中Customer是你的abstract-schema-name,一般abstract-schema-name设定和EJB-name是一致的。只要更改这个EJB-ql中的Customer和lastName就可以实现你的数据库查询。

有关EJB-QL参考:http://www.ejb-ql.com/
trainking

悄悄话
发表文章: 42
注册时间: 2003年07月01日 16:53
好像还是不对呀 2003年09月02日 12:31 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
banq,我按照你的做法再试了一次,还是老问题。

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>
<entity>
<ejb-name>CustomerCMPBean</ejb-name>
<home>MyCustomerEJB.CustomerHome</home>
<remote>MyCustomerEJB.Customer</remote>
<ejb-class>MyCustomerEJB.CustomerBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>CustomerCMPBean</abstract-schema-name>

<cmp-field>
<field-name>ssn</field-name>
</cmp-field>
<cmp-field>
<field-name>name</field-name>
</cmp-field>
<cmp-field>
<field-name>password</field-name>
</cmp-field>

<primkey-field>ssn</primkey-field>

<query>
<description>finds customers in a given name</description>
<query-method>
<method-name>findByName</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<ejb-ql>
<![CDATA[SELECT OBJECT(s) FROM CustomerCMPBean AS s WHERE s.name=?1]]>
</ejb-ql>
</query>
</entity>
</enterprise-beans>

<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>CustomerCMPBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>

</ejb-jar>


weblogic-cmp-rdbms.xml


<?xml version=
"1.0"?>

<!DOCTYPE weblogic-rdbms-jar PUBLIC
'-
//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB RDBMS Persistence//EN'
'http:
//www.bea.com/servers/wls600/dtd/weblogic-rdbms20-persistence-600.dtd'>

<weblogic-rdbms-jar>
<weblogic-rdbms-bean>
<ejb-name>CustomerCMPBean</ejb-name>
<data-source-name>CustomerDB</data-source-name>
<table-name>customer</table-name>
<field-map>
<cmp-field>ssn</cmp-field>
<dbms-column>SSN</dbms-column>
</field-map>
<field-map>
<cmp-field>name</cmp-field>
<dbms-column>NAME</dbms-column>
</field-map>
<field-map>
<cmp-field>password</cmp-field>
<dbms-column>PASSWORD</dbms-column>
</field-map>
</weblogic-rdbms-bean>
</weblogic-rdbms-jar>

请再帮我看看,好吗,谢谢!
jd2bs

悄悄话
发表文章: 16
注册时间: 2002年08月16日 10:00
Re: 加空格试试 2003年09月02日 16:02 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
SELECT OBJECT(s) FROM Customer AS s WHERE s.lastName = ?1
trainking

悄悄话
发表文章: 42
注册时间: 2003年07月01日 16:53
Re: 加空格试试 2003年09月02日 16:58 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
还是不行。
一定是这句EJB-QL错了吗?会不会是其他什么地方有问题,从而使得不能解析这句EJB-ql?
mk_008

悄悄话
发表文章: 1
注册时间: 2003年09月02日 18:10
Re: EJB-QL问题 2003年09月02日 18:12 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
是空格问题,注意等号两边的空格
WHERE s.name = ?1
trainking

悄悄话
发表文章: 42
注册时间: 2003年07月01日 16:53
Re: EJB-QL问题 2003年09月03日 12:17 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
问题解决了,的确是空格的问题,原来等号两边都要有空格。
谢谢大家!
jbwang

悄悄话
发表文章: 18
注册时间: 2003年06月26日 14:25
Re: EJB-QL问题 2003年09月03日 12:52 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
在ql语句,使用EJB的abstract-schema-name,不是EJB-name
这个主题有 8 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  每2分种自动备份发贴内容Ctrl-V粘贴取出,提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam