J2EE栏目序言 J2EE Blueprint j2ee的13种核心技术 XML与j2ee的组合技术 j2ee中bean/servlet的应用 简析J2EE应用程序数据库类设计模式 J2EE美好蓝图 j2ee和微软DNA比较分析 J2EE介绍 j2ee开发企业级应用 j2ee文档 j2ee简化开发 配置J2EE支MySQL
|
J2EE DOC 翻译系列
1。介绍
本文介绍j2ee环境的配置,所有涉及的文件都在j2ee安装目录下的config目录,这些文件都是文本文件,
你可以有任意的文本编辑器来编辑它们。
通常情况下,你没有改变这些文件的必要。但是如果你使用的数据库驱动不是cloudscape的时候,你需要
遵循本章的内容进行配置。
2。JDBC驱动
默认的j2ee安装后支持cloudscape数据库(一个sun公司提供的演示数据库),如果你的ejb使用的jdbc不
是连接cloudscape数据库,那么你需要按照下面的知道进行配置。(如果你不能确定本版本的j2ee支持你使用
的jdbc驱动,请到 11111 看相关信息。)
3。驱动的位置
你必须把驱动文件(.jar文件)copy到 $J2EE_HOME/lib/system目录下。并且保证该文件包含在
J2EE_CLASSPATH 的环境变量中。
4。J2EE_CLASSPATH 环境变量
j2ee server通过JDBC驱动连接数据库。通通过J2EE_CLASSPATH 的环境变量定位驱动文件(.jar文件)的位
置。你可以在启动j2ee前在命令行设置这个变量。但是我们推荐你在脚本中设置J2EE_CLASSPATH 变量。编辑用
户配置文件在安装的过程中是必须的一步。在unix中,用户配置文件是 /bin/userconfig.sh,windows nt中是
bin/userconfig.bat
注意:你应该同时在CLASSPATH环境变量中去掉驱动文件(.jar文件)。
5。JDBC 1.0 驱动
为了配置jdbc1.0驱动,编辑config/default.properties 文件的jdbc.drivers 和 jdbc.datasources两个
属性值。再次要注意的是驱动文件必须包含在J2EE_CLASSPATH环境变量中。
jdbc.drivers 属性
jdbc.drivers 属性的值是有一系列的冒号分割的jdbc驱动的类名。格式如下:
jdbc.drivers=<classname>:<classname>: . . .
例如:
jdbc.drivers=oracle.jdbc.driver.OracleDriver:testutil.MyDriver
jdbc.datasources 属性值
jdbc.datasources 属性值由两部分组成,一个是datasource的jndi的名字,一个是数据库的url。典型的
情况是:jndi名字是数据库的逻辑名字,rul指定数据库的实际位置。jndi名字和url都是在ejb编码的过程中指
定的。rul的格式,请参照jdbc驱动提供商的文档。
jdbc.datasources 的语法如下:
jdbc.datasources=<jndi_datasource>|<url>|<jndi_datasource>|<url>. . .
|符号有两个作用。第一,它隔开几个jndi_datasource;第二,它隔开每一个jndi_datasource中的
jndi_datasource> 和 <url> 元素.
jndi_datasource元素的语法如下:
jdbc由jdbc关键字开头,jndi_name是在jndi目录中指定的datasouce名字。
例如:
jdbc.datasources=jdbc/Oracle|jdbc:oracle:thin@rtc:1521:acct|jdbc/MyDB|jdbc:test
6。支持JTA的JDBC2.0驱动
配置JTA的JDBC2.0的驱动,你需要设置以下属性的值:
jdbc20.datasources
xadatasource.<n>.jndiname
xadatasource.<n>.classname
xadatasource.<n>.dbuser
xadatasource.<n>.dbpassword
xadatasource.<n>.prop.<property-name>
同时你也必须在J2EE_CLASSPATH 环境变量中包括jdbc驱动文件。
jdbc20.datasources 属性
jdbc20.datasources 属性的值和jndi名字连接,用于定位datasouce的位置(它就是lookup方法的参数)
。
jdbc20.datasources 的语法如下:
jdbc20.datasources=<jndi_datasource>|<jndi_XA_datasource>|<jndi_datasource>|<jndi_XA_datasource>
|的作用有两个,第一,隔开jndi_datasource 和<jndi_XA_datasource>并组成一对,第二,隔开每一对的
jndi_datasource> 、<jndi_XA_datasource>元素。
<jndi_datasource> 和 jndi_XA_datasource有相同的语法:
jdbcjdbc关键字开头。jndi_name是datasource名字,这个名字指向jndi目录。
例如:
jdbc20.datasources=jdbc/Merant|jdbc/XAMerant|jdbc/Finch|jdbc/XAFinch
xadatasource属性
xadatasource.<n>.jndiname 属性指定XA DataSource的jndi名字。语法如下:
xadatasource.<n>.jndiname=jdbcn代表每一组xadatasource。第一个jdbc2.0驱动n为0,下一个是1,2等等。jndi_XA_datasource元素和
jdbc20.datasources 指定的值对应。
The xadatasource.<n>.dbuser 和 xadatasource.<n>.dbpassword 属性指定数据库用户和密码。通常该用
户具有管理员的权限(更多的信息请看 2222 The distributed.transaction.recovery )。
xadatasource.<n>.prop.<property_name> 指定和特定的属性值关联的值。实际的值可能是jdbc驱动。
例如:
xadatasource.0.jndiname=jdbc/XAMerant
xadatasource.0.classname=com.merant.sequelink.jdbcx.datasource.SequeLinkDataSource
xadatasource.0.prop.url=jdbc:sequelink://mypc:5000/[Oracle]
7。事务
你可以编辑config/default.properties 文件控制事务发生和超时设置。
distributed.transaction.recovery 属性
这个属性控制分布事物是否发生。入这些事物可以发生的化,下面的条件必须满足:
跨库操作时的事物范围。
j2ee程序通过jdbc2.0 JTA驱动访问数据库
当故障发生的时候,事物的各个的组成部分可以按照符合两段提交协议的方式提交或回滚。
事物发生的时候,server重新启动后事物可以提交或回滚。
distributed.transaction.recovery的值为true或者false。j2ee安装后默认为false。
distributed.transaction.recovery=false
transaction.time属性
在应用container-managed 事物的ejb中,你可以控制事物超时的间隔通过设置transaction.timeout的值
。例如:
transaction.timeout=5
在设置以后,如果事物在5秒内没有完成,j2ee事物管理器将回滚它。
当j2ee第一次安装的时候,timeout的值时0代表没有超时。
只有使用container-managed 管理事物的ejb受到timeout的影响。至于在bean-managed和JTA
transactions 中你可以引用 UserTransaction 的 setTransactionTimeout方法。同时你也可以在其他组建中
引用setTransactionTimeout方法:比如servlets和jsp。
8。端口
j2ee需要tcp/ip端口。修改config目录下的相应文件可以修改端口号。下表是端口号和相应的文件。
EJB 9191 ejb.properties http.port=9191
HTTP 8000 web.properties port=8000
HTTPS 7000 web.properties https.port=7000
Naming and Directory 1050 orb.properties port=1050
9191 端口用于提供client下载需要的stub类
8000 提供http服务
7000 提供https服务
1050 基于orb的jndi名字服务使用的端口
9。日志文件
j2ee server有几个日志文件。默认这些文件在logs目录下。编辑config/default.properties 文件中的
log.directory 属性可以更改默认目录。
log.directory=logs
同时你也可以编辑default.properties 文件更改日志文件的名字。例如:你可以修改log.output 属性的
值来修改the output.log 文件的名字。
一般来说,日志文件决定于启动j2ee的模式。(single还是multiple VM (virtual machine) 模式)
Single VM 日志文件
默认的情况是Single VM 模式。在这种情况下,日志文件位于
$J2EE_HOMElogs是在default.properties 文件中log.directory 属性指定的。host元素是计算机名称。
生成下列文件。
system.out
system.err
event.log
output.log
error.log
system.out 和system.err文件包括ejb中 System.out 和 System.err的输出。如果你运行j2ee -verbose
参数,输出被写到stdout(标准输出) 和stderr(标准错误。输出)。system.out 和 system.err日志文件不
创建。只有config/auth.properties 文件中audit属性值为true时audit.lo才创建。
Multiple VM 日志
如果你用j2ee -mutiVM启动server,ejb和http服务在自己的虚拟机以单独的服务启动。每一个depploy的
应用程序也在自己的虚拟机中运行。日志文件和上述的一样,但是存放的目录不同。
目录如下:
EJB $J2EE_HOMEHTTP $J2EE_HOMEdeployed application $J2EE_HOME
web server日志
编辑web.properties文件中的内容,可以改变由web server创建的日志文件的名字。
10。安全
未授权用户
对于j2ee来说,当有未授权的用户试图调用ejb container的时候,j2ee必须存在一般意义上的未授权用户
存在。在j2ee中这个用户名字是guest,密码是guest123。你可以在auth.properties 文件中修改用户名和密码
。
default.principal.name=guest
default.principal.password=guest123
Keystore密码
如果用户使用公钥访问https,认证信息放在<user-home>/.keystore 文件中。同时user-home是
System.getProperty("user.home")的返回值。
keystore是一个典型的密码文件。默认的密码是changeit。可以在web.properties 文件中修改
keystore.password 属性的值来改变密码。
ANYONE 角色
在application deployment工具的security面板中,默认的情况下方法分配给ANYONE 角色。这样的结果
是所有的用户和组都可以调用它。如果你没有影射到一个特定的角色,每一个用户和用户都可以调用它。可以
在auth.properties 文件中设置anyone.role.name 的值来改变默认anyone角色。
钝化发生的条件:内存限制
当ejb container开始钝化一个ejb的时候,它把ejb保存在附属存储中并且试图重新分配内存。默认的情况
下,如果内存使用超过128m的时候钝化开始发生。可以编辑config/default.properties 文件中
passivation.threshold.memory 属性的值来修改默认值。
passivation.threshold.memory=128000000
值必须是一个正的整数。当你减少这个值的时候钝化现象回经常发生。
jndi name server host
如果jndi name server和j2ee server不在同一个机器上,你必须改变config/orb.properties 文件中host
属性的值。
host=localhost
HTTP 文档根
默认的情况下,http和https服务的文档是public_html。你可以编辑web.properties 文件中documentroot
属性的值来改变它。
documentroot=public_html/
JavaTM 2 SDK,Enterprise Edition 介绍
1。注意事项
如果你第一次使用JavaTM 2 SDK, Enterprise Edition (J2EE SDK) ,你应该遵从下面的步骤:
1。确认你安装了JavaTM 2 SDK, Enterprise Edition (J2EE SDK) 。
2。配置你的JavaTM 2 SDK, Enterprise Edition (J2EE SDK) 软件。
3。阅读 《开始j2ee》文档,开始建立年的ejb。
2。支持的平台
SolarisTM Operating Environment, version 2.6
Windows NT, version 4.0
3。支持的数据库和jdbc 驱动
这个版本支持jdbc api的1.0和2.0版本的数据库驱动。我们在以下数据库上做了很好的测试:
Oracle8 Server, version 8.05
Microsoft SQL Server, versions 6.5, 7.0
Cloudscape, version 3.0
更多的jdbc信息,请参阅jdbc data access api web页面(
"http://www.java.sun.com/products/jdbc/index.html)。观看驱动提供商列表请看
http://www.java.sun.com/products/jdbc/jdbc.driver.html。当你安装完驱动后,你要按照《配置指南》中
有关jdbc 驱动的内容进行配置。如果你使用cloudscape 数据库,你不需要配置它的驱动,因为在本版本已经
包括了它的驱动。
4。本版本的内容包括:
服务:
EJB
HTTP
HTTP over SSL
COS naming
Authentication
工具:
Application Deployment Tool
一个打包j2ee组件和发布应用程序的工具。
Realm Tool
这个工具管理j2ee server 的用户。
Verifier
这个工具核实j2ee组件文件。
Packager
这个工具打包j2ee组件。
Cleanup Script
删除所有发布的j2ee的应用程序。
Cloudscape 数据库
本版本包括一个用java语言写的关系型数据库——cloudscape 3.0。尽管本文档例子的代码是用
cloudscape做测试的,但是你可以使用任何本版本支持的数据库。
对企业的java apis
Enterprise JavaBeans API, version 1.1
Java Servlets, version 2.2
JavaServer Pages technology, version 1.1
JDBC Standard Extension, version 2.0
Java Naming and Directory InterfaceTM API, version 1.2 (CosNaming SPI)
RMI/IIOP
Java Transaction API, version 1.0
JavaMail API, version 1.1
Java Messaging Service, version 1.0 (API only, no implementation)
5。需要的软件。
首先,你需要安装JDK 1.2 。The JavaTM 2 SDK, Standard Edition 提供了运行和建立j2ee应用程序的
能力。如果你的client在另外一个机器上,client上也必须安装jdk1.2。
能支持j2ee的jdk1.2如下:
http://www.java.sun.com/products/jdk/1.2/download-solaris.htm
http://www.sun.com/solaris/java
ttp://www.java.sun.com/products/jdk/1.2/download-windows.html
其他版本的jdk1.2没有做过测试,并且不支持j2ee。
注意:jdk1.2中不能安装 The RMI-IIOP standard extension 。
6。当前的缺陷。
本版本的目的是向你介绍j2ee技术,给你提供一个向我们反馈信息的机会,以便我们以后做的更好。本版
本中有几个缺陷。
1。Container-Managed Persistence
实现基于container-managed persistence 的entity beans不能完全实现所有的把物体影射到关系型数
据库的特性。
entity bean 类只能影射到一个数据库中的表
一个container-managed field 只能影射到一个表中的字段
当容器装入container-managed fields 的时候,它回装入所有的container-managed fields 。当装入的
数据非常大的时候,性能回受到影响。因为有些数据是商业方法所不需要的。
如果多个entity beans 的container-managed fields影射到数据库中同一个数据的时候,并且如果这些
beans在同一个事务中被引用,他们可能会对数据的一致性造成影响。
在ejbCreate, ejbRemove, ejbLoad, and ejbStore 方法中包含sql语句的beans中,当用deploytool分布
它们的时候,你只能修改表和字段的名字,不能修改作为参数传入的数目和它们的顺序。
在sql 语句中不能调用存储过程。
在Create Table语句中,你可以更改表的字段的sql类型,以便和实际的数据类型相符。
所有发生起来语句中的表名和字段的名字必须一致。
通常的sql语句只在Cloudscape, Oracle, and Microsoft SQL Server上做了测试,其他的数据库你应该
自己测试。
重复进行Result Set 时进行数据库调用
对于一些数据库的驱动而言,在重复进行Result Set 时不能连接数据库。在下面的例子中,the
stmt.executeUpdate 会失败。
String query = "SELECT DEPTNO FROM DEPT . . .";
String update = "UPDATE EMPLOYEE . . .";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
String s = rs.getString("DEPTNO");
// The following statement will FAIL:
stmt.executeUpdate(update);
. . .
}
你可以通过以下几种方法绕开此限制:
1。使用一个包含次sql的存储过程。
2。把重复的语句定义成一个子查询,例如:
String update = "UPDATE EMPLOYEE
SET DEPTNO =
(SELECT DEPTNO FROM DEPT
WHERE LOC = `ATLANTA')
WHERE TITLE = `ENGINEER'";
3。把第二个sql语句放在另外一个方法中,然后调用另外一个方法,在这种情况下,必须注意另外一个的
方法事RequiresNew类型的事务。同时一应该注意第二个sql语句运行在另外的事务中。这样,如果第二个事物
失败的话,你应该使第一个事物回滚。
强壮性和内存问题
我们预期在j2ee的server运行在内存小于128m的系统中,或者deploy的j2ee应用程序数目大于16的时候,
或者几千个jeb实例化的时候,系统会出现问题。如果你的内存溢出,shutdown并且重新启动j2ee server。
通常的分布环境
在这个版本中,每一个develper应该工作在自己的j2ee sdk环境中。多个developer不能共享一个j2ee
server。
已知的bug
分布的bug
1。在寻找一个 web resource collectin 时键入url后应该键入回车以便确认数据已经发送
2。当gui界面中的edit菜单被选中的情况:典型的情况时:树型结构看起来象是已经被选中,实际上另外
一个组件被选中了。因此,edit操作会对另外一个组件进行操作
。。
作者:unknown 来源:不详
|