基于JavaLuncene的compass框架说明使用技术文档
compass使用手册
2D变曲率图
3D变曲率图
3D变曲率图把非连续性分成高/低边(由于井斜误差引起)和左边/右边(由于方位误差引起).
3
可产生测斜和设计绘图比较分析。例如,你可以绘制MD和井斜、方位的关系。多图叠加可以比较同一井眼内不同的测斜,或绘制设计与钻进的关系。
4.
5.选择测深与方位的关系
你可以指定测深与方位的关系为第一张图。
指定垂深与狗腿的关系为第二张图,但这都不是事先约定的,用户可以自定义。
6.选择测深与方位的关系.
7.
8.单击Y轴选定Dogleg Severity.
9.单击
绘制组合测斜图形
1.选择测斜
2.选择附加测斜
3.
输入靶点
1.选择Edit
2.选择Site
确认的井眼轨迹应该是测斜或测斜的组合,可准确地描述井眼轨迹的形状。
如果你想追加测斜到确认的井眼轨迹,程序会问你是否要保存这个测斜到确认的井眼轨迹。此外,你可使用测斜历史编辑器随时改变确认轨迹的组合。
例如原始井眼可能由MWD工具进行测量。一旦下完套管,陀螺可能重新测量同一井段,MWD再测量下一井段,最后再用陀螺重新测量。
在井眼的轨迹是一个原始的地面井口或是侧钻.
例如,如果一口井有一个原井和两个侧钻,那么这口井就有三个井眼轨迹.
井眼轨迹剖面允许你以文件保存它们相应的测斜和设计.
参考确认的轨迹.
井眼轨迹设置
确认的井眼轨迹
井眼轨迹包含几种测斜。当进行防碰扫描,计算并不对应单个测斜,而是对应于确认的井
眼轨迹。所以当有高精度的测斜数据,及时更新确认的井眼轨迹是重要的。
称作主体设计(在设计设置屏幕的选择项中有一个主体设计标注).
J2EE项目实训 Spring框架技术——第12章 Spring框架提供的各种实用组件(第1部分)
第12章Spring框架提供的各种实用组件(第1/2部分)Spring框架不仅从大的方面为应用系统的开发者提供了七大组件技术,这主要是指核心容器(Spring Core)、Spring 上下文(Spring Context)、Spring 的面向方面的编程(Spring AOP)、Spring JDBC DAO 抽象层(Spring DAO)、Spring ORM 的对象关系工具(Spring ORM)、Spring Web 模块(Spring Web)和Spring MVC 框架(Spring Web MVC)等;而且也小到为开发者提供本章将要介绍的各个实用的组件。
真是可谓用心良苦!因为,这些实用的组件也是企业应用系统开发中经常需要实现的功能。
而以往是开发者重复地编程实现这些通用的功能程序,Spring框架的设计者本着彻底地简化J2EE平台中的技术实现和避免重复编程实现一些通用功能的程序,提供了下面的这些实用的组件。
本章将介绍这些实用组件的具体应用,这主要包括定时任务计划调度功能、“Open Session in View”模式的实现、ApplicationContext的事件技术实现、邮件抽象实现邮件发送功能的实现等方面的内容。
1.1在Spring中实现定时任务计划调度1.1.1使用OpenSymphony Quartz 调度器1、在Web应用中实现任务计划调度(1)什么是任务计划调度读者可能都应用过Windows操作系统中的任务计划调度的功能实现定时启动某些特定的程序,如实时防病毒程序、防火墙程序等;同时也可能编程过时钟报警、系统自动关机等方面的一些实用功能的小程序等,哪如何能够在B/S 模式的Web应用系统中实现类似的任务计划调度功能呢?而任务计划调度是企业应用系统中比较常见的功能需求,应用系统的开发者希望应用系统能够在指定的时间、并且能够以指定的时间间隔执行各类应用功能的操作,并完成一些无需用户输入干预的实用任务。
COMPASS使用说明
CENTER HEIGHT FOR INTACT STABILITY) 可用于按照中华人民共和国《船舶与海上设施法定检验规则》国际航行海船法定
检验技术规则(1999)中IMO A749(18)号决议和非国际航行海船法定检验技术规则(1999) 两部分中完整稳性要求,计算船舶完整稳性许用重心高度曲线,适用于各种类型船 舶。
装载工况通常由若干个部分装载工况组成之所以这样是因为几个装载工况经常包含一些相同的载荷组合如储藏物食品人员燃油淡水等为避免重复输入这些载荷将它们用分组的方法形成一系列部分装载工况同样部分装载工况中也常常包含一些相同的载荷数据如载荷标识重量分布范围等所以又将这些载荷分为舱室载荷及附加载荷综合以上分析可得出如下几点
PDF 文件使用 "pdfFactory Pro" 试用版本创建
SRH10 - 船舶几何形体输入、邦金曲线计算(INPUT OF GEOMETRY) (Ver 0201)
1. 概要 SRH10可用于输入修改船体的几何数据,并计算其邦金曲线,是静水力计算 (SRH11)、横交曲线计算(SRH12)、装载计算(SRH14)、散装谷物稳性计算(SRH15)、 完整稳性许用重心高度计算(SRH18)、可浸长度计算(SRH20)、客船破舱稳性等效规 则计算(SRH21)、确定性破舱稳性计算(SRH22)、概率法破舱稳性计算(SRH23)、破舱 稳性许用重心高度计算(SRH24)、舱容及液体倾侧矩计算(SRH30)、测深表计算 (SRH32)等稳性及其辅助计算软件的前处理软件。 本程序适用于单体,对称及非对称双体、双尾、隧道型等各种类型的船舶。
3.1.3 肋骨表(Frame Table Data) 用户在此可逐项输入或修改下述内容: 肋骨号自船尾向船首是增加或减少的(Form Aft to Forward Frame Nos),在此 用户可用鼠标点击的方式在增加(Increase)或减少(Decrease)项上进行选择。基准 肋骨号(Frame No), 通常可选用0号肋骨,用户需注意基准肋骨(Reference Frame)通常是用于整个肋骨表的纵向定位,其肋骨号应至少不大于肋距首次发生变 化处的肋骨号; 基准肋骨的纵向位置(Long Position); 在此以后的各项肋骨表数据输入时,只有在第一行,即基准肋骨号处需输入该 肋骨号后的肋矩(Spacing Aft)及其前的肋距(Spacing Forward),以后只需顺序输 入肋距改变处的肋骨号及其前的肋距便可,在此用户还可运用Insert或Delete键进 行插入或删除操作。
compass操作指南
定向井设计暨compass操作指南一、定向井设计需要的基本数据1、单井(1) 所钻井井口的大地坐标,靶点的大地坐标并给出相应的经纬度,以及定向井的靶区描述(如定向井靶点半径,水平井等)。
(2) 井身结构及套管程序(给定垂深),以及所用套管的型号和单位重量。
(3)若下抽油泵,请给定垂深和该垂深下的前后井段。
(4) 该井所在地区的详细地质资料(包括地质分层,岩性及风险提示等)。
(5) 该井分段所用的泥浆比重,塑性粘度,切力,屈服值等。
(6) 钻机的游动系统重量,以及泥浆泵型号及功率和提供的工作排量。
(7) 可提供的钻杆和加重钻杆钢级、公称尺寸,震击器型号,钻头类型等等。
(8) 给定工程设计标准及特殊要求。
(9) 该区域内已钻井的定向井资料。
2、丛式井(1) 平台的槽口分布,槽口间距,平台结构北角,该平台的中心坐标(大地坐标)和经纬度,以及覆盖区内所有已钻井(包括探井)的井眼轨迹数据(井斜、方位等)。
(2) 丛式井的井口和靶点大地坐标及靶点垂深,定向井的靶区描述(如定向井靶点半径,水平井等),以及油底垂深和口袋长度等。
(3) 井身结构及套管程序(给定垂深),所用套管的型号和单位重量等。
.(4)若下抽油泵,请给定垂深和该垂深下的前后井段。
(5) 该井所在地区的详细地质资料(包括地质分层,岩性及风险提示等)。
(6) 该井分段所用的泥浆比重、塑性粘度、切力、屈服值等。
钻机的游动系统重量,以及泥浆泵型号及功率和提供的工作排量等。
(8)可提供的钻杆和加重钻杆钢级、公称尺寸,震击(7)器型号,钻头类型等等。
(9)该区域内已钻井的定向井资料。
(10)给定工程设计标准及特殊要求。
二、丛式井设计1.丛式井的概念丛式井是指一组定向井(水平井),它们的井口是集中在一个有限范围内,如海上钻井平台、沙漠中钻井平台、人工岛等。
丛式井的广泛应用是由于它与钻单个定向井相比较,大大减少钻井成本,并能满足油田的整体开发要求。
2.丛式井设计应考虑的问题(1).井身剖面在满足油田开发要求的前提下,尽量选择最简单剖面,如典型的“直一增一稳”三段制,这样将减少钻井工序,降低摩阻,减少钻井时复杂情况和事故发生的可能性。
SAAS 应用程序实例(JAVA版)
LDAP 本质上就是一个数据库。但它趋向于包含更多描述性的、基于属性的信息。由于 LDAP 目录中的信息的读多于写,所以 LDAP 被设计为读最优化。最常见的例子就是电话 簿,它里面的每一人都附有地址和电话号码。 作为身份验证和授权源,LDAP 与关系数据库管理系统性相比有以下优点:
基于Compass框架的高级搜索系统的设计与实现
基于Compass框架的高级搜索系统的设计与实现陶镇威,周雨程(华南理工大学软件学院,广东 广州 510006)摘要:介绍了信息检索的基本过程和高级搜索的概念。
探讨了如何在全文检索的基础上实现更个性化的高级搜索,并且利用Lucene技术和Compass框架设计实现了一个高级搜索系统,为如何在Java应用程序中加入高级搜索功能提供了参考。
关键词:搜索引擎;Lucene;Compass;高级搜索中图分类号:TP391Design and Implementation of Advanced Search System based on the CompassFrameworkTAO Zhen-wei, ZHOU Yu-cheng(School of Software, South China University of Technology, Guangdong 510006, China)Abstract:This paper introduces the processing of information searching and gives the concept of advanced search. It also approaches how to design an advanced search system. Finally, an advanced search system based on Lucene technology and compass framewok is designed and developed to provide references for simplifying integration of search into any Java application.Key words: search engine, Lucene, Compass, advanced search随着Internet技术的快速发展,互联网的信息量剧增,人们从这些海量的数据中获取到自己感兴趣的信息的难度正逐渐增大。
基于JavaLuncene的compass框架说明使用技术文档
Compass技术文档目录一、原理描述:.....................................................................................................二、术语解释:.....................................................................................................三、下载地址:.....................................................................................................四、使用流程: …………………………………………………………………………………….五、基于SSH的compass的实例: …………………………………………………………………一、原理描述:Compass是一流的开放源码JAVA搜索引擎框架,对于你的应用修饰,搜索引擎语义更具有能力。
依靠顶级的Lucene搜索引擎,Compass 结合了,像Hibernate和Spring的流行的框架,为你的应用提供了从数据模型和数据源同步改变的搜索力.并且添加了2方面的特征,事物管理和快速更新优化.Compass的目标是:把java应用简单集成到搜索引擎中.编码更少,查找数据更便捷 .二、术语解释:三、下载地址:四、使用流程:五、基于SSH的compass的实例:step1在ssh2的基础上开发加入jar包(compass-2.1.2.jar compass-index-patch.jarlucene-analyzers-2.4.0.jar lucene-core-2.4.0.jar lucene-highlighter-2.4.0.jar paoding-analysis.jar)step2先来看下实体bean的编写Java代码1.package com.v512.example.model;2.import pass.annotations.*;3./**4. * Product entity.5. *6. * @author MyEclipse Persistence Tools7. */8.@Searchable9.public class Product implements java.io.Serializable {10.11. // Fields12.13.@SearchableId14. private String id;15.@SearchableProperty(name="name",index=Index.ANALYZED,store=Store.YES)16. private String name;17.@SearchableProperty(name="price",index=Index.NOT_ANALYZED,store=Store.YES)18. private Double price;19.@SearchableProperty(name="brand",index=Index.ANALYZED,store=Store.YES)20. private String brand;21.@SearchableProperty(name="description",index=Index.ANALYZED,store=Store.YES)22. private String description;23.24. // Constructors25.26. /** default constructor */27. public Product() {28. }29.30. /** full constructor */31. public Product(String name, Double price, String brand, String description) {32. = name;33. this.price = price;34. this.brand = brand;35. this.description = description;36. }37.38. // Property accessors39.40. public String getId() {41. return this.id;42. }43.44. public void setId(String id) {45. this.id = id;46. }47.48. public String getName() {49. return ;50. }51.52. public void setName(String name) {53. = name;54. }55.56. public Double getPrice() {57. return this.price;58. }59.60. public void setPrice(Double price) {61. this.price = price;62. }63.64. public String getBrand() {65. return this.brand;66. }67.68. public void setBrand(String brand) {69. this.brand = brand;70. }71.72. public String getDescription() {73. return this.description;74. }75.76. public void setDescription(String description) {77. this.description = description;78. }79.80.}step3属性文件Product.hbm.xmlJava代码1.<?xml version="1.0" encoding="utf-8"?>2.<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"3."/hibernate-mapping-3.0.dtd">4.<!--5. Mapping file autogenerated by MyEclipse Persistence Tools6.-->7.<hibernate-mapping>8. <class name="com.v512.example.model.Product" table="PRODUCT" >9. <id name="id" type="ng.String">10. <column name="ID" length="40" />11. <generator class="uuid.hex" />12. </id>13. <property name="name" type="ng.String">14. <column name="NAME" length="80" />15. </property>16. <property name="price" type="ng.Double">17. <column name="PRICE" precision="6" />18. </property>19. <property name="brand" type="ng.String">20. <column name="BRAND" length="40" />21. </property>22. <property name="description" type="ng.String">23. <column name="DESCRIPTION" length="2000" />24. </property>25. </class>26.</hibernate-mapping>要使用Compass必须加入一个applicationContext-compass.xml文件,文件名可以自行定义这个就不用说了废话step4applicationContext-compass.xml:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.3.<beans xmlns="/schema/beans"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation=" /schema/beans /schema/beans/sp ring-beans-2.5.xsd"6. default-lazy-init="true">7.8. <!-- 配置compass的注解功能 -->9. <bean id="annotationConfiguration"10. class="passAnnotationsConfiguration">11. </bean>12.13.14. <bean id="compass" class="pass.spring.LocalCompassBean">15. <!-- 配置需要索引的实体映射文件的路径 -->16. <property name="resourceDirectoryLocations">17. <list>18. <value>classpath:com/v512/example/model</value>19. </list>20. </property>21. <!-- 设置存放索引的路径 -->22. <property name="connection">23. <value>/lucene/indexes</value>24. </property>25.26. <!--配置要搜索的类,作用:会根据以下的类建立索引 -->27. <property name="classMappings">28. <list>29. <value>com.v512.example.model.Product</value>30. </list>31. </property>32. <property name="compassConfiguration"33. ref="annotationConfiguration" />34.35. <!--compass的一些属性设置 -->36. <property name="compassSettings">37. <props>38. <prop key="compass.transaction.factory">39. pass.spring.transaction.SpringSyncTransactionFactory40. </prop>41. <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyze r </prop>42. </props>43. </property>44. <!--compass的事务管理器 -->45. <property name="transactionManager" ref="transactionManager" />46. </bean>47.48.49. <bean id="hibernateGpsDevice"50. class="pass.gps.device.hibernate.HibernateGpsDevice">51. <property name="name">52. <value>hibernateDevice</value>53. </property>54. <property name="sessionFactory" ref="sessionFactory" />55. <property name="mirrorDataChanges">56. <value>true</value>57. </property>59. <!-- 同步更新索引 -->60. <bean id="compassGps" class="pass.gps.impl.SingleCompassGps"61. init-method="start" destroy-method="stop">62. <property name="compass" ref="compass" />63. <property name="gpsDevices">64. <list>65. <bean66. class="pass.spring.device.SpringSyncTransactionGpsDeviceWrapper">67. <property name="gpsDevice" ref="hibernateGpsDevice" />68. </bean>69. </list>70. </property>71. </bean>72.73.74. <bean id="compassTemplate"75. class="passTemplate">76. <property name="compass" ref="compass" />78.79. <!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->80. <bean id="compassIndexBuilder"81. class="passIndexBuilder"82. lazy-init="false">83. <property name="compassGps" ref="compassGps" />84. <property name="buildIndex" value="true" />85. <property name="lazyTime" value="10" />86. </bean>87.88.89.90.</beans>中间都有注解就不多解释了下面来编写dao及dao的实现以及severce层step5Java代码1.package com.v512.example.dao;2.3.import java.util.List;4.5.import com.v512.example.model.Product;6.7.public interface ProductDao {8. public void create(Product p);9. public Product getProduct(String id);10. public List getProducts();11. public void update(Product product);12. public void remove(String id);13.14.}Java代码1.package com.v512.example.dao.hibernate;2.3.import java.util.List;4.5.import com.v512.example.dao.ProductDao;6.import com.v512.example.model.Product;7.import org.springframework.orm.hibernate3.support.HibernateDaoSupport;8.public class ProductDaoHibernate extends HibernateDaoSupport implements ProductDao {9.10. public void create(Product p) {11. getHibernateTemplate().save(p);12.13. }14.15. public Product getProduct(String id) {16. return (Product)getHibernateTemplate().get(Product.class,id);17. }18.19. public List getProducts() {20. return getHibernateTemplate().find("from Product orderby id desc");21. }22.23. public void remove(String id) {24. getHibernateTemplate().delete(getProduct(id));25.26. }27.28. public void update(Product product) {29. getHibernateTemplate().saveOrUpdate(product);30.31. }32.33.}serveceJava代码1.package com.v512.example.service;2.3.import java.util.List;4.5.import com.v512.example.model.Product;6.7.public interface ProductManager {8. public void insertProduct(Product p);9. public Product findProdcut(String id);10. public List searchProducts(String queryString);11.12.13.}servece的实现Java代码1.package com.v512.example.service.impl;2.3.import java.util.ArrayList;4.import java.util.List;5.6.import passHits;7.import passSession;8.import passTemplate;9.import passTransaction;10.11.import com.v512.example.dao.ProductDao;12.import com.v512.example.model.Product;13.import com.v512.example.service.ProductManager;14.import pass;15.public class ProductManagerImpl implements ProductManager{16. private ProductDao productDao;17. private CompassTemplate compassTemplate;18.19.20.21.22. public void setCompassTemplate(CompassTemplate compassTemplate){23. passTemplate=compassTemplate;24. }25.26. public void setProductDao(ProductDao productDao){27. this.productDao=productDao;28. }29.30. public Product findProdcut(String id) {31. return productDao.getProduct(id);32. }33.34. public void insertProduct(Product p) {35. productDao.create(p);36. }37.38. public List searchProducts(String queryString) {39. Compass compass = compassTemplate.getCompass();40. CompassSession session=compass.openSession();41. List list = new ArrayList();42. //这里不需要开启事务了,因为在调用这个方法之前就已经开启了事务43. CompassHits hits= session.queryBuilder().queryString("name:"+queryString).toQuery().hits();44. System.out.println("queryString:"+queryString);45. System.out.println("hits:"+hits.getLength());46. for(int i=0;i<hits.length();i++){47. Product hit=(Product)hits.data(i);48. list.add(hit);49. }50.51. return list;52. }53.54.55.56. public CompassTemplate getCompassTemplate() {57. return compassTemplate;58. }59.60.}所有的都做完了现在编写jsp页面step6insertProduct.jspJava代码1.<%@ page language="java" contentType="text/html; charset=UTF-8"2. pageEncoding="UTF-8"%>3.<%@ taglib prefix="s" uri="/struts-tags"%>4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">5.<html>6.<head>7.<meta http-equiv="Content-Type" content="text/html; charset=utf-8">8.<link href="style/oa.css" rel="stylesheet" type="text/css">9.10.<title>添加信息</title>11.</head>12.<body>13.<center>14. <s:form action="insert.action" theme="simple">15.16.<TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:300px;">17. <TBODY>18. <TR>19. <td align="center" class="tdEditTitle">添加商品名称</TD>20. </TR>21. <TR>22. <td>23.24.25.<table class="tableEdit" style="width:300px;" cellspacing="0" border="0" cellpadding="0">26. <tr>27. <td class="tdEditLabel" >商品名称</td>28. <td class="tdEditContent"><s:textfield name="product.name" label="名称" /></td>29. </tr>30.31. <tr>32. <td class="tdEditLabel" >商品品牌</td>33. <td class="tdEditContent"><s:textfield name="product.brand" label="品牌" /></td>34. </tr>35.36. <tr>37. <td class="tdEditLabel" >商品价格</td>38. <td class="tdEditContent"><s:textfield name="product.price" label="价格" /></td>39. </tr>40.41. <tr>42. <td class="tdEditLabel" >商品描述</td>43. <td class="tdEditContent"><s:textarea name="product.description" label="描述" />44. </td>45. </tr>46. <tr>47. <td> 48. </td>49. <td><s:submit/>50. <br></td>51. </tr>52.</table>53. </td>54. </TR>55. </TBODY>56.</TABLE>57.</s:form>58.</center>59.</body>60.</html>step7编写actionJava代码1.package com.v512.example.action;2.3.import java.util.List;4.5.import com.opensymphony.xwork2.ActionSupport;6.import com.v512.example.model.Product;7.import com.v512.example.service.ProductManager;8.import org.apache.struts2.ServletActionContext;9.10.public class ProductAction extends ActionSupport {11.12. private static final long serialVersionUID = 3795048906805728732L;13. private ProductManager productManager;14. private Product product;15. private String queryString;16.17. public void setQueryString(String queryString){18. this.queryString=queryString;19. }20.21. public Product getProduct() {22. return product;23. }24.25. public void setProduct(Product product) {26. this.product = product;27. }28.29. public void setProductManager(ProductManager productManager){30. this.productManager=productManager;31. }32.33. public String insert(){34. productManager.insertProduct(product);35. return SUCCESS;36. }37. public String search(){38. List results=productManager.searchProducts(queryString);39. System.out.println(results.size());40. ServletActionContext.getRequest().setAttribute("searchresults", results);41. return SUCCESS;42. }43.44.45.}step8关于Struts2的配置文件如下Java代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC3. "-//Apache Software Foundation//DTD Struts Configuration2.0//EN"4. "/dtds/struts-2.0.dtd">5.6.<struts>7. <constant name="struts.objectFactory" value="spring" /> 8.9. <include file="struts-default.xml"/>10.11. <package name="product" extends="struts-default"12. namespace="/product">13.14. <!-- 配置Struts2的Action,class值要与applicationContext*.xml中的id的值一致。
基于Java的Luncene的compass框架说明使用技术文档
Compass技术文档目录一、原理描述:.................................................................................................................................二、术语解释:.................................................................................................................................三、下载地址:.................................................................................................................................四、使用流程: …………………………………………………………………………………….五、基于SSH的compass的实例: …………………………………………………………………一、原理描述:Compass是一流的开放源码JAVA搜索引擎框架,对于你的应用修饰,搜索引擎语义更具有能力。
依靠顶级的Lucene搜索引擎,Compass 结合了,像Hibernate和Spring的流行的框架,为你的应用提供了从数据模型和数据源同步改变的搜索力.并且添加了2方面的特征,事物管理和快速更新优化.Compass的目标是:把java应用简单集成到搜索引擎中.编码更少,查找数据更便捷.二、术语解释:三、下载地址:四、使用流程:五、基于SSH的compass的实例:step1在ssh2的基础上开发加入jar包(compass-2.1.2.jar compass-index-patch.jarlucene-analyzers-2.4.0.jar lucene-core-2.4.0.jar lucene-highlighter-2.4.0.jar paoding-analysis.jar)step2先来看下实体bean的编写Java代码1.package com.v512.example.model;2.import pass.annotations.*;3./**4. * Product entity.5. *6. * @author MyEclipse Persistence Tools7. */8.@Searchable9.public class Product implements java.io.Serializable {10.11. // Fields13. @SearchableId14. private String id;15. @SearchableProperty(name="name",index=Index.ANALYZED,store=Store.YES)16. private String name;17. @SearchableProperty(name="price",index=Index.NOT_ANALYZED,store=Store.YES)18. private Double price;19. @SearchableProperty(name="brand",index=Index.ANALYZED,store=Store.YES)20. private String brand;21. @SearchableProperty(name="description",index=Index.ANALYZED,store=Store.YES)22. private String description;23.24. // Constructors25.26. /** default constructor */27. public Product() {28. }29.30. /** full constructor */31. public Product(String name, Double price, String brand, String description) {32. = name;33. this.price = price;34. this.brand = brand;35. this.description = description;36. }37.38. // Property accessors39.40. public String getId() {41. return this.id;42. }43.44. public void setId(String id) {45. this.id = id;46. }47.48. public String getName() {49. return ;50. }52. public void setName(String name) {53. = name;54. }55.56. public Double getPrice() {57. return this.price;58. }59.60. public void setPrice(Double price) {61. this.price = price;62. }63.64. public String getBrand() {65. return this.brand;66. }67.68. public void setBrand(String brand) {69. this.brand = brand;70. }71.72. public String getDescription() {73. return this.description;74. }75.76. public void setDescription(String description) {77. this.description = description;78. }79.80.}step3属性文件Product.hbm.xmlJava代码1.<?xml version="1.0" encoding="utf-8"?>2.<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"3."/hibernate-mapping-3.0.dtd">4.<!--5. Mapping file autogenerated by MyEclipse Persistence Tools6.-->7.<hibernate-mapping>8. <class name="com.v512.example.model.Product" table="PRODUCT" >9. <id name="id" type="ng.String">10. <column name="ID" length="40" />11. <generator class="uuid.hex" />12. </id>13. <property name="name" type="ng.String">14. <column name="NAME" length="80" />15. </property>16. <property name="price" type="ng.Double">17. <column name="PRICE" precision="6" />18. </property>19. <property name="brand" type="ng.String">20. <column name="BRAND" length="40" />21. </property>22. <property name="description" type="ng.String">23. <column name="DESCRIPTION" length="2000" />24. </property>25. </class>26.</hibernate-mapping>要使用Compass必须加入一个applicationContext-compass.xml文件,文件名可以自行定义这个就不用说了废话step4applicationContext-compass.xml:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.3.<beans xmlns="/schema/beans"4. xmlns:xsi="/2001/XMLSchema-instance"5. xsi:schemaLocation=" /schema/beans /schema/beans/spring-beans -2.5.xsd"6. default-lazy-init="true">7.8. <!-- 配置compass的注解功能 -->9. <bean id="annotationConfiguration"10. class="passAnnotationsConfiguration">11. </bean>12.13.14. <bean id="compass" class="pass.spring.LocalCompassBean">15. <!-- 配置需要索引的实体映射文件的路径 -->16. <property name="resourceDirectoryLocations">17. <list>18. <value>classpath:com/v512/example/model</value>19. </list>20. </property>21. <!-- 设置存放索引的路径 -->22. <property name="connection">23. <value>/lucene/indexes</value>24. </property>25.26. <!--配置要搜索的类,作用:会根据以下的类建立索引 -->27. <property name="classMappings">28. <list>29. <value>com.v512.example.model.Product</value>30. </list>31. </property>32. <property name="compassConfiguration"33. ref="annotationConfiguration" />34.35. <!--compass的一些属性设置 -->36. <property name="compassSettings">37. <props>38. <prop key="compass.transaction.factory">39. pass.spring.transaction.SpringSyncTransactionFactory40. </prop>41. <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer </prop>42. </props>43. </property>44. <!--compass的事务管理器 -->45. <property name="transactionManager" ref="transactionManager" />46. </bean>47.48.49. <bean id="hibernateGpsDevice"50. class="pass.gps.device.hibernate.HibernateGpsDevice">51. <property name="name">52. <value>hibernateDevice</value>53. </property>54. <property name="sessionFactory" ref="sessionFactory" />55. <property name="mirrorDataChanges">56. <value>true</value>57. </property>58. </bean>59. <!-- 同步更新索引 -->60. <bean id="compassGps" class="pass.gps.impl.SingleCompassGps"61. init-method="start" destroy-method="stop">62. <property name="compass" ref="compass" />63. <property name="gpsDevices">64. <list>65. <bean66. class="pass.spring.device.SpringSyncTransactionGpsDeviceWrapper">67. <property name="gpsDevice" ref="hibernateGpsDevice" />68. </bean>69. </list>70. </property>71. </bean>72.73.74. <bean id="compassTemplate"75. class="passTemplate">76. <property name="compass" ref="compass" />77. </bean>78.79. <!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->80. <bean id="compassIndexBuilder"81. class="passIndexBuilder"82. lazy-init="false">83. <property name="compassGps" ref="compassGps" />84. <property name="buildIndex" value="true" />85. <property name="lazyTime" value="10" />86. </bean>87.88.89.90.</beans>中间都有注解就不多解释了下面来编写dao及dao的实现以及severce层step5Java代码1.package com.v512.example.dao;2.3.import java.util.List;4.5.import com.v512.example.model.Product;6.7.public interface ProductDao {8. public void create(Product p);9. public Product getProduct(String id);10. public List getProducts();11. public void update(Product product);12. public void remove(String id);13.14.}Java代码1.package com.v512.example.dao.hibernate;2.3.import java.util.List;4.5.import com.v512.example.dao.ProductDao;6.import com.v512.example.model.Product;7.import org.springframework.orm.hibernate3.support.HibernateDaoSupport;8.public class ProductDaoHibernate extends HibernateDaoSupport implements ProductDao {9.10. public void create(Product p) {11. getHibernateTemplate().save(p);12.13. }14.15. public Product getProduct(String id) {16. return (Product)getHibernateTemplate().get(Product.class, id);17. }18.19. public List getProducts() {20. return getHibernateTemplate().find("from Product order by id desc");21. }22.23. public void remove(String id) {24. getHibernateTemplate().delete(getProduct(id));25.26. }27.28. public void update(Product product) {29. getHibernateTemplate().saveOrUpdate(product);30.31. }32.33.}serveceJava代码1.package com.v512.example.service;2.3.import java.util.List;4.5.import com.v512.example.model.Product;6.7.public interface ProductManager {8. public void insertProduct(Product p);9. public Product findProdcut(String id);10. public List searchProducts(String queryString);11.12.13.}servece的实现Java代码1.package com.v512.example.service.impl;2.3.import java.util.ArrayList;4.import java.util.List;5.6.import passHits;7.import passSession;8.import passTemplate;9.import passTransaction;10.11.import com.v512.example.dao.ProductDao;12.import com.v512.example.model.Product;13.import com.v512.example.service.ProductManager;14.import pass;15.public class ProductManagerImpl implements ProductManager {16. private ProductDao productDao;17. private CompassTemplate compassTemplate;18.19.20.21.22. public void setCompassTemplate(CompassTemplate compassTemplate){23. passTemplate=compassTemplate;24. }25.26. public void setProductDao(ProductDao productDao){27. this.productDao=productDao;28. }29.30. public Product findProdcut(String id) {31. return productDao.getProduct(id);32. }33.34. public void insertProduct(Product p) {35. productDao.create(p);36. }37.38. public List searchProducts(String queryString) {39. Compass compass = compassTemplate.getCompass();40. CompassSession session=compass.openSession();41. List list = new ArrayList();42. //这里不需要开启事务了,因为在调用这个方法之前就已经开启了事务43. CompassHits hits= session.queryBuilder().queryString("name:"+queryString).toQuery().hits();44. System.out.println("queryString:"+queryString);45. System.out.println("hits:"+hits.getLength());46. for(int i=0;i<hits.length();i++){47. Product hit=(Product)hits.data(i);48. list.add(hit);49. }50.51. return list;52. }53.54.55.56. public CompassTemplate getCompassTemplate() {57. return compassTemplate;58. }59.60.}所有的都做完了现在编写jsp页面step6insertProduct.jspJava代码1.<%@ page language="java" contentType="text/html; charset=UTF-8"2. pageEncoding="UTF-8"%>3.<%@ taglib prefix="s" uri="/struts-tags"%>4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd">5.<html>6.<head>7.<meta http-equiv="Content-Type" content="text/html; charset=utf-8">8.<link href="style/oa.css" rel="stylesheet" type="text/css"> 9.10.<title>添加信息</title>11.</head>12.<body>13.<center>14. <s:form action="insert.action" theme="simple">15.16.<TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:300px;">17. <TBODY>18. <TR>19. <td align="center" class="tdEditTitle">添加商品名称</TD>20. </TR>21. <TR>22. <td>23.24.25.<table class="tableEdit" style="width:300px;" cellspacing="0" border="0" cellpadding="0">26. <tr>27. <td class="tdEditLabel" >商品名称</td>28. <td class="tdEditContent"><s:textfield name="product.name" label="名称" /></td>29. </tr>30.31. <tr>32. <td class="tdEditLabel" >商品品牌</td>33. <td class="tdEditContent"><s:textfield name="product.brand" label="品牌" /></td>34. </tr>35.36. <tr>37. <td class="tdEditLabel" >商品价格</td>38. <td class="tdEditContent"><s:textfield name="product.price" label="价格" /></td>39. </tr>40.41. <tr>42. <td class="tdEditLabel" >商品描述</td>43. <td class="tdEditContent"><s:textarea name="product.description" label="描述" />44. </td>45. </tr>46. <tr>47. <td> 48. </td>49. <td><s:submit/>50. <br></td>51. </tr>52.</table>53. </td>54. </TR>55. </TBODY>56.</TABLE>57.</s:form>58.</center>59.</body>60.</html>step7编写actionJava代码1.package com.v512.example.action;2.3.import java.util.List;4.5.import com.opensymphony.xwork2.ActionSupport;6.import com.v512.example.model.Product;7.import com.v512.example.service.ProductManager;8.import org.apache.struts2.ServletActionContext;9.10.public class ProductAction extends ActionSupport {11.12. private static final long serialVersionUID = 3795048906805728732L;13. private ProductManager productManager;14. private Product product;15. private String queryString;16.17. public void setQueryString(String queryString){18. this.queryString=queryString;19. }20.21. public Product getProduct() {22. return product;23. }24.25. public void setProduct(Product product) {26. this.product = product;27. }28.29. public void setProductManager(ProductManager productManager){30. this.productManager=productManager;31. }32.33. public String insert(){34. productManager.insertProduct(product);35. return SUCCESS;36. }37. public String search(){38. List results=productManager.searchProducts(queryString);39. System.out.println(results.size());40. ServletActionContext.getRequest().setAttribute("searchresults", results);41. return SUCCESS;42. }43.44.45.}step8关于Struts2的配置文件如下Java代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"4. "/dtds/struts-2.0.dtd">5.6.<struts>7. <constant name="struts.objectFactory" value="spring" />8.9. <include file="struts-default.xml"/>10.11. <package name="product" extends="struts-default"12. namespace="/product">13.14. <!-- 配置Struts2的Action,class值要与applicationContext*.xml中的id的值一致。
java_gossip协议简单实现_概述及解释说明
java gossip协议简单实现概述及解释说明1. 引言1.1 概述本文旨在介绍Java Gossip协议的简单实现,通过对该协议的概述、原理、应用领域以及具体实现步骤进行解释,帮助读者了解和掌握该协议的基本知识。
Gossip协议是一种基于充分通信的分布式故障检测和修复机制,在现代分布式系统中具有重要的应用价值。
1.2 文章结构本文共分为五个主要部分。
引言部分即本章节,通过简要介绍Java Gossip协议的目标和文章结构来引入后续内容。
第二部分将详细介绍Gossip协议的概念、原理和应用领域。
第三部分将详细讲解实现Gossip协议所需的具体步骤,包括网络通信模块设计与实现、成员管理模块设计与实现以及故障检测和修复机制设计与实现。
第四部分将对Gossip协议的优缺点进行全面剖析,并进一步探讨适用场景。
最后一部分将给出总结和展望,总结研究成果并对未来发展前景进行展望,并提出对研究工作局限性和未来改进方向的思考。
1.3 目的本文旨在解释和阐述Java Gossip协议的实现过程和原理,希望读者通过阅读本文能够对Gossip协议有一个全面的了解,并在实际应用中能够借鉴相关思想和方法。
同时,通过对协议的优缺点以及适用场景的分析,从而评估其实际价值,并为后续相关研究工作提供参考。
最后,通过总结与展望部分,希望能激发更多人对这一领域的兴趣,并促进相关研究工作的进一步发展。
2. Java Gossip协议简介:2.1 Gossip协议概述Gossip协议是一种分布式系统中的通信协议,旨在解决节点之间信息交换和数据同步的问题。
它以节点之间相互传播信息的方式工作,类似于人与人之间传递八卦(gossip)。
每个节点通过随机选择其他几个节点进行数据交换,使得整个系统能够迅速而有效地将数据分发给所有节点。
2.2 Gossip协议原理Java Gossip协议基于基本的Gossip算法实现。
其基本原理是将整个系统的节点组织成一个无结构的对等网络,每个节点都与其他几个节点进行通信。
用Eclipse 和 Lomboz插件开发基于 Weblogic 的 EJB-JSP教程,Java技巧及代码
1、在eclipse首选项中设置java构建路径。
这一步很重要。
如果未能正确设置,lomboz 将不能正确生成package名,自动生成的代码会在编译时产生错误。
2、在eclipse首选项中设置lomboz使用的tools.jar。
tools.jar是由jdk提供,链接到jdk的相应的文件即可。
3、在eclipse首选项中设置lomboz支持的应用服务器选项。
lomboz内建支持jboss、tomcat、websphere、weblogic等多种主流应用服务器。
在例子中使用bea weblogic server v7.0作为应用服务器。
4、创建lomboz j2ee项目。
从菜单中选择新建项目,从新项目向导中选择lomboz j2ee project。
跟随向导进入最后一步。
将应用服务器加入项目,然后加入一个ejb module。
如果需要创建jsp、servlet等web程序,可以创建web module。
点击完成。
lomboz 自动创建了目录结构和配置文件,包括一个用于ant创建和部署的build.xml文件。
5、创建ejb类。
选择菜单:新建/其他。
在向导中选择lomboz ejb creation wizard。
输入包名、ejb名称和ejb类型后,点击完成按钮。
6、添加ejb中的业务方法。
在导航器视图中选择刚才创建的ejb类,从右键菜单中选择:lomboz j2ee…/add ejb method…,从中设置方法的声明和类型。
7、向ejb业务方法中添加代码。
public string sayhello(string yourname){system.out.println("hello "+yourname);return "hello "+yourname;}8、将ejb类添加到ejb module中。
在导航器视图中选择刚才创建的ejb类,从右键菜单中选择:lomboz j2ee…/add ejb to module…,在本项目的ejb module上打勾,并确定。
COMPASS5000基本操作手册-PK
COMPASS5000基本操作⼿册-PKCOMPASS 2000操作使⽤⼿册⽬录⽬录 (1)⼀.COMPASS概述 (7)1.COMPASS优点: (7)2.COMPASS主要具有三个主要的功能,同时还有⼀个功能强⼤的测绘⼯具。
(7)3.COMPASS系统还有如下功能: (8)4.COMPASS还拥有如下⼀些实⽤⼯具 (8)⼆.简要的操作指南 (9)1.To open a wellpath(打开井眼): (9)2.To view wellpath:(查看井眼) (9)3.Open another wellpath(打开其它井眼) (9)4.To Create a plan:(创建⼀个井的设计)[参看设计模块] (9)5.To edit a survey:(编辑测量)[参看测量模块] (9)6.To view a wellpath’s survey program:(查看井眼轨迹的测量组合) (10)7.Anticollision(防碰)[参看防碰模块] (10)四Compass数据结构 (10)4.1 working at the Company level (10)4.2 working at the project level (31)4.3 Working at the site level (35)4.4 Working at the Well Level (38)4.5 working at the Wellbore level (42)4.6 Working at Plan design level (42)4.7 concepts (44)五planning module (44)6.Template模板 (52)7.Targets 靶区 (64)五.Survey测量................................................................................................................... 错误!未定义书签。
JAVA LUCENE教程完整版
Java Lucene in Action(简体中文版)共10部分第一部分Lucene核心1.接触Lucene2.索引3.为程序添加搜索4.分析5.高极搜索技术6.扩展搜索第二部分Lucene应用7.分析常用文档格式8.工具和扩充9.Lucene其它版本10.案例学习[序章]Lucene开始是做为私有项目。
在1997年末,因为工作不稳定,我寻找自己的一些东西来卖。
Java是比较热门的编程语言,我需要一个理由来学习它。
我已经了解如何来编写搜索软件,所以我想我可以通过用Java写搜索软件来维持生计。
所以我写了Lucene。
几年以后,在2000年,我意识到我没有销售天赋。
我对谈判许可和合同没有任何兴趣,并且我也不想雇人开一家公司。
我喜欢做软件,而不是出售它。
所以我把Lucene放在SourceForge上,看看是不是开源能让我继续我想做的。
有些人马上开始使用Lucene。
大约一年后,在2001年,Apache提出要采纳Lucene。
Lucene邮件列表中的消息每天都稳定地增长。
也有人开始贡献代码,大多是围绕Lucene的边缘补充:我依然是仅有的理解它的核心的开发者。
尽管如些,Lucene开始成为真正的合作项目。
现在,2004年,Lucene有一群积极的深刻理解其核心的开发者。
我早已不再每天作开发,这个强有力的工作组在进行实质性的增加与改进。
这些年来,Lucene已经翻译成很多其它的语言包括C++、C#、Perl和Python。
在最开始的Java和其它这些语言中,Lucene的应用比我预想的要广泛地多。
它为不同的应用(如财富100公司讨论组、商业Bug跟踪、Microsoft提供的邮件搜索和100页面范围的Web搜索引擎)提供搜索动力。
在业内,我被介绍为“Lucene人”。
很多人告诉我他们在项目中使用到Lucene。
我依然认为我只听说了使用Lucene的程序的小部分。
如果我当初只是出售它,Lucene应用得不会这么广泛。
COMPASS使用指导书
27 CW...............:
第 5 页,共 10 页
浙江海洋学院
28 DISPL TOTAL SW...: 不同纵倾下的吃水 29 KMT..............: 不同纵倾下的横稳心垂向坐标(即 Zm) 30 LCB FWD OF RFP...: 不同纵倾下的浮心纵坐标 ¾ 不常用的参数 13 IT................ 对纵向中性轴(即 CL)的横向惯性矩 14 IL/1000..........: 对横向中性轴(即 CL)的纵向惯性矩(除以 1000) 17 TPM SW...........: 每厘米吃水吨数,t/m 18 VPDT.............: 每度纵倾排水体积增加量 22 WPA..............: 水线面面积 23 WETSURF..........:湿表面积
可以适当增加门槛高度。
第 7 页,共 10 页
浙江海洋学院
七 SRH30 舱容及液体倾侧矩计算
本模块可用于输入、修改船舶舱室几何数据,计算舱容及液体舱的液体倾侧矩,据此计 算船舶舱室的容积、型心位置及表面惯性矩等参量。
标识:同 SRH10; 单元体 ¾ 单元体标识符:由至多 5 个字符组成,输完后回车才出现特征数据。 ¾ 渗透率:可输入实际渗透率, 也可选择类别 ¾ 单元体尾端壁位置和首端壁位置可用肋位号输入 ¾ 单元体所在片体:单元体在左舷,这里最好选左片体,反之选右片体; ¾ 单元体所在舷侧 : 根据实际选取 ¾ 定义方式:
10 VCB ABOVE RFP....:浮心垂向坐标
11 KMT..............: 横稳心垂向坐标(即 Zm)
12 KML..............: 纵稳心垂向坐标
24 CB...............:
Composite模式在Java中的应用
Composite模式在Java中的应用Composite模式是一种结构型设计模式,在Java编程中被广泛使用。
其主要作用是将一组对象组合成树形结构,并可以像处理单个对象一样,处理整个组合结构。
在组合模式中,我们将具有相同接口或抽象类的一组对象组合成树形结构,形成一个部分-整体的关系。
其中,部分和整体都具有相同的行为,也就是说整个树形结构的每个节点都拥有相同的功能。
这种模式通过让客户端将单个对象和组合对象进行透明的处理,可以大大简化客户端的代码。
在Java中,Composite模式通常用于处理树形目录结构或者图形用户界面(GUI)中的窗口或面板。
下面我们将通过实际案例来深入了解Composite模式的应用。
案例一:树形目录结构假设我们要处理一个文件管理系统,其中包含文件夹和文件两种类型的节点,并且文件夹可能包含其他文件夹。
我们可以使用Composite模式来处理这种树形目录结构。
首先,我们定义一个抽象类Component,它有两个具体实现类:文件夹Folder和文件File。
文件夹Folder可以包含其他Component类型的节点,而文件File则不能包含其他节点。
```javapublic abstract class Component {protected String name;public Component(String name) { = name;}public abstract void operation();}public class Folder extends Component {private List<Component> childComponents;public Folder(String name) {super(name);childComponents = new ArrayList<>();}public void add(Component c) {childComponents.add(c);}public void remove(Component c) {childComponents.remove(c);}public Component getChild(int i) {return childComponents.get(i);}@Overridepublic void operation() {System.out.println("Folder " + name + " containing:"); for (Component c : childComponents) {c.operation();}}}public class File extends Component {public File(String name) {super(name);}@Overridepublic void operation() {System.out.println("File " + name);}}```其中,Folder类包含一个List类型的childComponents成员变量,表示它包含的其他节点。
5.7. Compass 使用手册
4
1.6 选择了DB,就在 (1)湖面上点击compass或
sbpchem
点 击 Daily Operation 就 可以。 然后就出现如下画面
sbpchem
开始Compass。 开始Compass并且背景为 白色。
5
在上一步开始了 Compass,就会出现如下的信息窗口。 psmp1 communication is not running. Do you want to start it?(yes/no) 输入‘yes’点击 Enter Key Compass就正式开始了 1.7. Enter COMPASS user : Enter Password : 上各输入 “SYSTEM” 就会转换成 COMPASS 基本窗口画面。
38
设定基准测量值及警报值
点击 点击
点击
39
监控倾向值曲线
1.设定限制指
点击
在Setup设定的值 PLOT 显示。
40
监控频率值曲线
Reference值设定: 测量基准震动值、定义时间及 测量 Resolution
设定报警值: 对比基准频谱 设定Alert及 Danger 值
41
画面编辑器
MVE(Machine View Editor)是在画面 上制作设备图的编辑器
1.8 开始Compass 的另一种方法
点击xterm就会出现右侧画面。
6
在上页的画面中
1.9
COMPASS Command Prompt 状态 (cdl:/usr/compass 21 >)下 为了执行COMPASS DatabaseTyping“compass sbpchem”。
pol communication is not running. Do you want to start it?(yes/no)
J2EE课程设计《技术应用指导》——第4章 Apache Commons典型组件及应用(第1部分)
第4章Apache Commons典型组件及应用(第1/7部分)软件工程学倡导开发人员在软件系统的设计、开发实现和测试工作中尽可能地重用现有的系统设计方案、功能实现代码和成熟的测试用例,以减少重复性的开发和实现工作。
基于此原则,在各种语言平台中都为该平台下的开发人员提供有功能丰富的API类库——在Java语言中主要是以J2SDK(Java2 Platform Standard Edition Development Kit)为典型代表,而且Sun公司对J2SDK系统库的版本还在不断地丰富和发展,完善Java技术体系。
在Apache开源社区中(),为了进一步地丰富和扩展、增强J2SDK 的系统库功能,并使得Java平台下的开发人员能够更简单、方便地完成应用系统的开发实现,提供了一套Apache Commons组件集,在该组件集中提供有大量的通用功能类。
读者在学习和掌握Java平台下的各种编程技术时,有必要熟悉和掌握Apache Commons 组件集内的各个典型和常用的功能类的编程及应用——这不仅可以减少读者在课程设计的项目开发中对通用功能逻辑的功能实现代码的重复开发工作量,也能够进一步地提高项目中的代码质量。
作者在本章中将为读者介绍Apache Commons典型组件及应用。
1.1Apache Commons组件中的核心组件尽管Sun公司通过J2SDK为Java平台下的开发人员提供了功能丰富的API类库,但由于要考虑到多种不同层次和不同应用需求的开发人员的需要,在API类库的设计和实现方面有点不尽人意——琐碎和繁杂。
在Apache Commons组件中则提供有一类核心组件——它们是对J2SDK中的核心API 类库中有关功能类的再包装和功能扩展、简化编程实现。
作者在下面的章节中将为读者重点介绍几个主要的和典型应用的核心组件的功能及编程应用的代码示例。
1.1.1Apache Commons通用组件库1、Apache Commons工具类组件集在Apache的开源社区的官方网站/上有一个实现应用系统开发中的通用功能的Commons项目——请见下图4.1所示的网站页面内容的截图。
J2EE Web核心技术《Web组件与框架开发技术》——第7 章 AOP拦截器组件技术及应用(第1部分)
第7 章AOP拦截器组件技术及应用(第1/4部分)面向切面编程AOP技术可以解决传统的面向对象编程OOP中不能够很好地解决的横切方面的问题,而Struts2框架中的拦截器组件是基于面向切面编程技术实现的,并达到AOP所倡导的分离“技术问题实现”和“业务问题实现”的设计效果。
为此,在Web 应用系统的开发实现中,可以将应用系统中的日志记录、安全验证和会话处理等功能通过拦截器组件技术实现。
从设计的角度来看拦截器组件技术,它其实是责任链模式的具体应用。
而且多个不同的拦截器组件可以按照某种逻辑相互串接在一起,形成拦截器链。
从代码重构的角度来看,拦截器组件链实际上是将一个复杂的应用系统,分而治之,从而使得每个部分的功能实现代码都具有高度的可重用性和可扩展性。
本章重点介绍Struts2框架中的拦截器组件的工作原理及拦截器组件链技术,拦截器组件技术在项目中的应用以及如何编程实现自定义拦截器组件、如何引用Struts2框架中的默认拦截器以及如何应用拦截器栈、全局拦截器等技术进一步简化系统中的配置文件。
最后也还要介绍如何应用方法过滤拦截器技术提高拦截器的灵活性。
1.1拦截器工作原理及拦截器组件链1.1.1Struts 2框架中的拦截器组件技术1、什么是拦截器组件熟悉Spring AOP技术的读者,对拦截器技术应该不陌生。
本书在第4章中介绍了Web 过滤器组件,过滤器组件其实也是一种拦截器,它拦截客户端浏览器的Http请求信息和服务器端返回给客户端浏览器的响应输出信息。
所谓的拦截器是动态拦截Action组件中的目标方法的调用对象,拦截器组件为开发人员提供了一种可扩展的机制,可以使开发者定义在一个Action组件中的目标方法执行前或者完成后执行所指定的目标代码。
当然,也可以在一个目标方法执行前阻止进一步对该方法的调用和执行。
2、什么是拦截器组件链如果将若干个不同的拦截器组件按照某种应用逻辑的要求相互串接在一起,从而产生出拦截器链(Interceptor Chain),在Struts2框架中也称为拦截器栈(Interceptor Stack)。
compass笔记(经典)
学习compass最好和hibernate对照着学,因为compass 和 hibernate有很多相似之处。
lucene 相当于 JDBC。
compass 就相当于 hibernate。
Lucene 中的文档(Document)相当于 JDBC中数据库的一个表(table)。
Lucene 中的 Filed 相当于表中的字段。
一个Document中有很多个Filed,一个表中也有多个字段。
使用hibernate的步骤和使用compass的步骤基本一致:使用hibernate时步骤一般为:1.建立实体类,也就是Entity,如Student,Teacher,这些实体类。
2.配置实体类到数据库的映射。
配置方法一般有两种:(1)使用xml。
如(Student.hbm.xml)(2)使用annotation 注解 @Entity ,@Id等Hiberante中要求每个实体都要有个标识(Id),compass中也这么要求。
3.使用hibernate的API操作实体Configuration cfg = new Configuration().configure(); //加载hibernate.cfg.xml文件SessionFactory sessionFactory = cfg.buildSessionFactory(); //全局唯一Session session = sessionFactory.openSession();session.beginTransaction(); //开启事务session.save(xxx);//保存session.delete(xxx);//删除session.get(xxx.class,id)//获得对象........//其他操作session.getTransaction().commit(); //提交事务session.close(); //关闭session而使用compass 和 hibernate的步骤几乎是一样的:1.建立实体类,如 Student,Teacher等实体类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Compass技术文档目录一、原理描述:................................................................二、术语解释:................................................................三、下载地址:................................................................四、使用流程: …………………………………………………………………………………….五、基于SSH的compass的实例: …………………………………………………………………一、原理描述:Compass是一流的开放源码JAVA搜索引擎框架,对于你的应用修饰,搜索引擎语义更具有能力。
依靠顶级的Lucene搜索引擎,Compass 结合了,像Hibernate和 Spring的流行的框架,为你的应用提供了从数据模型和数据源同步改变的搜索力.并且添加了2方面的特征,事物管理和快速更新优化.Compass的目标是:把java应用简单集成到搜索引擎中.编码更少,查找数据更便捷 .二、术语解释:三、下载地址:四、使用流程:五、基于SSH的compass的实例:step1在ssh2的基础上开发加入jar包(compass-2.1.2.jar compass-index-patch.jarlucene-analyzers-2.4.0.jar lucene-core-2.4.0.jar lucene-highlighter-2.4.0.jar paoding-analysis.jar)step2先来看下实体bean的编写Java代码1.package .v512.example.model;2.import pass.annotations.*;3./**4.* Product entity.5.*6.* author MyEclipse Persistence Tools7.*/8.Searchable9.public class Product implements java.io.Serializable {10.11. // Fields12.13. SearchableId14. private String id;15. SearchableProperty(name="name",index=Index.ANALYZED,store=Store.YES)16. private String name;17. SearchableProperty(name="price",index=Index.NOT_ANALYZED,store=Store.YES)18. private Double price;19. SearchableProperty(name="brand",index=Index.ANALYZED,store=Store.YES)20. private String brand;21. SearchableProperty(name="description",index=Index.ANALYZED,store=Store.YES)22. private String description;23.24. // Constructors25.26. /** default constructor */27. public Product() {28. }29.30. /** full constructor */31. public Product(String name, Double price, Stringbrand, String description) {32. = name;33. this.price = price;34. this.brand = brand;35. this.description = description;36. }37.38. // Property accessors39.40. public String getId() {41. return this.id;42. }43.44. public void setId(String id) {45. this.id = id;46. }47.48. public String getName() {49. return ;50. }51.52. public void setName(String name) {53. = name;54. }55.56. public Double getPrice() {57. return this.price;58. }59.60. public void setPrice(Double price) {61. this.price = price;62. }63.64. public String getBrand() {65. return this.brand;66. }67.68. public void setBrand(String brand) {69. this.brand = brand;70. }71.72. public String getDescription() {73. return this.description;74. }75.76. public void setDescription(String description) {77. this.description = description;78. }79.80.}step3属性文件Product.hbm.xmlJava代码1.<?xml version="1.0" encoding="utf-8"?>2.<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN"3."/hibernate-mapping-3.0.dtd">4.<!--5.Mapping file autogenerated by MyEclipse Persistence Tools6.-->7.<hibernate-mapping>8.<class name=".v512.example.model.Product" table="PRODUCT" >9.<id name="id" type="ng.String">10. <column name="ID" length="40" />11. <generator class="uuid.hex" />12. </id>13. <property name="name" type="ng.String">14. <column name="NAME" length="80" />15. </property>16. <property name="price" type="ng.Double">17. <column name="PRICE" precision="6" />18. </property>19. <property name="brand" type="ng.String">20. <column name="BRAND" length="40" />21. </property>22. <property name="description" type="ng.String">23. <column name="DESCRIPTION" length="2000" />24. </property>25. </class>26.</hibernate-mapping>要使用Compass必须加入一个applicationContext-compass.xml文件,文件名可以自行定义这个就不用说了废话step4applicationContext-compass.xml:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.3.<beans xmlns="/schema/beans"4.xmlns:xsi="/2001/XMLSchema-instance"5.xsi:schemaLocation=" /schema/beans/schema/beans/spring-beans-2.5.xsd" 6.default-lazy-init="true">7.8.<!-- 配置compass的注解功能-->9.<bean id="annotationConfiguration"10. class="passAnnotationsConfiguration">11. </bean>12.13.14. <bean id="compass" class="pass.spring.LocalCompassBean">15. <!-- 配置需要索引的实体映射文件的路径-->16. <property name="resourceDirectoryLocations">17. <list>18. <value>classpath:/v512/example/model</value>19. </list>20. </property>21. <!-- 设置存放索引的路径-->22. <property name="connection">23. <value>/lucene/indexes</value>24. </property>25.26. <!--配置要搜索的类,作用:会根据以下的类建立索引-->27. <property name="classMappings">28. <list>29. <value>.v512.example.model.Product</value>30. </list>31. </property>32. <property name="compassConfiguration"33. ref="annotationConfiguration" />34.35. <!--compass的一些属性设置-->36. <property name="compassSettings">37. <props>38. <prop key="compass.transaction.factory">39. pass.spring.transaction.SpringSyncTransactionFactory40. </prop>41. <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyz er.PaodingAnalyzer </prop>42. </props>43. </property>44. <!--compass的事务管理器-->45. <property name="transactionManager" ref="transactionManager" />46. </bean>47.48.49. <bean id="hibernateGpsDevice"50. class="pass.gps.device.hibernate.HibernateGpsDevice">51. <property name="name">52. <value>hibernateDevice</value>53. </property>54. <property name="sessionFactory" ref="sessionFactory" />55. <property name="mirrorDataChanges">56. <value>true</value>57. </property>58. </bean>59. <!-- 同步更新索引-->60. <bean id="compassGps" class="pass.gps.impl.SingleCompassGps"61. init-method="start" destroy-method="stop">62. <property name="compass" ref="compass" />63. <property name="gpsDevices">64. <list>65. <bean66. class="pass.spring.device.SpringSyncTransactionGpsDeviceWrapper">67. <property name="gpsDevice" ref="hibernateGpsDevice" />68. </bean>69. </list>70. </property>71. </bean>72.73.74. <bean id="compassTemplate"75. class="passTemplate">76. <property name="compass" ref="compass" />77. </bean>78.79. <!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引-->80. <bean id="compassIndexBuilder"81. class="passIndexBuilder"82. lazy-init="false">83. <property name="compassGps" ref="compassGps"/>84. <property name="buildIndex" value="true" />85. <property name="lazyTime" value="10" />86. </bean>87.88.89.90.</beans>中间都有注解就不多解释了下面来编写dao及dao的实现以及severce层step5Java代码1.package .v512.example.dao;2.3.import java.util.List;4.5.import .v512.example.model.Product;6.7.public interface ProductDao {8.public void create(Product p);9.public Product getProduct(String id);10. public List getProducts();11. public void update(Product product);12. public void remove(String id);13.14.}Java代码1.package .v512.example.dao.hibernate;2.3.import java.util.List;4.5.import .v512.example.dao.ProductDao;6.import .v512.example.model.Product;7.import org.springframework.orm.hibernate3.support.HibernateDaoSupport;8.public class ProductDaoHibernate extends HibernateDaoSupport implements ProductDao {9.10. public void create(Product p) {11. getHibernateTemplate().save(p);12.13. }14.15. public Product getProduct(String id) {16. return (Product)getHibernateTemplate().get(Product.class, id);17. }18.19. public List getProducts() {20. return getHibernateTemplate().find("from Product order by id desc");21. }22.23. public void remove(String id) {24. getHibernateTemplate().delete(getProduct(id));25.26. }27.28. public void update(Product product) {29. getHibernateTemplate().saveOrUpdate(product);30.31. }32.33.}serveceJava代码1.package .v512.example.service;2.3.import java.util.List;4.5.import .v512.example.model.Product;6.7.public interface ProductManager {8.public void insertProduct(Product p);9.public Product findProdcut(String id);10. public List searchProducts(String queryString);11.12.13.}servece的实现Java代码1.package .v512.example.service.impl;2.3.import java.util.ArrayList;4.import java.util.List;5.6.import passHits;7.import passSession;8.import passTemplate;9.import passTransaction;10.11.import .v512.example.dao.ProductDao;12.import .v512.example.model.Product;13.import .v512.example.service.ProductManager;14.import pass;15.public class ProductManagerImpl implements ProductManager{16. private ProductDao productDao;17. private CompassTemplate compassTemplate;18.19.20.21.22. public void setCompassTemplate(CompassTemplate compassTemplate){23. passTemplate=compassTemplate;24. }25.26. public void setProductDao(ProductDao productDao){27. this.productDao=productDao;28. }29.30. public Product findProdcut(String id) {31. return productDao.getProduct(id);32. }33.34. public void insertProduct(Product p) {35. productDao.create(p);36. }37.38. public List searchProducts(String queryString) {39. Compass compass = compassTemplate.getCompass();40. CompassSession session=compass.openSession();41. List list = new ArrayList();42. //这里不需要开启事务了,因为在调用这个方法之前就已经开启了事务43. CompassHits hits= session.queryBuilder().queryString("name:"+queryString).toQuery().hits();44. System.out.println("queryString:"+queryString);45. System.out.println("hits:"+hits.getLength());46. for(int i=0;i<hits.length();i++){47. Product hit=(Product)hits.data(i);48. list.add(hit);49. }50.51. return list;52. }53.54.55.56. public CompassTemplate getCompassTemplate() {57. return compassTemplate;58. }59.60.}所有的都做完了现在编写jsp页面step6insertProduct.jspJava代码1.<% page language="java" contentType="text/html; charset=UTF-8"2.pageEncoding="UTF-8"%>3.<% taglib prefix="s" uri="/struts-tags"%>4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">5.<html>6.<head>7.<meta http-equiv="Content-Type" content="text/html; charset=utf-8">8.<link href="style/oa.css" rel="stylesheet" type="text/css">9.10.<title>添加信息</title>11.</head>12.<body>13.<center>14. <s:form action="insert.action" theme="simple">15.16.<TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:300px;">17. <TBODY>18. <TR>19. <td align="center" class="tdEditTitle">添加商品名称</TD>20. </TR>21. <TR>22. <td>23.24.25.<table class="tableEdit" style="width:300px;" cellspacing="0" border="0" cellpadding="0">26. <tr>27. <td class="tdEditLabel" >商品名称</td>28. <td class="tdEditContent"><s:textfield name="" label="名称" /></td>29. </tr>30.31. <tr>32. <td class="tdEditLabel" >商品品牌</td>33. <td class="tdEditContent"><s:textfield name="product.brand" label="品牌" /></td>34. </tr>35.36. <tr>37. <td class="tdEditLabel" >商品价格</td>38. <td class="tdEditContent"><s:textfield name="product.price" label="价格" /></td>39. </tr>40.41. <tr>42. <td class="tdEditLabel" >商品描述</td>43. <td class="tdEditContent"><s:textarea name="product.description" label="描述" />44. </td>45. </tr>46. <tr>47. <td> 48. </td>49. <td><s:submit/>50. <br></td>51. </tr>52.</table>53. </td>54. </TR>55. </TBODY>56.</TABLE>57.</s:form>58.</center>59.</body>60.</html>step7编写actionJava代码1.package .v512.example.action;2.3.import java.util.List;4.5.import .opensymphony.xwork2.ActionSupport;6.import .v512.example.model.Product;7.import .v512.example.service.ProductManager;8.import org.apache.struts2.ServletActionContext;9.10.public class ProductAction extends ActionSupport {11.12. private static final long serialVersionUID = 32L;13. private ProductManager productManager;14. private Product product;15. private String queryString;16.17. public void setQueryString(String queryString){18. this.queryString=queryString;19. }20.21. public Product getProduct() {22. return product;23. }24.25. public void setProduct(Product product) {26. this.product = product;27. }28.29. public void setProductManager(ProductManager productManager){30. this.productManager=productManager;31. }32.33. public String insert(){34. productManager.insertProduct(product);35. return SUCCESS;36. }37. public String search(){38. List results=productManager.searchProducts(queryString);39. System.out.println(results.size());40. ServletActionContext.getRequest().setAttribute("searchresults", results);41. return SUCCESS;42. }43.44.45.}step8关于Struts2的配置文件如下Java代码1.<?xml version="1.0" encoding="UTF-8" ?>2.<!DOCTYPE struts PUBLIC3."-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"4."/dtds/struts-2.0.dtd">5.6.<struts>7.<constant name="struts.objectFactory" value="spring"/>8.9.<include file="struts-default.xml"/>10.11. <package name="product" extends="struts-default"12. namespace="/product">13.14. <!-- 配置Struts2的Action,class值要与applicationContext*.xml中的id的值一致。