2014-06-23 2 views
1

메서드가 Java 스레드에서 호출되지 않지만 다른 스레드 나 언어에서 호출되는 경우에는 plsql과 같은 질문을했습니다.자바 메서드가 PLSQL에서 호출되는 경우 동기화 된 메서드가 동기화됩니까

필자가 아는 한 plsql에는 스레드가 없지만 세션이 있습니다. plsql 프로 시저에서 호출되는 메소드가 동기화되기를 바랍니다.

내 질문

  1. 이 동기화 된 키워드는 여전히 잘 작동 하는가이다

  2. 합니까이 자바 스레드

  3. 을 만들 호출합니까 세마포어 같은 동기화 키워드 또는 다른 Java 동시성 개체 (, conditionObject)는 Java Thread에서만 작동합니까? PL/SQL에서

부름 같다 :

language java name 'xxx.xxx.xxx.Engine.execute(
           java.lang.Integer, 
           java.lang.String, 
           java.sql.Timestamp, 
           java.sql.Timestamp, 
           java.lang.Long, 
           java.lang.Long, 
           java.lang.Long, 
           java.lang.Long, 
           java.lang.Long, 
           java.lang.Long, 
           java.lang.Long, 
           java.lang.Long, 
           java.lang.String, 
         java.lang.Long)'; 

및 상기 실행 방법은 정적 방법이다.

+1

어떻게 plsql에서 Java 코드를 호출 할 수 있습니까? 일부 코드 스 니펫을 공유하십시오. 아마 당신에게 좋은 대답을주는 데 도움이 될 것입니다. – AlexR

+0

우리는 직접 PL/SQL 블록, 서브 프로그램 또는 패키지에서 Java 저장 프로 시저를 호출 할 수 없으며 Java 메소드를 직접 호출 할 수 없습니다. – SparkOn

+0

안녕하세요. M.Sharma, "우리는 직접 java 메소드를 호출 할 수 없습니다." 그 방법은 "실행"은 Java 메소드가 아니라 Java 저장 프로 시저라는 것을 의미합니까? – Jaskey

답변

0

동기화 된 키워드는 여전히 잘 작동 하는가

입니다 실제로 자바로 호출하는 PL/SQL은 다음 네, 그것은 synchronized 키워드 및 블록, 등등 그러나, 나는 의심을 호출하는 경우 다른 JVM에 있으므로 Java 코드의 잠금이 PL/SQL에 잠겨있는 잠금과 다릅니다. 프로세스 목록을 보면 두 개의 JVM 인스턴스가 실행중인 것을 볼 수 있습니다.

이 방법을 테스트하는 한 가지 방법은 응용 프로그램을 디버깅하고 execute(...) 메서드에 중단 점을 넣는 것입니다. 중단 점에서 멈 추면 동일한 JVM에 있고, 그렇지 않으면 아니오입니다. 시도 할 또 다른 것은 ManagementFactory.getRuntimeMXBean().getName()의 값을 인쇄하는 것입니다. 이것이 Java 클라이언트 코드와 다른 경우 다른 JVM입니다.

이 호출은 내가 그렇게 의심 자바 스레드

을 만들 않습니다. 나는 당신의 ODBC 호출 (당신이하고있는 것인가?)이 일종의 네트워크 연결을 사용하는 Oracle에 대한 원격 프로 시저 호출이라고 생각합니다. 그런 다음 오라클 서버 내부의 스레드가 실행되어 Java 항목에 전달됩니다. Java가 아직 또 다른 스레드에서 실행되고있는 것 같습니다.

실행중인 스레드를 테스트하려면 Thread.currentThread().getId()을 사용할 수 있습니다. 그러나 무작위로 동일 할 수도 있으므로 위에 표시된 getName() 출력을 비교해야합니다.

synchronized 키워드 나 다른 Java 동시성 객체 (예 : Semaphore, conditionObject)는 Java Thread에서만 작동합니까?

나는이 질문을 이해하지 못합니다. 오라클이 자바 등을 해석하지 않는 한 Java 코드를 사용하지 않고 Java 코드를 실행할 수있는 방법은 없습니다.

오라클 데이터베이스 호출을 한 동일한 스레드에 있는지 묻는다면 의심 스럽습니다. 위 참조. 동일한 JVM인지 묻는다면 의심 스럽습니다. 위 참조.