帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE配置指南
作者:未知 发布时间:2005-03-12 来源:JSP天空网

  1.介绍
  本文介绍j2ee环境的配置,所有涉及的文件都在j2ee安装目录下的oncfig目录,这些文件都是文本文件,你可以有任意的文本编辑器来编辑它们。
  通常情况下,你没有改变这些文件的必要。但是如果你使用的数据库驱动不是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=:: . . .
  例如:
  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;第二,它隔开每一个jndi_datasource中的jndi_datasource> 和 元素.
  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..jndiname
  xadatasource..classname
  xadatasource..dbuser
  xadatasource..dbpassword
  xadatasource..prop.
  同时你也必须在J2EE_CLASSPATH 环境变量中包括jdbc驱动文件。

  jdbc20.datasources 属性
  jdbc20.datasources 属性的值和jndi名字连接,用于定位datasouce的位置(它就是lookup方法的参数)。
  jdbc20.datasources 的语法如下:


  jdbc20.datasources=||
|

  的作用有两个,第一,隔开jndi_datasource 和并组成一对,第二,隔开每一对的jndi_datasource> 、元素。
   和 jndi_XA_datasource有相同的语法:
  jdbc/
  jdbc关键字开头。jndi_name是datasource名字,这个名字指向jndi目录。
  例如:
  jdbc20.datasources=jdbc/Merant|jdbc/XAMerant|jdbc/Finch|jdbc/XAFinch

  xadatasource属性
  xadatasource..jndiname 属性指定XA DataSource的jndi名字。语法如下:
  xadatasource..jndiname=jdbc/
  n代表每一组xadatasource。第一个jdbc2.0驱动n为0,下一个是1,2等等。jndi_XA_datasource元素和

  jdbc20.datasources 指定的值对应

  The xadatasource..dbuser 和 xadatasource..dbpassword 属性指定数据库用户和密码。通常该用户具有管理员的权限(更多的信息请看 2222 The distributed.transaction.recovery )。
  xadatasource..prop. 指定和特定的属性值关联的值。实际的值可能是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和JTAtransactions 中你可以引用 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_HOME///ejb logs是在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_HOME//ejb/ejbd
  HTTP $J2EE_HOME//ejb/httpd
  deployed application $J2EE_HOME//ejb/

  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,认证信息放在/.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
  http://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 时不能连接数据库。在下面的例子中,thestmt.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操作会对另外一个组件进行操作。
  3.对于一个有很长的内容列表的组件连说,你有可能在打包的过程中遇到命令行的参数长度的限制。避免的方法:把帮助的类加入到一个.jar库文件中,然后把这个.jar文件加入到应用程序的.ear文件中。
  4.如果在一个含有ejb .jar文件的企业bean中有jndi名字,然后一个新的bean添加到这个同样的.jar文件中。jndi的名字数据可能丢失。解决的方法:尽量在指定jndi名字之前完成ejb .jar文件。
  5.在新建一个ejb的向导的通用对话框中,类的名称有可能丢失。丢失的情况发生在你后退然后前进的动作中。
  6.当你在核实的过程中新增文件的时候,有时候文件选择的状态有可能不正确。使用文件选择器选择一个目录后,你可能没有新增正确的文件。解决的方法:通过在另外一个工具的中引用这个文件,来刷新cache。例如:从file菜单,选择add ejb jar到应用程序,click 取消,然后到核实的对话框中。
  7.杂新增企业bean的响动中,如果选择了错误的类,然后你回退选择正确的项目,有时候这个选择的类的container-managed persistence属性有可能不正确。解决的方法:或者重新启动向导,或者选择另外一种类型的bean。

  安全问题的bug
  当用户重新定向到基于窗体的对话框页面的时候,如果没有注册(比如选择了浏览器的back),于是会被拒绝。解决的方法:从新启动浏览器。


  jsp的bug
  在特定的条件下,server启动的时候加载servlets有可能失败。j2ee server启动的时候可以加载一个servlet并且调用这个servlet的init方法。但是结果是不可预料的。这些加载的servlets包括在web.xml文件的
  RMI-IIOP Bugs
  1.如果你的jdk安装了RMI-IIOP部分,j2ee将不能工作。解决的办法是安装一个干净的jdk。
  2.j2ee的客户和server不能在基于IIOP1.0 协议的orb的产品中实现。

  其他软件的bug

  1. 在solaris平台上,如果环境变量没有包括setenv JIT_ARGS="bco=off",j2ee jit将会引起cloudscape的失败。

  2. 在切换j2ee server从non-recoverable 的模式到recoverable模式之前,要注意首先运行cleanup脚本。

  3. 运行j2ee,jdk是十分必要的。在一些系统中当安装jdk是时候,用户可以选择stand-alone JRE的模式。

  这样的模式不能运行j2ee。另外一个问题是:如果jre的root设置成jdk的安装目录,错误有可能发生。在这种情况下,当你运行的时候一切是好的,但是deploy的时候,会有如下错误:
java.rmi.RemoteException: Error processing ejb jar:access denied:
(java.io.FilePermission e: estjavalibext read)

  4. 当https服务没有启动的时候,j2ee server会打印一个错误,你可以忽略如果你不需要https。

  5. 在企业bean中,如果父类的参数或者返回值不是serializabl的,在父类中不要调用deserialization。要确定所有的父类是serializable。

  6. web组件的server.policy 文件和j2ee要符合。这个文件给出了
${com.sun.enterprise.home}/public_htm/ 下的权限。应用这个文件,遵从下面的步骤:
a:在lib/security/server.policy文件中,删除下面的行:


grant codeBase "file:${com.sun.enterprise.home}/public_html/-" {
permission java.security.AllPermission;
}
b:替换删除的行的内容如下:
grant codeBase "file:${com.sun.enterprise.home}/public_html/-" {
permission java.lang.RuntimePermission "loadLibrary.*";
permission java.lang.RuntimePermission "accessClassInPackage.*";

permission java.lang.RuntimePermission "queuePrintJob";
permission java.lang.RuntimePermission "modifyThreadGroup";

permission java.io.FilePermission "<>", "read,write";

permission java.net.SocketPermission "*", "connect";

// "standard" properies that can be read by anyone
permission java.util.PropertyPermission "*", "read";

// set the JSSE provider for lazy authentication of app. clients.
permission java.security.SecurityPermission "putProviderProperty.JSSE";
permission java.security.SecurityPermission "insertProvider.JSSE";
}; 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·浅析J2EE与.NET平台优劣  (2005-03-12)
 ·J2EE 组件开发:会话EJB  (2005-03-12)
 ·如何实现一个与数据库表字段松耦  (2005-03-12)
 ·当前流行的J2EE WEB应用架构分析  (2005-03-12)
 ·J2EE如何为你的企业做嫁衣  (2005-03-12)
 ·想免费参加J2EE职业培训吗?  (2005-03-12)
 ·J2EE是组件软件的未来  (2005-03-12)
 ·连接池深入J2EE的连接合用  (2005-03-12)
 ·课程介绍(8):SL-425 体系结构及设  (2005-03-12)
 ·金蝶J2EE应用服务器挑战国外巨头  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统