JBoss下如何设置数据库资源引用? datasource

04-06-22 aill
在部署描述符中声明了数据库引用
<resource-ref>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>java.sql.DataSource</res-type>
<>.....
但是还需要把这些资源映射到物理资源上,在j2ee RI中是 修改%J2EE_HOME%\CONFIG下的
resource.properties文件
jdbcDataSource.5.name=jdbc/test
jdbcDataSource.5.url=jdbc:odbc:testDB



问题是jboss目录下没有这个config目录,那要在什么地方修改呢?



还有个问题,用会话bean去访问实体bean的时候,他们之间的引用关系要怎样声明,是在会话bean的ejb-jar.xml中声明实体bean引用;还是在实体bean的ejb-jar.xml中声明会话bean引用,
还是在jboss.xml声明就可以了。
小弟刚接触j2ee,请高人不吝赐教! 谢谢

qiusi
2004-06-22 12:02
jboss下有conf目录的啊!

session bean同样可以通过service locator lookup entity bean
吧。还是有其他更好方法?

偶也刚学j2ee

huzhigang
2004-06-22 12:26
在jbosscmp-jdbc.xml中
一般都是从会话bean来使用实体bean的
通过ejb-link元素来链接你要引用的实体bean

wwlhp@jdon
2004-06-22 13:34
是<ejb-ref>吧

wwlhp@jdon
2004-06-22 13:35
是<ejb-ref>吧

aill
2004-06-22 14:00
那是在conf目录下新建一个reource.properties文件还是修改standardjbosscmp-jdbc.xml(这个文件看起来好像和cmp有关,可我显示使用的是bmp)?

我把会话bean和实体bean打包成一个jar,
在ejb-jar.xml中这样声明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
<ejb-jar id="ejb-jar_ID">
<display-name>TestQuery</display-name>
<enterprise-beans>
<entiry>
<display-name>PeopleBean</display-name>
<ejb-name>data.PeopleBean</ejb-name>
<local-home>data.PeopleLocalHome</local-home>
<local>data.PeopleLocal</local>
<ejb-class>data.PeopleBean</ejb-class>
<persistence-type>Bean</persistence-type>
<prim-key-class>PeoplePK</prim-key-class>
<reentrant>False</reentrant>
<security-identity>
<description></description>
<use-caller-identity></use-caller-identity>
</security-identity>
<resource-ref>
<res-ref-name></res-ref-name>
<res-type></res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</entiry>
<session>
<display-name>QueryBean</display-name>
<ejb-name>QueryBean</ejb-name>
<home>TestQueryHome</home>
<remote>TestQueryObject</remote>
<ejb-class>QueryBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
//这里声明要引用的实体bean???
<ejb-local-ref>
<ejb-ref-name>ejb/PeopleBean</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>data.PeopleLocalHome</local-home>
<local>data.PeopleLocal</local>
<ejb-link>PeopleBean</ejb-link>
</ejb-local-ref>

</session>
</enterprise-beans>
</ejb-jar>

没有问题吧,如果要引用的是其他jar中的bean,那么<ejb-link>应该是
<ejb-link>JarName.jarPeopleBean</ejb-link> 对吗?

同时非常感谢qiusi , huzhigang两位朋友的回复,希望我们共同进步!

huzhigang
2004-06-22 14:02
ejb-ref 只是逻辑上的引用说明
jboss下还必须使用ejb-link来实际连接

aill
2004-06-22 14:14
奇怪我的xml标记怎么都没有了,浏览器自动解析了? :(
加引号应该不会解析吧
"<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">"
"<ejb-jar id="ejb-jar_ID">"
" <display-name>TestQuery</display-name>"
" <enterprise-beans>"
" <entiry>"
" <display-name>PeopleBean</display-name>"
" <ejb-name>PeopleBean</ejb-name>"
" <local-home>data.PeopleLocalHome</local-home>"
" <local>data.PeopleLocal</local>"
" <ejb-class>data.PeopleBean</ejb-class>"
" <persistence-type>Bean</persistence-type>"
" <prim-key-class>data.PeoplePk</prim-key-class>"
" <reentrant>False</reentrant>"
" </entiry> "
" <session>"
" <display-name>QueryBean</display-name>"
" <ejb-name>QueryBean</ejb-name>"
" <home>TestQueryHome</home>"
" <remote>TestQueryObject</remote>"
" <ejb-class>QueryBean</ejb-class>"
" <session-type>Stateful</session-type>"
" <transaction-type>Container</transaction-type>"
" //这里声明会话bean引用的实体 bean????"
" <ejb-local-ref>"
" <ejb-ref-name>ejb/PeopleBean</ejb-ref-name>"
" <ejb-ref-type>Entiry</ejb-ref-type>"
" <local-home>data.PeopleLocalHome</local-home>"
" <local>data.PeopleLocal</local>"
" <ejb-link>PeopleBean<ejb-link>"
" </ejb-local-ref>"

" </session>"
" </enterprise-beans>"
"</ejb-jar>"

aill
2004-06-22 14:16
见鬼了,xml代码怎么显示啊

huzhigang
2004-06-22 14:17
对不起,开始没注意看。
你说:在部署描述符中声明了数据库引用

jdbc/test
java.sql.DataSource
<>.....
但是还需要把这些资源映射到物理资源上,在j2ee RI中是 修改%J2EE_HOME%\CONFIG下的

不知道你的意思是不是jboss下的DataSource如何配置?
在jboss下面是通过在deploy目录下的xml文件来配置的,jboss是使用jmx来管理的,这个文件就是说明jmx的mbean的各种属性来配置的。在jboss3.2开始是**-ds.xml。在jboss的doc目录下面有一个jca的目录,里面有例子。你可以参考一下

aill
2004-06-22 14:48
这下就明白了,谢谢huzhigang
例子是这样的
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://dell:3306/jbossdb</connection-url>
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<user-name>x</user-name>
<password>y</password>
</local-tx-datasource>

</datasources>
那我是不是要这么配置
<datasources>
<local-tx-datasource>
<jndi-name>People</jndi-name>
<connection-url>jdbc:odbc:ServletDB</connection-url>
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<user-name>x</user-name>
<password>y</password>
</local-tx-datasource>

</datasources>

big1980
2004-06-23 14:57
楼上的请把代码放在code里面

aill
2004-06-23 16:30

如果直接连接数据库是
 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
             con=DriverManager.getConnection("jdbc:odbc:ServletDB","","");
如果想使用dataSource自动连接,
得修改mysql-ds.xml
JBOSS给的例子是这样:
<datasources>
  <local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://dell:3306/jbossdb</connection-url>
    <driver-class>org.gjt.mm.mysql.Driver</driver-class>
    <user-name>x</user-name>
    <password>y</password>
  </local-tx-datasource>
</datasources>
那我要如果修改,我的jdbc是直接安装的,不是jar包,要怎样知道driver-class;
<connection-url>是不是该成
<connection-url>jdbc:mysql://localhost:3306/数据源名称</connection-url>


<p class="indent">