사용중인 포트의 프로세스 찾기
fuser -n tcp [port]

프로세스 강제 종료
kill -9 [pid] 

SpringMVC 어노테이션 Controller 에서 ModelAndView 를 이용하여 redirect 했을때 문제가 발생한 경우를 보았다.

문제 발생 상황은 Oracle varchar2(4000) 상황에서 약 2000바이트 문자열의 데이터를 쓰기 할때 쓰기를 정상적으로 완료 후 list 페이지로 redirect 하는 순간 브라우저 오류가 발생했다.(HTTP 에러가 아님)(forward는 정상)

또한, DB insert는 Exception 없이 정상 처리되었다. 

해결방법은 아래와 같았다.
setExposeModelAttributes 함수의 기능은 잘 이해되지 않는다..(HTTP 변수 노출여부 라는데..)


RedirectView rv = new RedirectView("list.do?param=1");
rv.setExposeModelAttributes(false);
return new ModelAndView(rv); 

[2011-06-12] 추가
Redirect 할 경우 Model의 값들이 URL에 Parameter값이 붙을경우 위와 같이 하면 Parameter 을 없앨수 있다. 

[참고] http://www.zeroturnaround.com/jrebel/ 




-javaagent:D:\apache-tomcat-5.5.20\common\lib\jrebel.jar -noverify


		int myNumber = 1234567;
		
		// 화폐단위로 변환
		String s = String.format("%,d원", myNumber);
		System.out.println("s: " + s);
		
		// 자리수 마추기
		s = String.format("%010d", 1234567);
		System.out.println("s: " + s);

<Service name="Catalina2">

    <Connector port="9091" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8444" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
    
    <Connector port="8010
               enableLookups="false" redirectPort="8444" protocol="AJP/1.3" />
    
    <Engine name="Catalina2" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

     
      <Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

<Context path="" reloadable="true" docBase="D:\WebHome\test2" workDir="D:\WebHome\test2\work" />

        

      </Host>

    </Engine>

  </Service>
개발 서버가 실수로 날라가서 다시 구축하게 됐다.

전에도 좀 삽질하면서 했던것 같은데 이번에도 몇시간을 삽질한것 같다.

우선 mysql은 필요 없지만 귀차니즘으로 인해 APMSetup 7 을 이용했다.

여기서 OCI8 설정 시 주의 할점은 Instant Client 를 Oracle에서 다운로드 받아 PATH에 등록하고 별 쇼를 했는데도 안되더이다.

그래서 Instant Client를 ORACLE_HOME으로 환경변수로 잡아주니 OCI8 설정이 정상적으로 됐으나 ORACLE 리스너가 정상적으로 실행되지 않았다.

결국 삽질중 Instant Client 폴더의 dll 파일을 C:\Windows\System32 폴더에 밀어넣고 하니 말끔히 된다..

와.. 이 허무한 삽질의 시간..

jQuery ui.sortable 기본 plugin 을 이용한 영역 드래그 앤 드롭 예제



Class Object를 이용하여 해당 Object 정보 얻기
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ClassInfo {

	public static void main(String[] args) {
		try {
			Class c = Class.forName("domain.VoClass");
			Method m [] = c.getDeclaredMethods();
			Field f [] = c.getDeclaredFields();
			
			System.out.println(f.length);
			for (int i = 0; i < f.length; i++)
				System.out.println(f[i].toString());
			
			System.out.println(m.length);
			for (int i = 0; i < m.length; i++)
				System.out.println(m[i].toString());
			
		} catch (Throwable e) {
			System.err.println(e);
		}
	}

}

[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


	String jdbcDriver = "cubrid.jdbc.driver.CUBRIDDriver";
	String jdbcURL 	  = "jdbc:cubrid:localhost:30000:testdb:dba::";
	String jdbcID  	  = "dba";
	String jdbcPWD 	  = "pwd";

	Class.forName(jdbcDriver);
	Connection c = DriverManager.getConnection(jdbcURL, jdbcID, jdbcPWD);

+ Recent posts