메뉴얼(http://wiki.apache.org/solr/DataImportHandler)이 있기는 하지만 직관적이지 않아 이리저리 검색도 해보고 문의해서 정리한다.
 
Window 7
Tomcat 5.5.35,
Apache Solr 3.5.0
Oracle 10g

톰켓 설치 경로
D:\apache-solr\tomcat

/conf/server.xml
<Connector port="8983" ..... URIEncoding="UTF-8" />
포트는 편하신것으로 하면 될듯하다.
Encoding 는 검색할때 Request 호출 시 한글 깨짐을 방지하기 위함이다.(해당 WAS에 따라서 또는 소스레벨에서 적절하게 하면 될듯하다.)

/bin/catalina.bat
set CATALINA_HOME=D:\apache-solr\tomcat
set JAVA_OPTS=%JAVA_OPTS% -Dsolr.solr.home=D:\apache-solr\solr ... 기존 옵션...

/common/lib/ojdbc14.jar 복사하자.(Oracle)

Solr 작동 소스 경로
D:\apache-solr\tomcat\webapps\solr
Apache-solr-3.5.0.zip 파일 하위 dist/apache-solr-3.5.0.war 파일을 solr.war 로 변경하여 복사한다.
Apache-solr-3.5.0.zip 파일 하위 dist/apache-solr-dataimporthandler-3.5.0.jar, apache-solr-dataimporthandler-extras-3.5.0.jar 두 파일을 WEB-INF/lib 하위에 복사한다.
(Solr 설정파일 colrconfig.xml <lib> 설정으로도 할 수 있지만 간편히 복사하자.

Solr 설정파일 경로
D:\apache-solr\solr 
Apache-solr-3.5.0.zip 파일 하위 example/solr 폴더를 복사한다.
/conf/solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">data-config.xml</str>
    </lst>
</requestHandler>
추가 하자 data-config.xml 파일은 같은경로에 두자.
/conf/data-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:test" user="test" password="test"/>

<document name="products">
        <entity name="item" query="SELECT ID, TITLE FROM TB_DATA">
<field name="id" column="ID" />
<field name="title" column="TITLE" />
        </entity>
    </document>
</dataConfig> 

한글형태소분석기는 http://cafe.naver.com/korlucene/462 를 참조하자.

이제 Tomcat 시작하고
http://localhost:8983/solr/dataimport?command=full-import 하면 인덱싱 된다.
http://localhost:8983/solr/admin 에서 *:* 모두 검색해보자.

 
 

[Server]

HelloWord.java
import java.util.HashMap;
import java.util.Map;

public class HelloWorld {

	public HelloWorld() {
	}

	public String getHelloWorld(String name, int value) {
		return "Hello World to " + name + "(" + value + ")";
	}
	
	public Map getHashMap(String name, String value) {
		Map map = new HashMap();
		map.put("string", name);
		map.put("int", value); 
		return map;
	}
}


두 인터페이스 함수를 만들고 HelloWord.java 파일을 HelloWord.jws 로 파일을 변경한다.


[Client]

ClientTest.java
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class ClientTest {

	public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
		Service service = new Service();
		Call call = (Call)service.createCall();
		call.setTargetEndpointAddress(new URL("http://localhost:8081/TEST_AXIS/HelloWorld.jws"));
		call.setOperationName(new QName("http://soapinterop.org/", "getHelloWorld"));
		String returnValue = (String)call.invoke(new Object[]{"String Test", 1});
		System.out.println(returnValue);
		
		call.setOperationName(new QName("http://soapinterop.org/", "getHashMap"));
		Map returnMap = (Map)call.invoke(new Object[]{"test1", "test1"});
		System.out.println(returnMap);
	}

}


아래와 같이 테스트도 가능
http://localhost:8081/TEST_AXIS/HelloWorld.jws?method=getHelloWorld&name=2342352345&value=1
http://localhost:8081/TEST_AXIS/HelloWorld.jws?method=getHashMap&name=2342352345&value=1


[Server Auth]
AuthTest.java
public class AuthTest {
	public String getString(String value){
		return "auth test: " + value;
	}
}


[Client Auth]
ClientAuthTest.java
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;


public class ClientAuthTest {

	public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
		Service service = new Service();
		Call call = (Call)service.createCall();
		call.setTargetEndpointAddress(new URL("http://localhost:8081/TEST_AXIS/auth/AuthTest.jws"));
		
		call.setUsername("wsuser");
		call.setPassword("wspwd");
		
		call.setOperationName(new QName("http://soapinterop.org/", "getString"));
		String returnValue = (String)call.invoke(new Object[]{"String Test"});
		System.out.println(returnValue);
	}
}

tomcat-users.xml
// $TOMCAT_HOME/cont/tomcat-users.xml 추가



web.xml
// 해당 Context/web.xml 에 추가

	
		
			Protected
      		
      		/auth/*
		
   
		
			
			wsuser
		
	

	
	
		BASIC
		Protected Web Services
	

패키지는 java 파일에서 지정하지 않고, jws 파일만 해당 디렉토리에 저장하여 접근한다.
예) http://localhost:8081/TEST_AXIS/auth/AuthTest.jws?method=getString&value=11

java 파일이 없거나 jar일 경우, 즉 class 만 있을 경우 jws 방법을 이용할 수 없다.
그럴 경우 wsdl 을 생성하는 방법으로 해결 한다.
굳이 jws 방법으로 해야 한다면 해당 jar 및 class 를 사용하는 interface java를 생성하여 처리하면 되겠다.

참고자료
http://www.ibm.com/developerworks/kr/library/ws-sec1.html
http://cafe251.daum.net/_c21_/bbs_search_read?grpid=19VVx&fldid=Ki0S&contentval=00008zzzzzzzzzzzzzzzzzzzzzzzzz&nenc=rZc2_1ntyEMM3NSIvBc.2w00&dataid=8&fenc=w5lwmbf1XmU0&docid=CDb9MIhS

    
    
        
            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m  (%F:%L) \n"/>
        
    
	
	
		
		
			<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m  (%F:%L) \n" />
		
	
	
	
		
		
			<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m  (%F:%L) \n" />
		
	
	
	
        <priority value="debug" />
		<appender-ref ref="FILE_USER" />
    
    
    
         <priority value="debug" />
		 <appender-ref ref="FILE_DB" />
    
    
        <priority value ="error" />
        <appender-ref ref="STDOUT" />
    
    

+ Recent posts