2010년 3월 25일 목요일

asp.net MSDTC(OraMTS) + Oracle 11g client + Windows 7

 

정말 MS와 Oracle의 궁합은 이리도 안 좋은 것인가....

 

현재 닷넷 관련 프로젝트를 진행 중인데

복 수개의 Oracle 서버 (Oracle 9I) 와 복 수개의 MS-SQL2008 서버에 접근해서

트랜젝션을 처리해야한다..

 

본 프로젝트에서 솔루션으로 생각한게

OracleClient 를 사용한 Managed Oracle Provider 1.1 을 사용하고

MSSQL과 Oracle 를 동시에 트랜젝션 처리를 하기위해서 MSDTC를

사용하게 되었다..

 

이것을 사용하기 위해서 Oracle MTS(Microsoft Transaction Service)를 사용하기로 했는데 정말 빌어먹을 DCOM의 트랜젝션에 MTS를 넣기가 엄청나게 힘든것이다..

 

우선 윈도우즈 버젼이 비스타나 Server2008 윈도우즈7 일 경우에는

서버 버전이 무엇이든 간에 오라클 클라이언트를 11g 를 깔아야합니다.

 

9i로 어떻게든 해볼려고 했었는데....  결론은 트랜젝션이 완벽하지 않게 된다..

-본 프로젝트는 TransactionScope 객체를 사용함-

 

일부 웹자료를 살펴보니 Enlist=false 옵션을 ConnectionString에 먹이면 된다고 하는데

다시 한 번 강조하지만 그렇게 되면 해당 커넥션이 트렌젝션에 참가하지 않게 되므로

사용자 Exception 이나 오류가 발생한 경우 rollback가 되지 않는다.

 

결국 찾다찾다 보니 진리의 msdn 님께서 비스타 이상에서는 oracle 11g Client 를 깔아서

MSDTC 설정을 잘하라는게 결론인데 이와 관련된 설정도 엄청나게 힘들었다...

 

첫번째 : 11g client 깔기

 

http://www.oracle.com/technology/software/products/database/oracle11g/111060_win32soft.html

 

두번째 : ODT for Visual Studiy 깔기

 

http://www.oracle.com/technology/software/tech/windows/odpnet/index.html

 

세번째 : 환경설정

ORACLE_HOME : oracle client home 경로 ex) D:\product\11.1.0\client_1

ORACLE_HOME 경로에 Network Service, IIUser 보안 권한주기

 

네번째 : DTC 설정

 

http://msdn.microsoft.com/ko-kr/library/aa561924(en-us,BTS.20).aspx

 

1.  Set the appropriate MSDTC Security Configuration options on Windows Server 2003 SP1, Windows XP SP2, Windows Server 2008, and Windows Vista

(기본 사용설정)

 

2. If Windows Firewall is running, add an exception for the MSDTC service

(방화벽해제)

 

그리고 2008 서버일경우 레지스트리에 권한 추가

http://piliusa.tistory.com/12?srchid=BR1http%3A%2F%2Fpiliusa.tistory.com%2F12

 

그리고 재부팅....

 

만약 그래도 안 될경우..

한글 기술 문서 링크 올립니다..

http://support.microsoft.com/kb/976963/ko

 

 

 

잘 되네요 유후~

2009년 11월 27일 금요일

struts2 관련 사이트

taglib reference

http://struts.apache.org/2.0.14/docs/tag-reference.html

 

strut2 tutorial

http://www.roseindia.net/struts/struts2/struts2uitags/index.shtml

 

2009년 11월 25일 수요일

The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 22 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

Stacktrace:
        org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
        org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
        org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
        org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        netville.servlet.filter.EncodingFilter.doFilter(EncodingFilter.java:53)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

 

 

톰켓6.0 내부($JAKARTA_HOME$/lib)에 자체적으로 servlet-api.jar과 jsp-api.jar를 포함하고 있다.

 

 

그런데 이클립스 프로젝트의 확장 jar 중에 위에 해당하는 jar가 있거나

WEB-INF/lib 폴더에 위 jar가 포함된경우 기존 jar와 충돌이 나면서 나는 에러이다

 

해결법은 간단하게 해당 jar(servlet-api.jar과 jsp-api.jar)를 lib폴더에서 삭제하고

이클립스에서는 해당 jar를 포함을 하되 배포시에 외부로 해당 jar를 배포 못하게 하면 된다.