2017-03-09 4 views
0

J'utilise Jetty ver. 9.4.2.v20170220 avec oracle.jdbc.pool.OracleDataSource (ver 11.2.0.4) pour connecter (puis insérer) Oracle Database 11g Express Edition. Je suis confus par le problème avec la configuration de la recherche pour ma source de données. Je me trompe toujours Adresse URL Oracle. La chaîne de mon objet de connexion ressemble à ceci: [email protected] Je suis sûr que les pilotes ont été correctement installés becouse connexion directe comme:Impossible de se connecter à Oracle db avec la recherche JNDI dans l'application jetty

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; 

fonctionne parfaitement (je peux faire insérer sans problème). Mais je ne veux pas coder les propriétés de connexion, je voudrais les lire à partir du fichier de configuration XML.

ma jetée-env.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> 

Fragment de web.xml:

<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> 

et le fragment de code servlet (pour la connexion puis insérez):

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(); 
     } 
    } 
} 
} 

Donc, la question est de savoir comment lire les propriétés jndi correctement par recherche et comment établir une connexion avec elle. Et des conseils sur la façon de lire les chaînes comme url de jetty-env.xml?

Merci beaucoup :)

Répondre

0

Tout allait bien, sauf une ligne jetée-env.xml:

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

schould être:

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

Je ne Khow pourquoi je mettre le système de mot là.