2017-03-09 20 views
0

私はJettyを使用しています。 9.4.2.v20170220 oracle.jdbc.pool.OracleDataSource(バージョン11.2.0.4)を使用してOracle Database 11g Express Editionを接続(挿入)します。私は私のデータソースの検索のセットアップに問題が混乱しています。私はまだ間違ったOracle URLアドレスを取得しています。私の接続オブジェクトのtostringは、[email protected]のようになります。JettyアプリケーションでJNDIルックアップを使用してOracleデータベースに接続できません

private static Connection getDBConnection() { 

    Connection dbConnection = null; 
    try { 

     Class.forName(DB_DRIVER); 
    } catch (ClassNotFoundException e) { 
     System.out.println(e.getMessage()); 
    } 

    try { 
     dbConnection = DriverManager.getConnection(
       DB_CONNECTION, DB_USER, DB_PASSWORD); 
     return dbConnection; 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } 
    return dbConnection; 

(私は何の問題もなく、インサートを作ることができる)完璧に動作します。私は、ドライバーのような直接接続がbecouse正しくインストールされたことを確信しています。しかし、私は接続プロパティをハードコーディングする必要はありません、私はXMLの構成ファイルからそれらを読むことを望みます。

私の桟橋-env.xml:のweb.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> 
<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext"> 

<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource"> 
    <Arg><Ref refid="wac"/></Arg> 
    <Arg>jdbc/DSTest</Arg> 
    <Arg> 
     <New class="oracle.jdbc.pool.OracleDataSource"> 
      <Set name="DriverType">thin</Set> 
      <Set name="URL">jdbc:oracle:system:thin:@localhost:1521:xe</Set> 
      <Set name="User">mylogin</Set> 
      <Set name="Password">mypass</Set> 
     </New> 
    </Arg> 
</New> 

</Configure> 

フラグメント:サーブレット・コードの

<resource-ref> 
    <description>My DataSource Reference</description> 
    <res-ref-name>jdbc/DSTest</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

及び断片(接続のために、次に挿入):

private static Connection connTest() throws NamingException, SQLException { 

    Context initContext = new InitialContext(); 
    DataSource dataSource = (DataSource) initContext.lookup("java:comp/env/jdbc/DSTest"); 
    System.out.println(dataSource); 
    System.out.println(dataSource.toString()); 
    Connection connection = dataSource.getConnection(); 
    return connection; 
} 


@POST 
@Path("/testinsert") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response testinsert(SimpleJsonModel simpleJsonModel) { 

    String result = "JSON saved test: " + simpleJsonModel; 

    try { 
     insertRecord(simpleJsonModel.getJsonId(), simpleJsonModel.getNumber()); 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } 

    return Response.status(201).entity(result).build(); 
} 

private static void insertRecord(String val1, String val2) throws SQLException { 

    Connection dbConnection = null; 
    Statement statement = null; 
    String insertTableSQL = "insert into json.johny_table (jsonId, numberJ) values ('" + val1 + "', '" + val2 + "')"; 

    try { 
     dbConnection = connTest(); 
     statement = dbConnection.createStatement(); 
     System.out.println(insertTableSQL); 
     statement.executeUpdate(insertTableSQL); 
     System.out.println("inserted"); 

    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } finally { 

     if (statement != null) { 
      statement.close(); 
     } 
     if (dbConnection != null) { 
      dbConnection.close(); 
     } 
    } 
} 
} 

ですから、質問はjndiプロパティをルックアップで正しく読み取る方法と、ルックアップとの接続を確立する方法です。そして、jetty-env.xmlからurlのような文字列を読む方法はありますか?

どうもありがとう:)

答えて

0

すべてが桟橋-env.xmlの1行を除いて大丈夫だった:なぜ私はkhowません

<Set name="URL">jdbc:oracle:thin:@localhost:1521:xe</Set> 

<Set name="URL">jdbc:oracle:system:thin:@localhost:1521:xe</Set> 

が可能schouldそこに単語システムを入れてください。

関連する問題