반응형

WebLogic이 웹서버와 연결되어 있고 웹서버를 통해 JSP/Servlet에 대한 요청을 백엔드 WLS로 포워딩 하고 있다.

그런데 만약 파일 업로드 기능을 사용해서 WLS 서버로 파일을 저장할 경우 웹서버에서 그것을 보여주려면

WLS쪽에 File Download를 위한 Servlet을 짜야 할 것이다.

그런데 간단한 Tip으로 코딩 없이 설정으로도 해결할 수 있는데... 아래와 같이 WebApp을 하나 만들어 Deploy 하고

weblogic.xml에 다음과 같이 특정 디렉토리(여기서는 파일이 업로드되어 저장되는 디렉토리)를 virtual-directory-mapping으로 잡아 놓고

disable-implicit-servlet-mappings 설정을 통해 JSP 설정을 막아 놓으면 업로드 되는 파일들을 그냥 일반 static contents처럼 다운받을 수 있게 된다.


<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
    <wls:weblogic-version>12.1.1</wls:weblogic-version>
    <wls:context-root>mywebapp</wls:context-root>
    <wls:virtual-directory-mapping>
        <wls:local-path>/home/oracle/website</wls:local-path>
        <wls:url-pattern>/downloads/*</wls:url-pattern>
    </wls:virtual-directory-mapping>
    <wls:container-descriptor>
        <wls:index-directory-enabled>true</wls:index-directory-enabled>
        <wls:disable-implicit-servlet-mappings>true</wls:disable-implicit-servlet-mappings>
    </wls:container-descriptor>
</wls:weblogic-web-app>


JSP에 대한 실행이 막혔지만 그럼에도 불구하고 보안상 File Upload 프로그램을 작성할 때는 JSP와 같은 코드는 절대로 업로드하지 못하게 하는 것이 바람직 하다.


다음은 실행 결과이다.

Posted by Hey Jerry
,
반응형

WebLogic에서는 JMX 연결을 하려면 RMI/IIOP를 사용한다. (아래 블로그 참고)


http://blog.naver.com/javalove93/130031031944


그런데 Zabbix에서는 JMX 연결 시(Java Agent를 통해) 프로토콜을 지정할 수 없어 WebLogic JMX에 직접 접속할 수 없다.

Zabbix에 Zapcat이라는 다른 방식이 있는 것 같은데 이것은 Application 내에 JAR를 포함시켜야 하는 것으로 보여 역시 일반적으로 사용하기에는

쉽지 않아 보인다 (http://www.kjkoster.org/zapcat/How_To.html)


https://support.zabbix.com/browse/ZBXNEXT-1935


Java gateway server only support RMI protocol, but WebLogic doesn't support RMI. It's necessary to use IIOP protocol.
http://docs.oracle.com/cd/E13222_01/wls/docs90/jmx/accessWLS.html

Also, there is a difference in environment parameter of JMXConnectorFactory.connect method for WebLogic JMX

Current java gateway code:

env = new HashMap<String, String[]>();
env.put(JMXConnector.CREDENTIALS, new String[]

{username, password}

);

Sample code from WebLogic documentation:

Hashtable h = new Hashtable();
h.put(Context.SECURITY_PRINCIPAL, username);
h.put(Context.SECURITY_CREDENTIALS, password);
h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote");


결론적으로는 애매해 보이는데 Zabbix의 Java Gateway를 조금 수정해서 IIOP를 지원하게 하거나

WLS JMX 를 일반적인 RMI기반 JMX로 Wrapping할 수 있는 프로그램을 만들면 어떨까 하는 생각이다.


Posted by Hey Jerry
,
반응형

원문: https://www.zabbix.com/wiki/howto/monitor/db/orabbix_monitor_oracle_with_zabbix


아래는 오라클 DB 에서 모니터링 가능한 내용의 예이다.

  • DB Version (i.e. Validity of package)
  • Archiving (Archive log production with trend analysis)
  • Event Waits (Files I/O, single block read, multi-block read, direct path read, SQLNet Messages, Control file I/O, Log Write)
  • Hit Ratio (Hit Ratio on Triggers, Tables/Procedures, SQL Area, Body)
  • Logical I/O (Server performance on Logical I/O of: Current Read, Consistent Read, Block Change)
  • Physical I/O (Redo Writes, Datafile Writes, Datafile Reads)
  • PGA
  • SGA (In particular; Fixed Buffer, Java Pool, Large Pool, Log Buffer, Shared Poolm Buffer Cache)
  • Shared Pool (Pool Dictionary Cache, Pool Free Memory, Library Chache, SQL Area, MISC.)
  • Pin Hit Ratio (Oracle library cache pin are caused by contention with the library cache, the area used to store SQL executables for re-use)
  • Sessions / Processes
  • Sessions (Active Sessions, Inactive Sessions, System Sessions)
  • DBSize/DBFileSize (DBSize size of database really used space and of Filesize)


그래프로 생성 가능한 항목들이다.

  • Archivelog
  • DBSize and DBFileSize
  • Events Wait
  • HIT Ratio
  • Logical I/O
  • PGA
  • Pin HIT Ratio
  • Session
  • SGA
  • Shared Pool
  • Sessions Processes

Events Wait 모니터링 화면

SGA Memory 모니터링 화면

Session 써머리




Posted by Hey Jerry
,

Python에 대한 단상

기술 2014. 11. 13. 22:12
반응형

Python 으로 NFV(Network Function Virtualization) 시스템 제어 프로젝트를 하고 있다.

NFV에 대한 얘기는 정말 한 참 해야할 얘기라 11/20일 코엑스에서 할 OSC 세미나에 오셔서 들으시고... Python을 잠깐 써보면서 몸으로 실감한 장점을 얘기하고 싶다. (순서는 내맘)


- 우선 JSON/REST 서버 구현하고 싶다면 Flask에 Python json 라이브러리 쓰면 정말 Java에 비해 코딩량 절반 이하 (JSON과 Python Dictionary 구조체의 찰떡 궁합)
- 강력한 String 연산 함수 덕분에 시스템 제어 시 많이 발생하는 로그 Parsing 드에 최적. substring, reverse index 개념 등
- Native 라이브러리 호출 편리. Java에서는 JNI로 인터페이스 모듈을 만들어야 하지만 Python에서는 header 파일처럼 메타 정보만 선언하면 호출 가능. 이 역시 시스템 제어 시 매우 편리
- LUX 기반 시스템에서 외부 명령 실행 시, Java JVM(대용량 Heap 메모리의 경우 특히) fork에 비해 경량
- pip를 통한 편리한 라이브러리 설치 및 다양한 라이브러리
- 인터프리트 모드에서 쉽게 샘플코드 테스트
- 유연한 Type Checking... JavaScript처럼 너무 유연해서 디버깅이 어렵지도... Java/C처럼 엄격해서 Type Casting을 너무 많이 해야 하지도 않음

* 특히 강추하고 싶은 라이브러리 하나... PyParsing!!! BNF(약자가 사람 이름이었던 것 같은데 까먹었음) 문법을 Python에 정말 기가 막히게 녹여 넣어서 그냥 BNF 쓰듯이 쓰면... 예를 들어 SQL, 각종 config 파일, 로그 등에 대한 Parsing을 정말 체계적으로 할 수 있다. 사실 NFV 장비의 config 파일들이 아쉽게도 JSON이나 XML처럼 현대화된 문법이 아니라 고민이 많았었다. 그래서 초기에는 Grok라는 Regex 기반 라이브러리를 고민하다가 PyParing & BNF로 선회 했는데 복잡한 NFV 장비의 문법을 단 열줄로 Parsing 해서 Python Dictionary에 담아 준다. 그러면 JSON으로 변환도 쉽다. 내부에서 Python 강의 중인데 후반부는 PyParsing 강의를 넣을까 하고 모든 내용은 녹화되고 있으므로 조만간 외부 공개를 하게 될듯 하다.


Java Lover의 python 사랑 얘기 ㅋ


Posted by Hey Jerry
,