2
나는 다음과 같은 자바 저장 프로 시저가 있습니다자바 저장 프로 시저
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "RetreiveLdap" AS
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class RetreiveLdap {
// LDAP CONFIG
public static String CONTEXT = "com.sun.jndi.ldap.LdapCtxFactory";
public static String HOST = "ldap://192.168.30.12:389";
public static String USER = "cn=root,dc=company";
public static String PASSWORD = "pa55w0rd";
public static String BASE = "dc=company";
// Reads from LDAP
public static void readConfig() throws NamingException, SQLException {
try {
addUser("tmp", "tmp");
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT);
env.put(Context.PROVIDER_URL, HOST);
env.put(Context.SECURITY_PRINCIPAL, USER);
env.put(Context.SECURITY_CREDENTIALS, PASSWORD);
DirContext ctx = new InitialDirContext(env);
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
String filter = "(objectClass=person)";
NamingEnumeration items = ctx.search(BASE, filter, sc);
System.out.println("STARTING...");
while (items != null && items.hasMore()) {
SearchResult sr = (SearchResult) items.next();
String cn = (String) sr.getAttributes().get("cn").get();
String sn = (String) sr.getAttributes().get("sn").get();
System.out.println("WORKING...");
// save to table
addUser(cn, sn);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// Add LDAP user to DB.
public static void addUser(String cn, String sn) {
try {
Connection conn = DriverManager
.getConnection("jdbc:default:connection:");
String sql = "INSERT INTO ldapuser " + "(cn,sn) " + "VALUES(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, cn);
pstmt.setString(2, sn);
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
System.err.println("ERROR: " + e.getMessage());
}
}
}
/
을 그리고 내가 좋아하는 위를 실행하는 프로 시저를 만들;
이제CREATE OR REPLACE PROCEDURE read_ldap
AS LANGUAGE JAVA
NAME 'RetreiveLdap.readConfig()';
/
(... 작성하거나 교체없이 물론) 나는 그것이 잘 작동 자바에서 일반적으로이 클래스를 실행할 때, 그것은 LDAP 사용자의 목록을 검색 그리고, DB에 저장합니다
하지만 오라클에서 프로 시저로 실행할 때 사용자 양식 LDAP는 테이블에 추가되지 않습니다. 내 코드가 잘 실행되는지 확인하기 위해 addUser("tmp", "tmp");
을 추가했습니다.이 줄을 사용하면 while 루프에 아무 것도 삽입되지 않지만 아무 것도 삽입되지 않습니다.
이 절차를 수행 할 때 오류가 발생하는 것을 볼 수있는 방법이 있습니까?