2014-12-27 3 views
0

Я хочу создать веб-приложение на Openshift, которые используют Tomcat, Spring и Hibernate.Openshift - Как настроить соединение mysql с использованием persistence.xml - проблемы с переменными сдвига влево

Сначала я пытался настроить базу данных с помощью persistence.xml как этот

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
    <persistence-unit name="springshop_pu" transaction-type="RESOURCE_LOCAL">  <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>com.codeonblue.springshop.model.Categoria</class> 
     <class>com.codeonblue.springshop.model.Produto</class> 
     <class>com.codeonblue.springshop.model.Usuario</class> <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.format_sql" value="true"/> <property name="hibernate.connection.charset" value="UTF-8" />  
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
     #{systemEnvironment[OPENSHIFT_MYSQL_DB_HOST]} 
     <property name="javax.persistence.jdbc.user" value="#{systemEnvironment[OPENSHIFT_MYSQL_DB_USERNAME]}"/> 
     <property name="javax.persistence.jdbc.password" value="#{systemEnvironment[OPENSHIFT_MYSQL_DB_PASSWORD]}"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://#{systemEnvironment[OPENSHIFT_MYSQL_DB_HOST]}:#{systemEnvironment[OPENSHIFT_MYSQL_DB_PORT]}/#{systemEnvironment[OPENSHIFT_APP_NAME]}"/> 

    </properties> 

используя следующие, но когда я пытаюсь создать EntityManagerFactory я получаю эту ошибку:

java.lang.NumberFormatException: For input string: "#{systemEnvironment[OPENSHIFT_MYSQL_DB_PORT]}" 

Позже я попытался изменить мое persistence.xml следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
    <persistence-unit name="springshop_pu" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>com.codeonblue.springshop.model.Categoria</class> 
     <class>com.codeonblue.springshop.model.Produto</class> 
     <class>com.codeonblue.springshop.model.Usuario</class> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
     <property name="hibernate.show_sql" value="true" /> 
     <property name="hibernate.format_sql" value="true"/> 
     <property name="hibernate.connection.charset" value="UTF-8" />  
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
     <property name="javax.persistence.jdbc.user" value="${env.OPENSHIFT_MYSQL_DB_USERNAME}"/> 
     <property name="javax.persistence.jdbc.password" value="${env.OPENSHIFT_MYSQL_DB_PASSWORD}"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://${env.OPENSHIFT_MYSQL_DB_HOST}:${env.OPENSHIFT_MYSQL_DB_PORT}/${env.OPENSHIFT_APP_NAME}"/>  
    </properties> 
    </persistence-unit> 
</persistence> 

Но я получил эту ошибку:

java.sql.SQLException: Must specify port after ':' in connection string 

Мне кажется, что переменные базы данных OpenShift являются недействительными.

Это сервлет, что я делаю тестирование:

@WebServlet("/GenerateTables") 
public class GenerateTables extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public GenerateTables() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 


     System.out.println("Host: " + System.getenv("OPENSHIFT_MYSQL_DB_HOST")); 
     System.out.println("Port: " + System.getenv("OPENSHIFT_MYSQL_DB_PORT")); 
     System.out.println("Username: " + System.getenv("OPENSHIFT_MYSQL_DB_USERNAME")); 
     System.out.println("Password: " + System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD")); 


     EntityManagerFactory factory = Persistence 
       .createEntityManagerFactory("springshop_pu"); 
     factory.close(); 
     System.out.println("Let's see if the tables were generated"); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

} 

Однако эти команды в сервлет

System.out.println("Host: " + System.getenv("OPENSHIFT_MYSQL_DB_HOST")); 
System.out.println("Port: " + System.getenv("OPENSHIFT_MYSQL_DB_PORT")); 
System.out.println("Username: " + System.getenv("OPENSHIFT_MYSQL_DB_USERNAME")); 
System.out.println("Password: " + System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD")); 

показывают значения переменных в Tomcat Log

Что я делаю Неправильно здесь?

Пожалуйста, помогите мне

ответ

0

Я отказалась от использования OpenShift переменных окружения. Я отбрасываю проект и снова начинаю с нуля, но на этот раз я использовал предварительно сконфигурированный контекст, который открывает shift (MySQLDS), и это отлично работает.

Сначала я вставил некоторые данные в базе данных:

-- 
-- Table structure for table `names` 
-- 
CREATE TABLE IF NOT EXISTS `names` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `first` varchar(50) NOT NULL, 
    `last` varchar(50) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; 
-- 
-- Data for table `names` 
-- 
INSERT INTO `names` (`id`, `first`, `last`) VALUES 
(1, 'John', 'Doe'), 
(2, 'Jane', 'Doe'), 
(3, 'John', 'Smith'), 
(4, 'Jane', 'Smith'); 

Затем я создал файл mysql.jsp, как показано ниже:

<%@ page language="java" contentType="text/html; charset=US-ASCII" pageEncoding="US-ASCII"%> 
<%@ page import='java.sql.*' %> 
<%@ page import='javax.sql.*' %> 
<%@ page import='javax.naming.*' %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> 
<title>Tomcat 6 &amp; Tomcat 7 (JBOSS EWS) Example</title> 
</head> 
<body> 
<% 
Connection result = null; 
try { 
    InitialContext ic = new InitialContext(); 
    Context initialContext = (Context) ic.lookup("java:comp/env"); 
    DataSource datasource = (DataSource) initialContext.lookup("jdbc/MySQLDS"); 
    result = datasource.getConnection(); 
    Statement stmt = result.createStatement() ; 
    String query = "select * from names;" ; 
    ResultSet rs = stmt.executeQuery(query) ; 
    while (rs.next()) { 
     out.println(rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3) + "<br />"); 
    } 
} catch (Exception ex) { 
    out.println("Exception: " + ex + ex.getMessage()); 
} 
%> 
</body> 
</html> 

Код выше работал очень хорошо.

Если кто-то хочет более подробно, следуя инструкциям в этой ссылке: https://help.openshift.com/hc/en-us/articles/202399720-How-to-use-the-pre-configured-MySQLDS-and-PostgreSQLDS-data-sources-in-the-Java-cartridges

Надежда, что помогает кому-то еще.

Cheers!

 Смежные вопросы

  • Нет связанных вопросов^_^