解析compass官方sample

本文详细记录了Compass 2.1版本的安装与部署过程,包括解决官方样例中存在的问题,如类库缺失、配置错误等,并分享了完整的部署环境配置。

http://exc听说compass很好很强大,对技术的支持广泛,尽管hibernate search和hibernate配合可谓珠联璧合,使用方便,但还是要感受感受compass的好。


    首先当然从compass的官方sample开始,版本:compass-2.1  compass的samle下有两个demo,一个是基于客户端的library,一个是基于web+database的petclinic.作为官方的 demo,竟然漏洞频频,简直太不严肃。


    先说library,在LibraryTests.java的第77行,竟然出现一句命名奇妙的
    SimpleDateFormat sdf = new SimpleDateFormat(Library.MetaData.Birthdate.Format);
    结果是找不到类,不管她,反正是个日期格式化问题,改成官方的写法:
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD");
    还好,只有一个问题,可以测试了。
 
    再说petclinic,要让它成功部署可要费点心思了。官方的samples/petclinic/下有个war,照理我们可以直接稍微配置个数据库连 接即可run起来。但是很sorry,不可以这样。不然你可以试试,只要你由耐心。所以,最好还是利用源程序重新编译发布。先介绍下我的部署环 境,spring2.5+hibernate3.2+mysql5.1+tomcat6.0+compass2.1,不同环境可能有所不同。先按如下步骤 来。


    1.新建个web项目,比如我的叫mystu,然后将samples/petclinic/src/java下所有东西copy到mystu的src下。 将samples/petclinic/src/test下所有copy到src下。将samples/petclinic/war下所有东西copy到 mystu的WebRoot下。将samples/petclinic/war/WEB-INF/classes下的四个资源文件copy到src下。


    2.修改一个微小的bug: org.compass.sample.petclinic下的AbstractClientTests.java有方法未定义。将所有的 hits.resource(0).get(Petclinic.MetaData.LastName.Name)改成 hits.resource(0).getValue(Petclinic.MetaData.LastName.Name)


    3.自己加类库。compass最让我诟病的应该是没有给出引用的library了。并且也没有任何readme或者document之类的说明。我通过 不断运行,出现excepion,然后将缺少的类手动一个个加进去,费劲了九牛二虎之力。才最终完善了需要的类库。下面列出需要使用的lib:

 

Java代码   收藏代码
  1. spring- 2.5 . 5 .jar  
  2. spring-webmvc.jar  
  3. hibernate3.jar  
  4. antlr-2.7 . 6 .jar  
  5. dom4j.jar  
  6. commons-logging.jar  
  7. log4j.jar  
  8. lucene-core-2.4 . 0 .jar  
  9. compass-2.1 . 1 .jar  
  10. jstl.jar  
  11. standard.jar  
  12. commons-collections-3.2 . 1 .jar  
  13. db-ojb-1.0 . 4 .jar  
  14. mysql-connector-java-5.0 . 3 -bin  
  15. jta.jar  
    spring-2.5.5.jar
    spring-webmvc.jar
    hibernate3.jar
    antlr-2.7.6.jar
    dom4j.jar
    commons-logging.jar
    log4j.jar
    lucene-core-2.4.0.jar
    compass-2.1.1.jar
    jstl.jar
    standard.jar
    commons-collections-3.2.1.jar
    db-ojb-1.0.4.jar
    mysql-connector-java-5.0.3-bin
    jta.jar

 这些library是必须的,否则运行分别会出现问题。最后,因为org.compass.sample.petclinic.ojb中的 PersistenceBrokerClinic引用了 org.springframework.orm.ojb.support.PersistenceBrokerDaoSupport包 spring2.5 的orm中已经不提供支持,详细见:http://forum.springframework.org/archive/index.php/t-30463.html (注:这里说到在model中由相关的包,但没有找到)所以,我直接将sample的ojb部门delete掉了。所以,此时db-ojb-2.0.4.jar可有可无。

 

 

 4.导入数据库:samples/petclinic/db/mysql有个initDB.txt,登陆mysql后,source initDB.txt创建数据库即可。并且,可以利用samples/petclinic/db下的populateDB.txt到入原始数据。

 


  5.然后,修改数据库连接了。WEB-INF/jdbc.properties.我使用的是mysql,故采用了mysql的连接配置。下面是去掉comments后的完整配置。

 

Java代码   收藏代码
  1. jdbc.driverClassName=com.mysql.jdbc.Driver  
  2. jdbc.url=jdbc:mysql://localhost:3306/petclinic   
  3. jdbc.username=name  
  4. jdbc.password=pass  
  5. hibernate.dialect=org.hibernate.dialect.MySQLDialect  
  6. petclinic.jdbcImplBeanName=mysqlClinic  
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/petclinic
jdbc.username=name
jdbc.password=pass
hibernate.dialect=org.hibernate.dialect.MySQLDialect
petclinic.jdbcImplBeanName=mysqlClinic

 

    6.好了,到了这里,可以启动tomcat发布了。可以成功运行起来了。运行起来后,我还碰到了 java.lang.NumberFormatException。或许我不能否认compass是一个好的开源产品,但至少,它的sample不是一个 好的sample。

 

 

Java代码   收藏代码
  1. 附:下面是我碰到的exception,下面列出的仅仅只是我想写这边blog然后保留下来的,其实刚开始还有,恕我不想还原现场了:  
  2. java.lang.ClassNotFoundException: javax.transaction.TransactionManager (缺少jta包)  
  3. java.io.FileNotFoundException: class  path resource [petclinic.hbm.xml] cannot be opened because it does not exist (没有将petclinic.hbm.xml放入src下)  
  4. java.lang.ClassNotFoundException: org.apache.commons.collections.SequencedHashMap(缺少commons-collections包)  
  5. org.compass.core.config.ConfigurationException: DTD system id [http://www.compass-project.org/dtd/compass-core-mapping-2.2.dtd] not found at [/org/compass/core/compass-core-mapping-2.2.dtd]   
  6. (这个算是我的错误,将新发布的compass2.2 中的compass配置文件放入了src下,我以为或许 2.2 中会改正这些问题呢,不过很遗憾,没有)  
  7. java.util.MissingResourceException: Can't find bundle for  base name views, locale zh_CN  
  8. (没有将资源文件放入src下。)  
  9. java.lang.ClassNotFoundException: antlr.ANTLRException  
  10. (缺少antlr.jar包)  
  11. java.lang.NumberFormatException: null (程序没有进行表单验证,太不敬业了)。  
    附:下面是我碰到的exception,下面列出的仅仅只是我想写这边blog然后保留下来的,其实刚开始还有,恕我不想还原现场了:
    java.lang.ClassNotFoundException: javax.transaction.TransactionManager (缺少jta包)
    java.io.FileNotFoundException: class path resource [petclinic.hbm.xml] cannot be opened because it does not exist (没有将petclinic.hbm.xml放入src下)
    java.lang.ClassNotFoundException: org.apache.commons.collections.SequencedHashMap(缺少commons-collections包)
    org.compass.core.config.ConfigurationException: DTD system id [http://www.compass-project.org/dtd/compass-core-mapping-2.2.dtd] not found at [/org/compass/core/compass-core-mapping-2.2.dtd]
    (这个算是我的错误,将新发布的compass2.2中的compass配置文件放入了src下,我以为或许2.2中会改正这些问题呢,不过很遗憾,没有)
    java.util.MissingResourceException: Can't find bundle for base name views, locale zh_CN
    (没有将资源文件放入src下。)
    java.lang.ClassNotFoundException: antlr.ANTLRException
    (缺少antlr.jar包)
    java.lang.NumberFormatException: null(程序没有进行表单验证,太不敬业了)。

 

   附件是可更改后的可运行版本,因为javaeye上传文件10m限制的原因,去掉了jar中的compass.jar. 如需运行,db下由数据库文件,建好数据库,再配置好jdbc连接即可。

 

  javaeye的chanson的博文http://chanson.javaeye.com/blog/204180 给了我很大的参考,在此表示感谢。

eljava.iteye.com/blog/324846

请详细介绍下面这段代码的功能Private Sub CREATE_TEST_SAMPLE_LIST_FILE() Dim Checking_user As Object Dim Found_reference_matricx_id As Variant Set Checking_user = CreateObject("WScript.Network") UserName = Checking_user.UserName MsgBox "Only transfer Data to empty LIMS order" Run "PREPARE_TEST_SAMPLE_LIST" Content = "" Test_sample_Content = "" reference_order = Trim(Worksheets("REFERENCE TEST ORDER").Range("A2")) row_no = 4 bom_Content = "" With Worksheets("SAMPLE MATRIX") ORDER_NO_INPUT = .Range("D1") Do Until .Cells(row_no, 2) = "" Set Found_reference_matricx_id = Worksheets("MATERIAL ID").Range("B:B").Find(What:=Trim(.Cells(row_no, 3)), LookAt:=xlWhole) If Not Found_reference_matricx_id Is Nothing Then Reference_matricx_id = Worksheets("MATERIAL ID").Range("A" & Found_reference_matricx_id.Row) If bom_Content = "" Then bom_Content = Trim(.Cells(row_no, 2)) & "||" & Reference_matricx_id & "||" & Trim(.Cells(row_no, 3)) & "||" & Trim(.Cells(row_no, 4)) & "||" & Trim(.Cells(row_no, 5)) & "||" & Trim(.Cells(row_no, 6)) Else bom_Content = bom_Content & vbCrLf & _ Trim(.Cells(row_no, 2)) & "||" & Reference_matricx_id & "||" & Trim(.Cells(row_no, 3)) & "||" & Trim(.Cells(row_no, 4)) & "||" & Trim(.Cells(row_no, 5)) & "||" & Trim(.Cells(row_no, 6)) End If End If row_no = row_no + 1 Loop col_no = 7 Do Until .Cells(1, col_no) = "" If method_id_list = "" Then method_id_list = Trim(.Cells(1, col_no)) Else method_id_list = method_id_list & vbCrLf & _ Trim(.Cells(1, col_no)) End If col_no = col_no + 1 Loop End With row_no = 2 Test_sample_Content = "" With Worksheets("TEST SAMPLE SUMMARY") Do Until .Cells(row_no, 1) = "" If Test_sample_Content = "" Then Temp_Test_sample_Content = Trim(.Cells(row_no, 1)) & "||" & Trim(.Cells(row_no, 3)) & "||" & Trim(.Cells(row_no, 4)) Temp_Test_sample_Content = Replace(Temp_Test_sample_Content, Chr(10), " ") Temp_Test_sample_Content = Replace(Temp_Test_sample_Content, vbCrLf, " ") Test_sample_Content = Temp_Test_sample_Content Else Temp_Test_sample_Content = Trim(.Cells(row_no, 1)) & "||" & Trim(.Cells(row_no, 3)) & "||" & Trim(.Cells(row_no, 4)) Temp_Test_sample_Content = Replace(Temp_Test_sample_Content, Chr(10), " ") Temp_Test_sample_Content = Replace(Temp_Test_sample_Content, vbCrLf, " ") Test_sample_Content = Test_sample_Content & vbCrLf & Temp_Test_sample_Content End If row_no = row_no + 1 Loop End With Content = vbCrLf & _ "<reference order>" & vbCrLf & _ reference_order & vbCrLf & _ "</reference order>" & vbCrLf & vbCrLf & _ "<method ids>" & vbCrLf & _ method_id_list & vbCrLf & _ "</method ids>" & vbCrLf & vbCrLf & _ "<bom Content>" & vbCrLf & _ bom_Content & vbCrLf & _ "</bom Content>" & vbCrLf & vbCrLf & _ "<Test sample Content>" & vbCrLf & _ Test_sample_Content & vbCrLf & _ "</Test sample Content>" & vbCrLf On Error GoTo errHandler Dim fsT, NEW_FILE_NAME, FILE_PATH As String ORDER_NO_INPUT = InputBox("Please input Compass service ID", "Tranfer : Only transfer Data to empty LIMS order", ORDER_NO_INPUT) If Trim(ORDER_NO_INPUT) = "" Then MsgBox "Cannot send empty request", vbExclamation Exit Sub ElseIf Len(Trim(ORDER_NO_INPUT)) < 8 Then MsgBox "Please inpute 8 digits Quotation no", vbExclamation Exit Sub End If NEW_FILE_NAME = "CREATE_TEST_SAMPLE_GC_VERSION-" & UserName & "-" & Trim(ORDER_NO_INPUT) & "-" & Format(Now, "DD-MM-YYYY_hhmmss") Content_Text = ORDER_NO_INPUT FILE_PATH = "L:\.Greater China\Softlines\10.LIMS\AutoBOM\Autorun Triggering\" & NEW_FILE_NAME & ".txt" 'Create Stream object Set fsT = CreateObject("ADODB.Stream") 'Specify stream type - we want To save text/string data. fsT.Type = 2 'Specify charset For the source text data. fsT.Charset = "utf-8" 'Open the stream And write binary data To the object fsT.Open fsT.WriteText Content 'Save binary data To disk fsT.SaveToFile FILE_PATH, 2 GoTo finish errHandler: MsgBox (Err.Description) Exit Sub finish: MsgBox "Request have been sent, please wait around 1 minute! " Return_file_path = "L:\.Greater China\Softlines\10.LIMS\AutoBOM\Autorun Triggering Feedback file\" & _ NEW_FILE_NAME & ".txt" loop_no = 0 Application.Wait (Now + TimeValue("0:00:05")) Do While (Len(Dir(Return_file_path)) > 0 Or loop_no <= 30) 'strFile = Dir If Len(Dir(Return_file_path)) > 0 Then MsgBox ("SUCCESS") Exit Do End If loop_no = loop_no + 1 If loop_no > 30 Then MsgBox "UNSUCCESS!" Exit Do End If Application.Wait (Now + TimeValue("0:00:05")) Loop 'MsgBox Content End Sub
11-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值