java中间件学习笔记

1.为解决分布异构问题,提出了中间件(middleware)的概念,属于可复用软件的范畴。
2.中间件=平台+通信,中间件是基于分布式处理的软件,最突出的特点是其网络通信功能
3.中间件分为6类:终端仿真/屏幕转换、数据访问中间件(UDA)、远程过程调用(RPC)中间件、消息中间件(MOM)、交易中间件(TPM)、对象中间件。
4.启动weblogic:在IE输入:http://localhost:7001/,如果看见欢迎页面,则说明启动成功。配置weblogic则是:http://localhost:7001/console
5.IIS、Apache等都是默认占用80端口
6. <session-config>
<session-timeout>30</session-timeout>
</session-config>
设置session失效时间:web.xml
7.Servlet被客户端发出的第一次请求激活,处理完请求后继续在后台运行以等待新的请求,每个请求将生成一个新的线程,而不是一个完整的进程。
8.Java的synchronized使用方法总结

把synchronized当作函数修饰符时,示例代码如下:

1. Public synchronized void method(){
2. //….
3. }

这也就是同步方法,那这时synchronized锁定的是哪个对象呢?他锁定的是调用这个同步方法对象。也就是说,当一个对象P1在不同的线程中执行这个同步方法时,他们之间会形成互斥,达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却能够任意调用这个被加了 synchronized关键字的方法。
9.DTD编码符号:< <>>& & " "
10.关于XML的处理:一般有两个W3C中的DOM和SAX,其中DOM应用较为广泛
<?xml version="1.0" encoding="UTF-8"?>
<publication>
<book>
<Title>The Mythical Man-month</Title>
<Writer>Frederick P. Brooks Jr.</Writer>
<PublishDate>1975-03-12</PublishDate>
</book>
<book>
<Title>Think In Java</Title>
<Writer>Bruce Eckel</Writer>
<PublishDate>1999-04-01</PublishDate>
</book>
</publication>
useDomPrintElement.java的代码如下所示:
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class useDomPrintElements{
public static void main(String[] args){
try{
//获得一个XML文件的解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//解析XML文件生成DOM文档的接口类,以便访问DOM
DocumentBuilder builder = factory.newDocumentBuilder();
//Document接口描述了对应于整个XML文件的文档树
Document document = builder.parse( new File("publication.xml") );
//获得根元素的子节点列表
Element element = document.getDocumentElement();
NodeList nodelist = element.getChildNodes();
//如果预知根元素的名称,也可以使用下边的方法获取根元素的子节点列表
//NodeList nodelist = document.getElementsByTagName("publication");
//用递归方法实现DOM文档的遍历
GetElement(nodelist);
}catch(Exception e){
e.printStackTrace();
}
}
public static void GetElement(NodeList nodelist){
Node cnode;
String str;
if(nodelist.getLength() == 0){
// 该节点没有子节点
return;
}
for(int i=0;i<nodelist.getLength();i++){
cnode = nodelist.item(i);
if(cnode.getNodeType() == Node.ELEMENT_NODE){
//打印节点名称
System.out.println(cnode.getNodeName());
//递归调用GetElement
GetElement(cnode.getChildNodes());
}
else if(cnode.getNodeType() == Node.TEXT_NODE){
str = cnode.getNodeValue().trim();
// 当该对象不为空时显示信息
if(str.length()>0)
System.out.println(" "+str);
}
}
}
}
11.添加xml节点
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

public class useDomEditElements{
public static void main(String[] args){
Text textMsg;
try{
//获得一个XML文件的解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//解析XML文件生成DOM文档的接口类,以便访问DOM
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( new File("publication.xml") );
// 获得根对象
Element root = document.getDocumentElement();
// 在DOM文档中增加一个Element节点
Element book = document.createElement("book");
//在DOM文档中增加一个Element节点
Element title = document.createElement("Title");
//在DOM文档中增加一个Text节点
textMsg=document.createTextNode("Applied Cryptography");
title.appendChild(textMsg);
//把title节点转化为book的子节点
book.appendChild(title);
Element author = document.createElement("Author");
textMsg=document.createTextNode("Bruce Schneier");
author.appendChild(textMsg);
//把author节点转化为book的子节点
book.appendChild(author);
Element date = document.createElement("publishDate");
textMsg=document.createTextNode("1994-02-23");
date.appendChild(textMsg);
//把date节点转化为book的子节点
book.appendChild(date);
//把book节点转化为root的子节点
root.appendChild(book);

//类TransformerFactory实现获得将DOM文档转化为XML文件的转换器
TransformerFactory tfactory = TransformerFactory.newInstance();
//类Transformer实现转化API
Transformer transformer = tfactory.newTransformer();
// 将DOM对象转化为DOMSource类对象,该对象表现为转化
//成别的表达形式的信息容器
DOMSource source = new DOMSource(document);
// 获得一个StreamResult类对象,该对象是DOM文档转化成的其他形式的
//文档的容器
StreamResult result = new StreamResult(new File("publication.xml"));
// 调用API,将DOM文档转化成XML文件
transformer.transform(source,result);
}catch(Exception e){
e.printStackTrace();
}
}
}

12.SAX在JSP中的运用
<%
//定义XML文档的保存位置
String filepath="D:\\book.xml";
Element root,book;
List books;
//使用StringBuffer类保存书的HTML格式,显得代码清晰,易于修改
StringBuffer bookInfo=new StringBuffer();
try{
//实例化一个SAXBuilder类,来操作XML文档
SAXBuilder sb = new SAXBuilder();
//从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了
Document doc = sb.build(new FileInputStream(filepath));
root = doc.getRootElement(); //得到根元素
books = root.getChildren(); //得到根元素所有子元素的集合
for(int i=0;i<books.size();i++){
book=(Element)books.get(i); //得到一本书的信息
bookInfo.append("<tr>");
bookInfo.append("<td>"+book.getChildText("name")+"</td>");
bookInfo.append("<td>"+book.getChildText("author")+"</td>");
bookInfo.append("<td>"+book.getChildText("publishDate")+"</td>");
bookInfo.append("<td>"+book.getChildText("price")+"</td>");
bookInfo.append("</tr>");
}
}catch(Exception e){
out.println(e);
}
%>
添加XML
<%
String msg=""; //用一个msg变量保存提示信息,这样做的好处很多
String filepath="D:\\book.xml"; //XML文档的保存位置
Element root,book;
List books;

try{
//接收上传的参数
String bookname=request.getParameter("bookname");
String author=request.getParameter("author");
String year=request.getParameter("year");
String month=request.getParameter("month");
String day=request.getParameter("day");
String price=request.getParameter("price");
String publishDate=year+"-"+month+"-"+day;
//把得到的书名、作者转换为汉字编码
bookname=new String(bookname.getBytes("8859_1"),"gb2312");
author=new String(author.getBytes("8859_1"),"gb2312");
//实例化一个SAXBuilder类,来操作XML文档
SAXBuilder sb = new SAXBuilder();
//从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了
Document doc = sb.build(new FileInputStream(filepath));
root = doc.getRootElement(); //得到根元素
books = root.getChildren(); //得到根元素所有子元素的集合
Element newbook=new Element("book");
//加入一本新书
Element el=new Element("name");
el.setText(bookname);
newbook.addContent(el);
el=new Element("author");
el.setText(author);
newbook.addContent(el);
el=new Element("publishDate");
el.setText(publishDate);
newbook.addContent(el);
el=new Element("price");
el.setText(price);
newbook.addContent(el);
books.add(newbook);

//把修改的信息记入XML文档
String indent = " "; //定义生成的XML文档的格式
boolean newLines = true;
XMLOutputter outp = new XMLOutputter(indent,newLines,"GBK");
outp.output(doc, new FileOutputStream(filepath));

msg="已经成功的添加了\""+bookname+"\"";
}catch(NullPointerException npe){
/*如果用户第一次访问这个文件,没有数据上传,则会抛出NullPointerException。
*这样做有些投机,实际应用中不建议这样用,可以使用
* if(request.getParameter("Submit")!=null){}进行判断有无数据提交*/
}catch(Exception e){
out.println(e);
}
%>
13.应用软件系统模型:以数据为中心的系统模型;以执行为中心的系统模型;面向对象的系统模型和基于总线的系统模型
14.SOA(面向服务的架构)不是一种语言,也不是一种具体的技术,而是一种软件系统的架构,它尝试给出在特定环境下推荐采用的一种架构
15.远程方法调用RMI是sun公司规定的允许在不同的JAVA虚拟机之间进行对象间通信的一种规范,实现JAVA虚拟机通信的技术主要有套接字和JAVA消息服务(JMS)
16.运行RMI一般步骤:
(1)生成远程对象的本地代理和服务器实体
(2)启动RMI注册表
(3)运行rmid并指定策略文件
(4)运行用于注册激活对象的程序,也需要指定策略文件
(5)运行客户程序,也需要指定策略文件。
17.在IIOP上运行RMI明显优于激活对象之类的方法
18.javax.ejb.EnterpriseBean接口是所有EJB的基础接口
19.Session Bean接口:
setSessionContext、ejbCreate、ejbPassivate(将暂时不用的bean实例串行化写入到临时的存储空间)、ejbActivate(将串行化的bean重新导入内存)、ejbRemove
20.两种基本的Entity Bean:容器管理持久性(CMP)和Bean管理持久性的(BMP)
21.实体Bean中要串行化(解除与远程引用的关联)或激活(与远程引用关联)Bean时,因此需在Bean中定义ejbPassivate()和ejbActivate()方法会向这个Bean发出通知。
22.将CMP类Bean转化为BMP类Bean,主要修改ejbLoad()和ejbStore()方法,两方法需包括数据库的访问逻辑。另外可扩展相应的ejbCreate()、ejbRemove()、ejbFindByPrimaryKey(Integer primaryKey)等方法
23.消息驱动的EJB必须实现javax.ejb.MessageDrivenBean和javax.jms.MessageListener两个接口
24.JMS的COnnectionFactory(连接工厂)的初始上下文通过Java命名和目录接口(JNDI)创建。
25.消息Bean工作流程:
(1)受限确定连接工厂和队列
queueConnectionFactory=(QueueConnectionFactory)jndiContext.lookup("java:comp/env/jms/MyQueueConnectionFactory");
queue=(Queue)jndiContext.lookup("java:comp/env/jms/QueueName");
(2)船籍港ianduilie连接、会话和一个消息发送器
queueConnection=queueConnectionFactory.createQueueConnection();
queueSession=queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queue);
message = queueSession.createTextMessage();
(3)把几个消息发送到队列
for (int i = 0; i < NUM_MSGS; i++)
{
message.setText("我是" + msgArray[i] );
System.out.println("Sending message: " +
message.getText());
queueSender.send(message);
}
26.OMG:对象管理组织; CORBA:公共对象请求代理体系结构
27.OMG IDL:用来描述产生对象调用请求的客户对象和服务对象之间的接口的语言,大多数CORBA产品中都提供了IDL到相关编程语言的编译器
28.JNDI命名和目录接口用来简化对目录基础结构的访问,以前需要使用不同的API来访问不同的目录服务,如轻量级的目录访问协议LDAP(LightWeight Directory Access Protocol)或Sun的网络信息服务NIS
29.Web Service三大技术:XML、XSD、SOAP(简单对象访问协议):其中要将SOAP与SOA区分开来。面向服务的体系结构(Service-Oriented Architecture,SOA)
30.从Tomcat4.0开始,Tomcat不再使用系统的CLASSPATH
31.SOAP技术标准:WSDL(Web 服务定义语言)和UDDI(通用性描述、发现与集成),其中UDDI类似于注册来获取公司所提供的SOAP API业务接口
32.消息只应用于应用程序与组件之间的通信
33.JMS (1)异步:JMS提偶那个这将到达的消息发送给客户,客户不用发送请求消息
(2)可靠:JMS API确保消息传送一次而且只传送一次,可靠性差的应用程序可能会丢失消息或者重复接收消息
34.构建企业异构数据源集成系统时必须面对的几个主要问题:一构型、完整性、性能、语义冲突问题为异构数据集成中的共性问题,权限瓶颈、附加约束和集成内容的限定则属于企业异构数据集成的特性问题。
35.数据集成的三种模型:联邦式数据库系统模型、中间件模型和数据仓库模型
36.PKI(公开密钥基础设施)支持身份标识和认证、保密或隐私、数据完整性与不可否认等安全保障,是目前普遍认为最具实用性的方案。
37.OA ,办公自动化、CRM(Customer Relationship Management),即客户关系管理。SCM 供应链管理、ERP是Enterprise Resource Planning (企业资源计划)简称,ERP是针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的企业管理软件。
38.四种主要的开源Portal:Pluto、Liferay、eXo、Jetspeed
39.Portlet四种模式:View、edit、help、config
40.Velocity+Turbine能让Web应用程序真正按照MVC模式来开发。
41.OGSA(Open Grid Services Architecture)开往网格服务结构
42.JBPM:java businessprocessmanagement是一种基于J2EE、参考wfmc模型贵发难定义实现的轻量级工作流管理系统。
43.设计模式是不断发展和改进的设计方案的一种抽象,他反映了软件爱你设计人员为了提高软件重用性和灵活性而得到的一种设计结构
结构模式主要是针对系统或者应用程序的整体结构:架构模式指明的是系统级的结构属性,并且会对子系统的结构产生影响;而设计模式缺不会影响子系统的结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值