2014年10月27日 星期一

Solr_10_JNDI連接

目前Solr 4.10 所使用的啟動Server 版本為 Jetty 8.1.10.v20130312,如果啟動Server不同JNDI設定方式也會不一樣。
  • 修改start.jar
    1. 到啟動 jetty 的資料夾,使用解壓縮軟體打開 start.jar 檔

    2. 將 org/eclipse/jetty/start/start.config 檔案,解壓到桌面

    3. 用文字編輯器打開start.config檔找到


      改成
    4. 請在default後面加入plus,修改完畢後,將start.config 檔案壓回 start.jar 檔內
  • 下載JETTY 8.0 資源
    1. 到eclipse 官網下載 jetty 8.0 所有jar檔 (solr 4.10 使用的jetty8 版本為 8.1.10.v20130312 )

    2. 解壓縮後到target/site/plugins/ 資料夾將以下的jar拉出來到 solrhome/lib 裡面
      1. org.eclipse.jetty.jndi_8.1.10.v20130312
      2. org.eclipse.jetty.plus_8.1.10.v20130312
    3. 並且修改jar檔的命名,格式跟lib資料夾內其它jar一樣即可,如果命名錯誤,start.config會讀不到。

  • 下載 mysql-connector-java-5.1.27.jar
    • 請放到solrhome/lib/ext 資料夾內

  • 編輯 solrhome/contexts/solr-jetty-context.xml 檔案
    1. 開啟檔案後請在最後面加入JNDI的設定
      <?xml version="1.0"?>
      <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
      <Configure class="org.eclipse.jetty.webapp.WebAppContext">
        <Set name="contextPath"><SystemProperty name="hostContext" default="/solr"/></Set>
        <Set name="war"><SystemProperty name="jetty.home"/>/webapps/solr.war</Set>
        <Set name="defaultsDescriptor"><SystemProperty name="jetty.home"/>/etc/webdefault.xml</Set>
        <Set name="tempDirectory"><Property name="jetty.home" default="."/>/solr-webapp</Set>
        <!-- 下方新增 Jndi resource -->
        <New id="fusion_db" class="org.eclipse.jetty.plus.jndi.Resource">
            <Arg>java:comp/env/jdbc/fusion</Arg>
            <Arg>
              <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
               <Set name="Url">jdbc:mysql://localhost:3306/fusion</Set>
               <Set name="User">root</Set>
               <Set name="Password">root</Set>
               <Set name="tinyInt1isBit">false</Set>
              </New>
            </Arg>
        </New>     
      </Configure>

  • 修改 solr core dbconfig設定
    1. 請到要修改成使用jndi讀取資料庫連結的核心conf資料內開啟db-xxx-config.xml檔案進行編輯

    2. 原本的dataSource大致上應該是長這樣
          <dataSource type="JdbcDataSource" 
                      driver="com.mysql.jdbc.Driver" 
                      url="jdbc:mysql://localhost:3306/fusion" 
                      user="root" 
                      password="root"
                      tinyInt1isBit="false"/>
      修改成使用jndiName讀取
      <dataSource type="JdbcDataSource" jndiName="java:comp/env/jdbc/fusion" />

  • 以上修改完成後,請到主控台測試是否正常連結


  • 請注意 在solr-jetty-context.xml 及 db-xxx-config.xml 此兩個檔案所存放的JNDI名稱必需一模一樣 否則會出現以下錯誤
    Caused by: javax.naming.NameNotFoundException; remaining name 'env/jdbc/fusion' at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:505) at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:536) at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:551) at org.eclipse.jetty.jndi.java.javaRootURLContext.lookup(javaRootURLContext.java:117) at javax.naming.InitialContext.lookup(Unknown Source) at org.apache.solr.handler.dataimport.JdbcDataSource$1.getFromJndi(JdbcDataSource.java:211) at org.apache.solr.handler.dataimport.JdbcDataSource$1.call(JdbcDataSource.java:143) at org.apache.solr.handler.dataimport.JdbcDataSource$1.call(JdbcDataSource.java:133) at org.apache.solr.handler.dataimport.JdbcDataSource.getConnection(JdbcDataSource.java:402) at org.apache.solr.handler.dataimport.JdbcDataSource.access$200(JdbcDataSource.java:44) at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:270) ... 12 more
    

  • 如果設定檔設定錯誤或是打錯,基本上應該會出現Xml解析錯誤的錯誤訊息
參考資料

參考資料都無法設定成功,所以看看就好

沒有留言:

張貼留言