2011-09-03 5 views
3

Google Analytics 정보를 검색하는 Oracle 11g에서 Java 저장 프로 시저를 만들려고합니다.Oracle Java 저장 프로 시저

3 일 동안이 작업을 성공했지만 성공하지 못했습니다.

업로드 5 개 필요한 JAR 파일, here link 사용하여 데이터베이스에 : 여기에 내가 무슨 짓을 단계별로는

loadjava -user scott/[email protected] gdata-analytics-2.1.jar

그럼 내가 자바 소스 파일을 생성 (PL/SQL 개발자 IDE에서) 위의 링크에서 예제 코드를 사용했습니다. 그것을 컴파일하고 (f8) Java 클래스 트리에 나타납니다 (jar 파일로 만든 클래스의 경우와 동일).

나는 자바 클래스를 호출하는 절차를 쓴 후 :

create or replace procedure KEVIN_PROCEDURE_ANALYTICS AS LANGUAGE JAVA NAME 'Kevin_Analytics.main(java.lang.String[])';

마지막으로 나는 프로 시저 호출 :

exec KEVIN_PROCEDURE_ANALYTICS();

을하고 내가 오류 얻을 :

ORA-29532: Java call terminated by uncaught Java exception: java.lang.IllegalStateException: Cannot call dirty() without holding the lock on the registry.

구글을 사용하여 this link (정확히이 오류 메시지를 출력하는 메소드가있는 클래스의 자바 코드)와 동기화 된 메소드를 사용해야한다고 생각 했으므로 링크를 확인하십시오. .

이제 문제는이 동기화 된 코드를 어떻게 그리고 어디서 입력해야하는지 모를 일입니다. 너의 누군가가 나에게 이것을 보여줄 수 있다면 나는 정말로있을 것이다.

이 게시물을 읽어 주셔서 감사합니다. 누군가 저를 도울 수 있다면, 크게 감사하겠습니다.

케빈 Vermaat 당신이 볼 수있는 방법에의 javadoc에서

+0

법의학 분석을 위해 전체 스택 트레이스가 필요합니다. 이것은 검색하는 방법을 배우는 좋은 시간 인 것 같습니다. –

+0

다음에 로그인 할 시간이 있다면 대답에 대한 내 의견을 읽어보십시오 :) –

+0

오라클 데이터베이스 내부의 JVM의 미세한 작업에 익숙하지 않으며이를 발견하는 데 도움이되지 않습니다. 명시 적으로 묻는 새로운 질문을 열고이를 수행하는 방법에 대해서만 열어 볼 수 있습니다. –

답변

2

글쎄, 위에서 링크에서 jar와 예제를 다운로드 나는 모든 것을 내 Oracle 데이터베이스에로드했고 정확히 같은 오류가 발생했습니다. 동기화 문제로 인한 오류 임에도 불구하고 추가 할 내용이 없습니다. 코드는 예제의 코드이며 어디에서 "registryBuilder"객체를 클래스의 객체를 직접 사용하는지 알 수 없습니다.

글쎄, 자세한 내용을 모두 쓸 시간이 오래 걸릴 것입니다. 항아리를로드하고 코드를 실행하는 동안 발생하는 다양한 오류를 극복하기 위해 수행 한 단계를 작성합니다. 어쩌면 같은 단계를 수행해도 문제가 해결 될 것입니다.

1- 사용자에게 테이블 및 프로 시저를 작성하고 사용자 테이블 스페이스의 할당량을 늘리는 권한을 부여하십시오. 나는 사용자와 데이터베이스를 위해 귀하가 제공 한 데이터를 사용하려고 노력할 것입니다.

당신이 연결된 후
sqlplus sys/[email protected] as sysdba 

는, 사용자 스콧에 보조금을주고 할당량을 증가 : SYSDBA로 접속, 보조금을주는

grant create any table to scott; 

    grant create any procedure to scott; 

    alter user scott quota unlimited on users; 

(그렇지 않은 수도로 위의에 대한 귀하의 DBA를 참조하십시오 게으름을 피우는 것과 같이 무제한적인 교부금을주기에 적합)

2 이제 파일을 다시로드합니다. 한 번에 5 병 모두를 적재합니다. 그것이 작동하지 않았다 그들없이으로도, 명령에 -f 옵션과 -genmissing을 추가

loadjava -genmissing -f -user scott/[email protected] gdata-analytics-2.1.jar gdata-analytics-meta-2.1.jar gdata-core-1.0.jar google-collect-1.0-rc1.jar jsr305.jar 

이 내가 나를 위해 실행할 수 있도록 한 것입니다.

+0

감사합니다 AJ, 이것이 효과적이었습니다.이 모든 노력에 감사드립니다. –

+0

행복 했어요. 당신은 가장 환영합니다 :) –

1

는 :

/** 
    * Dirty this builder. Whoever is modifying this builder must also hold 
    * onto this builder's lock while modifying it, by using a 
    * {@code sychronized(registryBuilder) ...} block, or this method will throw 
    * an {@link IllegalStateException}. 
    */ 

그것은 빌더가 그것을 내부 synchronized(registryBuilder) {....} 블록을함으로써, 잠에 당신은 잠금 장치가 있어야합니다 말한다. 그 코드를 코드 주위에 두어보십시오.

+0

감사합니다. 나도 그걸 읽었지 만 어디에서 코드에 넣을지 몰랐다. 어디로 말해 줄 수 있니? 대답에 정말 감사드립니다! stacktrace 정보, 공유하거나 예약 할 수있는 온라인 자습서가 있습니까? –

+0

아마도 예외를 던지는 코드가있는 코드 주위에있을 것입니다. Java에서 synchronized-blocks이 의미하는 바를 읽을 수 있습니다. Oracle Java 자습서를 시작하는 것이 좋습니다. –

+0

고마워, 내가 그럴거야, 내 질문에 완전히 대답하지 않지만, 나는 definenitly 당신의 게시물을 투표 할 것입니다, 만약 당신이 더 많은 것을 발견하면, ^^ 나는 자유롭게 의견을 말하며 2 번째 질문도 올릴 것입니다. –