免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3541 | 回复: 6
打印 上一主题 下一主题

JAVA学习笔记2 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-10 16:19 |只看该作者 |倒序浏览
您找不到任何关于如何创建 JDBC 数据源的内容。相反,您不得不为您的容器查阅该文档。创建一个数据源可能需要向属性或配置文件添加一个数据源定义,或者也可以通过 GUI 管理工具完成,这取决于您的容器。

每个容器(或连接池管理器,如 PoolMan)都提供它自己的创建 DataSource 机制,JTA 魔术就隐藏在这个机制中。连接池管理器从指定的 JDBC 驱动器得到一个 Connection,但在将它返回到应用程序之前,将它与一个也实现 Connection 的虚包包在一起,将自己置入应用程序和底层连接之间。当创建连接或者执行 JDBC 操作时,包装器询问事务管理器当前线程是不是正在事务的上下文中执行,如果事务中有 Connection 的话,就自动征用它。

其它类型的事务性资源,JMS 消息队列和 JCA 连接器,依靠相似的机制将资源征用隐藏起来,使用户看不到。如果要使 JMS 队列在部署时对 J2EE 应用程序可用,您就要再次使用特定于提供者的机制来创建受管 JMS 对象(队列连接工厂和目标),然后在 JNDI 名称空间内发布这些对象。提供者创建的受管对象包含与 JDBC 包装器(由容器提供的连接池管理器添加)相似的自动征用代码。

透明的事务控制
两种类型的 J2EE 事务 — 容器管理的和 bean 管理的 — 在如何启动和结束事务上是不同的。事务启动和结束的地方被称为事务划分(transaction demarcation)。清单 1 中的示例代码演示了 bean 管理的事务(有时也称为编程(programmatic)事务)。Bean 管理的事务是由组件使用 UserTransaction 类显式启动和结束的。通过 ejbContext 使 UserTransaction 对 EJB 组件可用,通过 JNDI 使其对其它 J2EE 组件可用。

容器根据组件的部署描述符中的事务属性代表应用程序透明地启动和结束容器管理的事务(或称为宣告式事务(declarative transaction))。通过将 transaction-type 属性设置为 Container 或 Bean 您可以指出 EJB 组件是使用 bean 管理的事务性支持还是容器管理的事务性支持。

使用容器管理的事务,您可以在 EJB 类或方法级别上指定事务性属性;您可以为 EJB 类指定缺省的事务性属性,如果不同的方法会有不同的事务性语义,您还可以为每个方法指定属性。这些事务性属性在装配描述符(assembly descriptor)的 container-transaction 部分被指定。清单 2 显示了一个装配描述符示例。trans-attribute 的受支持的值有:

Supports
Required
RequiresNew
Mandatory
NotSupported
Never
trans-attribute 决定方法是否支持在事务内部执行、当在事务内部调用方法时容器会执行什么操作以及在事务外部调用方法时容器会执行什么操作。最常用的容器管理的事务属性是 Required。如果设置了 Required,过程中的事务将在该事务中征用您的 bean,但如果没有正在运行的事务,容器将为您启动一个。在这个系列的第 3 部分,当您可能想使用每个事务属性时,我们将研究各个事务属性之间的区别。

清单 2. EJB 装配描述符样本
<assembly-descriptor>;
  ...
  <container-transaction>;
    <method>;
      <ejb-name>;MyBean</ejb-name>;
      <method-name>;*</method-name>;
    </method>;
    <trans-attribute>;Required</trans-attribute>;
  </container-transaction>;
  <container-transaction>;
    <method>;
      <ejb-name>;MyBean</ejb-name>;
      <method-name>;updateName</method-name>;
      </method>;
   <trans-attribute>;RequiresNew</trans-attribute>;
  </container-transaction>;
  ...
</assembly-descriptor>;

功能强大,但很危险
与清单 1 中的示例不同,由于有宣告式事务划分,这段组件代码中没有事务管理代码。这不仅使结果组件代码更加易读(因为它不与事务管理代码混在一起),而且它还有另一个更重要的优点 — 不必修改,甚至不必访问组件的源代码,就可以在应用程序装配时改变组件的事务性语义。

尽管能够指定与代码分开的事务划分是一种非常强大的功能,但在装配时做出不好的决定会使应用程序变得不稳定,或者严重影响它的性能。对容器管理的事务进行正确分界的责任由组件开发者和应用程序装配人员共同担当。组件开发者需要提供足够的文档说明组件是做什么的,这样应用程序部署者就能够明智地决定如何构建应用程序的事务。应用程序装配人员需要理解应用程序中的组件是怎样相互作用的,这样就可以用一种既强制应用程序保持一致又不削弱性能的方法对事务进行分界。在这个系列的第 3 部分中我们将讨论这些问题。

透明的事务传播
在任何类型的事务中,资源征用都是透明的;容器自动将事务过程中使用的任意事务性资源征调到当前事务中。这个过程不仅扩展到事务性方法使用的资源(比如在清单 1 中获得的数据库连接),还扩展到它调用的方法(甚至远程方法)使用的资源。我们来看一下这是如何发生的。

容器用线程与事务相关联
我们假设对象 A 的 methodA() 启动一个事务,然后调用对象 B 的 methodB()(对象 B 将得到一个 JDBC 连接并更新数据库)。B 获得的连接将被自动征调到 A 创建的事务中。容器怎么知道要做这件事?

当事务启动时,事务上下文与执行线程关联在一起。当 A 创建事务时,A 在其中执行的线程与该事务关联在一起。由于本地方法调用与主调程序(caller)在同一个线程内执行,所以 A 调用的每个方法也都在该事务的上下文中。

橱中骸骨
如果对象 B 其实是在另一个线程,甚至另一个 JVM 中执行的 EJB 组件的存根,情况会怎样?令人吃惊的是,远程对象 B 访问的资源仍将在当前事务中被征用。EJB 对象存根(在主调程序的上下文中执行的那部分)、EJB 协议(IIOP 上的 RMI)和远端的骨架对象协力要使其透明地发生。存根确定调用者是不是正在执行一个事务。如果是,事务标识,或者说 Xid,被作为 IIOP 调用的一部分与方法参数一起传播到远程对象。(IIOP 是 CORBA 远程-调用协议,它为传播执行上下文(比如事务上下文和安全性上下文)的各种元素而备;关于 RMI over IIOP 的更多信息,请参阅参考资料。)如果调用是事务的一部分,那么远程系统上的骨架对象自动设置远程线程的事务上下文,这样,当调用实际的远程方法时,它已经是事务的一部分了。(存根和骨架对象还负责开始和提交容器管理的事务。)

事务可以由任何 J2EE 组件来启动 — 一个 EJB 组件、一个 servlet 或者一个 JSP 页面(如果容器支持的话,还可以是一个应用程序客户机)。这意味着,应用程序可以在请求到达时在 servlet 或者 JSP 页面中启动事务、在 servlet 或者 JSP 页面中执行一些处理、作为页面逻辑的一部分访问多个服务器上的实体 bean 和会话 bean 并使所有这些工作透明地成为一个事务的一部分。图 1 演示了事务上下文怎样遵守从 servlet 到 EJB,再到 EJB 的执行路径。

图 1.单个事务中的多个组件
  

最优化
让容器来管理事务允许容器为我们做出某些最优化决定。在图 1 中,我们看到一个 servlet 和多个 EJB 组件在单个事务的上下文中访问一个数据库。每个组件都获得到数据库的 Connection;很可能每个组件都在访问同一个数据库。即使多个连接是从不同的组件到同一个资源,JTS 也可以检测出多个资源是否和事务有关,并最优化该事务的执行。您可以从第 1 部分回忆起来,单个事务要包含多个资源管理器需要使用两阶段提交协议,这比单个资源管理器使用的单阶段提交代价要高。JTS 能够确定事务中是不是只征用了一个资源管理器。如果它检测出所有与事务相关的资源都一样,它可以跳过两阶段提交并让资源管理器自己来处理事务。

结束语
这个虑及透明事务控制、资源征用和透明传播的魔术不是 JTS 的一部分,而是 J2EE 容器如何在幕后代表 J2EE 应用程序使用 JTA 和 JTS 服务的一部分。在幕后有许多实体合力使这个魔术透明地发生;EJB 存根和骨架、容器厂商提供的 JDBC 驱动器包装器、数据库厂商提供的 JDBC 驱动器、JMS 提供器和 JCA 连接器。所有这些实体都与事务管理器进行交互,于是应用程序代码就不必与之交互了。

4.事务的特性ACID
原子性(automic)
        事务内部的操作必须被看作一个单一的,原子性的单元。
这意味着,如果在其中的每个操作都被成功的执行,事务就能被认为是完整的并且允许提交。

一致性(consistent)
当作为一个整体执行一个事务的操作时,这些操作必须把它们处理的数据从一个一致性的状态转移到另一个一致性的状态

隔离性(isolated)
隔离对资源的访问
事务应该与其他事务的效用隔离。
隔离级别描述了通过并发事务对一个资源的访问被隔离的程度。
如果你熟悉Java中的线程同步或是关系数据库中的行锁设计的概念,隔离性与这样的概念类似。
在EJB1.1中,如果容器管理事务,配置器设置事务隔离层
如果bean管理事务,bean配置器设置事务隔离层
        
事务隔离可用隔离条件来定义,这些条件有:
A.        dirty read(脏读,不清楚的读)
B.         repeatable read(可重复的读)
C.         phantom read(幻影,有名无实的读•)
四种隔离层
b.        Read Uncommitted
c.        Read Committed
d.        Repeatable Read
e.        Serializable
这些隔离层和JDBC定义的隔离层相同,在java.sql.Connection类中定义了相应的静态变量。
Serializable的隔离层确保数据不被事务并发访问,这样可以确保数据永远是一致的。

get方法的隔离层的等级可以非常低,如Read Uncommited
set方法所作的修改必须防止其他事务的不清楚的读取,因此将使用最大约束的隔离层Serializable


通常来说,随着隔离层变得更有约束,系统的性能也将降低。

   
   持久性(durable)
当提交事务时,该事务所作的任何数据更新必须是“耐久性”的。
这意味着不管它结束之后发生任何错误,被提交事务的结果必须保留。
更通俗的说法是:所有再事务过程中所作的数据修改必须在事务成功完成之前写入某种类型的物理介质。

  理解:
1.事务系统通过确保事务是原子的,隔离的和持久的来实现事务的一致性

现实程序中主要考虑的是原子性

JCA(J2EE连接体系结构)
J2EE Connector Architecture基础
J2EE连接体系结构,目前正在修改,将期盼着包括J2EE未来版本的规范,这个连接
体系结构定义了标准的资源适配器和依附于连接、事务、安全管理的合同,所以应用服务器将以标准和统一的方式插入各种企业信息系统,包括ERP(如SAP R/3),主框架事务处理系统和数据库系统。


理想的做法是内置一个可用于任何资源类型和所有连接管理功能(包括合用)的通用连接接口。这就是即将出现的 J2EE Connector Architecture 1.0 规范的目标之一。

图  显示了体系结构内部的主要概念,资源适配器。应用服务器所支持的每一种资源类型的可插入组件,资源适配器,都在应用服务器地址空间中执行。访问那些适配器的客户机 API 可以是 Common Client Interface (CCI) 或(为了向后兼容)特定于资源的 API(例如 JDBC 2.0)。
例如,CCI 定义 javax.resource.cci.ConnectionFactory 和 javax.resource.cci.Connection ,分别作为连接 factory 和连接的接口 -- 与JDBC 2.0 接口类似。

JDBC和JCA关系
大多数应用程序开发人员不需要知道 JDBC 和 J2EE 连结器体系结构之间的关系,就可以很好地使用 JDBC API。但是,由于 JDBC 3.0 规范已经考虑到这项新的体系结构,这使得开发人员能更好地理解 JDBC 在哪里适合 J2EE 标准,以及这个规范的发展方向是什么。
JCA指定了一组协议,允许企业的信息系统以一种可插入的方式连接到应用服务器上。这种体系结构定义了负责与外部系统连接的资源适配器。连接器服务提供者接口(The Connectors Service Provider Interface,SPI)恰好和 JDBC 接口提供的服务紧密配合。
JDBC API 实现了连结器体系结构定义的三个协议中的两个。
第一个是将应用程序组件与后端系统相连接的连接管理,它是由 DataSource 和 ConnectionPoolDataSource 接口来实现的。
第二个是支持对资源的事务性访问的事务管理,它是由 XADataSource 来处理的。
第三个是支持后端系统的安全访问的安全性管理,在这点上,JDBC 规范并没有任何对应点。尽管有最后那个不足,JDBC 接口仍能映射到连接器 SPI 上。
如果一个驱动程序厂商将其 JDBC 驱动程序映射到连接器系统协议上,它就可以将其驱动程序部署为资源适配器,并立刻享受可插性、封装和在应用服务器中部署的好处。这样,一个标准的 API 就可以在不同种类的的企业信息系统中,供企业开发人员使用。
JMS
THE basic building blocks of a JMS application are as follows:
• Administered objects (connection factories and destinations)
• Connections
• Sessions
• Message producers
• Message consumers
• Messages


消息系统允许分开的未耦合的应用程序之间可靠地异步通信。类同邮件系统.
 通常有两种消息类型。
 1.发布/订阅(publish/subscribe)
 发布/订阅消息系统支持一个事件驱动模型,消息产生者和使用者都参与消息的传递。  产生者发布事件,而使用者订阅感兴趣的事件,并使用事件。产生者将消息和一个特定的主题(Topic)连在一起,消息系统根据使用者注册的兴趣,将消息传给使用者。
 2.点对点(Peer to peer)
 在点对点的消息系统中,消息分发给一个单独的使用者。它维持一个"进入"消息队列。消息应用程序发送消息到一个特定的队列,而客户端从一个队列中得到消息JMS和EJB一样是WEBLOGIC 提供的服务,客户端通过JNDI名字查找。
在控制台 先创建一个JMS的主题,设定一个JNDI(参照提示做啊,跟前边的介绍雷同)
  一个典型的JMS客户端由下面的几个基本步骤来创建:
  创建一个到消息系统提供者的连接(Connection)
  创建一个Session,用于接收和发送消息
  创建MessageProducer和MessageConsumer来创建和接收消息
  当完成了上述步骤后,一个消息产生者客户端将创建并发布消息到一个主题,(JNDI)
而消息使用者客户端会接收与一个主题相关的消息。

1.创建一个Connection
A connection encapsulates a virtual connection with a JMS provider. It could represent an open TCP/IP socket between a client and a provider service daemon. You use a connection to create one or more sessions.

一个Connection提供客户端对底层的消息系统的访问。并实现资源的分配和管理。通过使用一个ConnectionFactory来创建一个Connection,通常用JDNI来指定:
Connection message=new initialContext();
TopicConnectionFactory topicConnectionFactory=(TopicConnectionFactory);
topic = (Topic) jndiContext.lookup(topicName);
topicConnection =topicConnectionFactory.createTopicConnection();
  
2.创建一个Session
           A session is a single-threaded context for producing and consuming messages. You use sessions to create message producers, message consumers, and messages.
Session是一个比较大的JMS对象,他提供了生产和消费消息的手段。
用于创建消息使用者和消息产生者。
topicSession =
topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
  两个参数用于控制事务和消息确认。
  
3.定位一个Topic
  用JDNI来定位一个Topic,Topic用于识别发送或接收的消息,在发布/订阅系统中。
订阅者订阅一个给定的Topic,而发布者将它发布的消息与一个Topic相连。
  下面是创建一个Topic "WeatherReport"
  Topic weatherTopic=messaging.lookup("WeatherReport";
  
4.启动Connection
  在上面的初始化步骤之后,消息流是禁止的,用于防止在初始化时发生不可预料的行为。
一旦初始化结束,必须让Connection启动消息系统。
  topicConnection.start();
  
5.创建一个消息产生者
  在发布/订阅里,一个产生者发布消息到一个指定的Topic。
下面的代码显示创建一个产生者,以及后续的建立和发布一个简单文本消息。
  TopicPublisher publisher=session.createPublisher(weatherTopic);
  TexeMessage message=session.createMessage();
  message.setText("ssss";
publisher.publish(message);

下面是一个消息使用者的代码

topicConnection =topicConnectionFactory.createTopicConnection();
topicSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
topicSubscriber = topicSession.createSubscriber(topic);
topicListener = new MsgListener();
topicSubscriber.setMessageListener(this);
topicConnection.start();
JNDI
1.JNDI的基本知识
JNDI――Java的命名和目录接口

命名服务是一种应用程序,该程序包含一个对象集合或对象引用的集合,还对每个对象关联了一个对用户友好的名称。
目录服务只是命名服务所提供的一个扩展功能。
   
   
在JDK1.3中,JNDI支持以下三种Service Provider
LDAP
CORBA的COS Naming Service
RMI Registry


目录服务实现的常见的功能
  LDAP
  NDS
  NIS+
  X.500

2.避免在程序中显式的设置JNDI Factory
      Context ctx = null;
      try
      {
        Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory";
        env.put(Context.PROVIDER_URL, "t3://localhost:7001";
        ctx = new InitialContext(env);
        System.out.println("成功创建Initial context";
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
可以在jndi.properties文件中添加如下两行
java.naming.factory.initial= weblogic.jndi.WLInitialContextFactory
java.naming.provider.url= t3://localhost:7001
      

     其他的如文件系统访问的例子参看《EJB2.0企业级应用程序开发》
3.关闭InitialContext
在结束InitialContext对象的使用后,总要关闭该对象。
这类似于关闭其他的有限资源,比如JDBC连接。
即使抛出了某个异常,也要保证关闭InitialConext对象
Application Server
1.WebSphere
1.1初步安装
6.29.2002
安装developerWorks toolbox sample CD(disk1)上的
Websphere application server advanced single server

在server机器上进行“典型安装”,安装很顺利,比websphere application server 3.0要好很多
由于wingate可能使用了7000端口,第一次启动WAS没有成功,把wingate stop掉,就可以启动WAS了 (后来修改server-config.xml,把7000端口改为别的端口,即使wingate starting ,也可以启动WAS)
现在WAS典型安装的时候自动安装了 IBM HttpServer,比以前方便多了(以前还要担心IBM HttpServer的安装问题,况且这次我是安装在win2000 prefessional上面的,本来机器上就没有 IIS)。
可以使用http://server:9090/admin 进行管理

在gu机器上进行“定制安装”,不安装IBM HttpServer,也顺利搞定。

安装忘了可以在IE中访问以下网址测试
http://localhost:9080/webapp/examples/
http://localhost:9080/estore/

http://localhost:9080/estore/是不需要配置就可以使用的,况且用到了数据库,根据petstore.ear中的customerEjb.jar中的ibm-web-bnd.xmi中看来,使用的数据源为
jdbc/EstoreDataSource
说明在WAS安装完后,这个DataSource就是可用的,可供测试
1.2配置样本
可以通过“样本”(http://localhost/WSsamples/index.html)来学习WAS

Database Configuration
选择“Start Samples.ear SQL Server with Merant Database Configuration”

JDBC 驱动程序(Microsoft SQLServer via Merant SequeLink JDBC Driver)
服务器类路径:${WAS_ROOT}/lib/sljc.jar;${WAS_ROOT}/lib/sljcx.jar


1.3 部署示例应用(MyBank)
根据“将应用安装到 WebSphere 4.0 高级单服务器版(AEs) .pdf”的指导,可以顺利的部署应用程序
   
1.3.1停止WAS服务
可以在命令行下用stopserver。
1.3.2 db2的JDBC版本
        When IBM DB2 Universal Database Version 7 is first installed, it uses the JDBC 1.0 API for connections.  WebSphere V4.0 and J2EE require JDBC 2.0.  Stop the DB2 JDBC Applet Server, then run a batch file to change from JDBC 1.0 to JDBC 2.0.
__ Click the Windows Start button, and select Settings -->; Control Panel.
__ In the Control Panel, double-click Services.
__ In the Services window, select the DB2 JDBC Applet Server, and click Stop.
__ Click Yes, you are sure you want to stop the DB2 JDBC Applet Server service.
__ Verify the WebSphere Server is stopped.  In a Command window, type: stopserver.
__ In a Command window, change directories to where DB2 is installed.
     For example: cd  C:\SQLLIB (Could be C:\Program Files\SQLLIB on your system.)
__ In the Command window, type: cd  java12
__ In the Command window, type: usejdbc2
     Six files are copied, and a file named inuse is updated.
__ In the Command window, type: type inuse.
     This should display: JDBC 2.0
__ In the Control Panel, double-click Services.
__ In the Services window, select the DB2 JDBC Applet Server, and click Start.

1.3.3设置DataSource
When you created the DataSource, you specified that the Default User ID for the application database is USERID, and the Default Password is PASSWORD.You need to create this User ID in the operating system registry.

1.4 开发和部署自己的应用
成功的在WAS4.0中部署bidding2.ear,使用的是通过Web页面部署,而不是通过SEAppInstall命令行方式
看来JBuilder7和WAS4.0集成开发还是比较方便的。

简单的还行,复杂一点就不行了,例如开发WebApplication的时候,ibm-web-bnd.xmi和ibm-web-ext.xmi根本不知道怎么写,也没有资料可以查
看来,开发WebSphere的东西,还是要使用WSAD.

可以在Jbuilder中开发后,使用“应用程序组装工具”(assembly.bat)来配置程序,然后再安装到WebSphere中去。

也可以不使用“应用程序组装工具”,不管ibm-web-bnd.xmi和ibm-web-ext.xmi,直接通过http:localhost:9090/admin来安装应用程序的时候,会提示你输入对应的实际的jndi资源名

在WebSphere中部署了bidding2企业应用程序后,关闭重新启动WAS还是不行,bidding2还是无法运行,结果,重新启动一下计算机就可以了,这一点不如Weblogic


1.4.1 JSP中的访问DataSource和EJB
(1)在Web Application程序的java bean里有这样一句
DataSource source = (DataSource)initCtx.lookup("java:comp/env/jdbc/sample" );

注意:红字部分是和web.xml中的红字部分对应的

(2)在web.xml中有这样
  <resource-ref  id="ResourceRef_1" >;
    <res-ref-name>;jdbc/sample</res-ref-name>;
    <res-type>;javax.sql.DataSource</res-type>;
    <res-auth>;CONTAINER</res-auth>;
  </resource-ref>;
  
(3)在ibm-web-bnd.xmi中有这样
    <resRefBindings xmi:id="ResourceRefBinding_1" jndiName="jdbc/sample">;
    <bindingResourceRef href="WEB-INF/web.xml#ResourceRef_1"/>;
    </resRefBindings>;
  注意:绿字部分是和web.xml中的绿字部分对应的
至于ibm-web-bnd.xmi中jndiName="jdbc/sample",这个指向的是具体的WAS中已定义的DataSource的JNDI名字,可以是任何名字,只要有效。
   
可以顺利找到DataSource


(1)在Web Application程序的java bean里有这样一句
CustomerManagerHome home =
(CustomerManagerHome)initCtx.lookup("java:comp/env/ejb/CustomerManager" );
CustomerManager CustomerManager = home.create();

注意:红字部分是和web.xml中的红字部分对应的
(2)在web.xml中有这样
<ejb-ref id="EjbRef_1">;
    <ejb-ref-name>;ejb/CustomerManager</ejb-ref-name>;
<ejb-ref-type>;Session</ejb-ref-type>;         <home>;com.hmautomation.bidding2.controller.CustomerManagerHome</home>;         <remote>;com.hmautomation.bidding2.controller.CustomerManager</remote>;
</ejb-ref>;
     
  (3)在ibm-web-bnd.xmi中有这样
  <ejbRefBindings xmi:id="EjbRefBinding_1" jndiName="CustomerManager">;
    <bindingEjbRef href="WEB-INF/web.xml#EjbRef_1"/>;
  </ejbRefBindings>;
  注意:绿字部分是和web.xml中的绿字部分对应的
至于ibm-web-bnd.xmi中jndiName="CustomerManager ",这个指向的是具体的WAS中已有的EJB的JNDI名字,可以是任何名字,只要有效。
   
可以顺利找到EJB
1.4.2 launchClient.bat
在开发j2ee应用时,如果你的客户端程序是java Client形式的,你应该通过客户端程序的容器来执行客户端程序。在WebSphere ad 4.0中,你应该用launchClient.bat来执行你的程序

    j2ee客户端程序有两种形式,web形式和java客户端形式。java客户端形式是你自己编写的拥有main函数的类。WebSphere的launchClient.bat在WebSphere安装目录/AppServer/bin下
1.4.3 WebSphere中的JNDI
参看《WebSphere Version 4 Application Development Handbook》
Chapter13:Guidelines for coding WebSphere applications
Using JNDI

参考infocenter中的信息,轻易解决这个问题,在jndi.properties中写
java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
java.naming.provider.url=iiop://localhost:900

实例代码片断:
         ctx = new InitialContext();
         System.out.println("成功创建Initial context";

Object objref = ctx.lookup("jdbc/sample";  //这里的jdbc/sample就是WAS安装
//已有的instantDB的sample datasource
         System.out.println("成功找到DataSource sample";
1.4.4 WebSphere中的重新安装ear
很麻烦!
“应用程序安装”向导

Application 或 Application 目录已存在。

与所选应用程序同名的目录已存在。
目录中的文件可能已由应用程序服务器锁定。
要安装此应用程序,您将需要执行下列步骤:
1.        如果您还未卸载此应用程序,则现在卸载它。
2.        保存此配置。
3.        停止应用程序服务器进程。
4.        删除与要安装的应用程序相应的目录(在 installedApps 目录下)。
5.        重新启动应用程序服务器并返回到管理应用程序。
6.        再次安装应用程序。
1.4.5 WebSphere中的User Profile
《IBM Websphere and VisualAge for Java Database Integration with DB2, Oracle and SQLServer》有一章专门讲如何使用User Profile

1.5 WebSphere实现的一些服务
   WebSpher是OMG Specification的一个Light Implenentation
   而Componet Broker是一个Complete Implementation
1.4.3 Directory Service
LDAP Directory可以通过存储user ID和password而被用作一个authientication 的 centralized point

IBM Secureway Directory是LDAP的一个实现,它使用IBM DB2作为后端存储。

1.6 WebSphere的文档
Web 上的文档
要获取提供了所有支持语言的整个文档集,请参阅:

http://www.ibm.com/software/webservers/appserv/infocenter.html
当您进入此 Web 页面时,可在线浏览信息中心,或将它下载到您的机器上。
在信息中心中,您会找到下列信息:

发行说明
此文档包括问题描述和解决方法,以及产品限制。在开始产品安装之前,请阅读此文件。发行说明的最新版本在产品 Web 站点上。
“欢迎”页面
“欢迎”页面突出显示了所有用户特别关注的信息(包括从版本 3.5 迁移到版本 4.0,以及用于通过教程和代码样本的“边干边学”的实践指示。)
步进式安装文档
此安装文档为安装和配置此产品提供了说明性、步进式的帮助。每个 PDF 文档涉及到不同的操作系统和数据库组合,如在安装有 IBM DB2 数据库的 Windows NT 上安装此产品。
内容更深入的文档
这些主题包括编程、安全性、管理、迁移和多机器环境(不适用于高级单服务器版)。
帮助文件更新
与此产品一起安装的帮助文件已更新版本在信息中心中提供。各种界面的帮助主题按管理部分下面的对象类型(如“Web 模块”)组织。特别地,请参阅章节 6.7。
1.7 WebSphere和SQLServer
1.7.1使用Merant Driver
1.安装sql server 2000;完毕后安装sql server 2000 sp2;
(注:我没有安装sql server 2000 SP2,安装merant driver的时候,它提示我要MDAC-Microsoft Data Access Component,我又下载了一个MDAC2.6)

2. 安装Merant SequeLink Server 5.1 (这是装在SQLServer的那台机器上的),命令行下输入setup /v”IPE=NO”,按提示直至安装完毕

问OEM/Serial Number的时候, 敲入1111,但是敲入1111似乎是evaluation,只能用一个月,server上可以用到2002.8.10

3.配置DataSource
   我作了如下填写:
JDBC 驱动程序(Microsoft SQLServer via Merant SequeLink JDBC Driver)
服务器类路径:${WAS_ROOT}/lib/sljc.jar;${WAS_ROOT}/lib/sljcx.jar
(后来程序又说WAS4.01带这两个jar文件和Merant SequeLink Server5.1不匹配,IBM老是出这样的问题,我用eFix PQ62295 Update中sequelink.zip的两个jar文件取代才解决了问题,但还是有中文问题)

但是程序告诉我找不到文件,一发狠,就把这两个文件拷到WAS所带的JDK的ext目录中去,结果 javax.sql.DataSource又找不到,只能把j2ee.jar也拷到WAS所带的JDK的ext目录中去,OK。(有待改进)

com.merant.sequelink.jdbc.SequeLinkDriver.class
Jdbc:sequelink//hostname:19996


总结:Merant似乎已经放弃了JDBC Driver这一块,已有另一个新的公司在作这个产品(http://www.datadirect-technologies.com/)
IBM也意识到了这一点,在eFix PQ62295 Update中提供了它自己的JDBC Driver

1.7.2使用MicroSoft的Driver
com.microsoft.jdbcx.sqlserver.SQLServerDataSource
基本是不行的,IBM的程序不能实例化上面的类。

2.  Weblogic
1)Weblogic安装
在startWeblogic.cmd里找到下面这句,写上你的密码即可。
set WLS_PW=
或在startWeblogic.cmd同级目录下加一个文件password.ini
里面写一句话,就是你的密码即可,(只是密码字串,不要别的)

有关weblogic在jb6中调用出错的一点添加:
安装上面的方法可能会出现java.lang.NullException(可能)。只要你把工程中jdk换成weblogic自带的jdk即可消除这个问题。
weblogic和jb6自带的jdk,虽然版本一样,可能存在差异!
大家还是装个7.0来用吧,好象没有时间限制,只不过是有连接限制,呵

2)Weblogic中的安全问题
配置SSL
a.        每个需要配置SSL的Weblogic Server Deployment,你需要一个私钥和一个数字证书

私钥和数字证书生成存放在PEM或者Definite Encoding Rules (DER) 格式的文件中。.
PEM文件是文本的。
DER文件是二进制的。

论坛徽章:
0
2 [报告]
发表于 2004-01-10 16:20 |只看该作者

JAVA学习笔记2

不全了,就这些都贴出来了,不好意思

论坛徽章:
0
3 [报告]
发表于 2004-01-10 16:33 |只看该作者

JAVA学习笔记2

支持,鼓励!谢谢!

论坛徽章:
0
4 [报告]
发表于 2004-01-12 14:03 |只看该作者

JAVA学习笔记2

呵呵,不客气

论坛徽章:
0
5 [报告]
发表于 2004-01-13 13:17 |只看该作者

JAVA学习笔记2

好,支持
只要有利于学习,我们就支持

论坛徽章:
0
6 [报告]
发表于 2004-01-31 11:07 |只看该作者

JAVA学习笔记2

支持!

论坛徽章:
0
7 [报告]
发表于 2004-01-31 14:34 |只看该作者

JAVA学习笔记2

强力支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP