2016-03-15 2 views
1

Я работаю в Eclipse. Я добавил сервер TomEE, который запускается нормально, но, похоже, проблема связана с созданием MySQL DataSource.Как создать инструкции на подключении DataSource, управляемом TomEE?

Я определил следующие DataSource в TomEE 1.7.2:

<Resource id="jdbc/WCMDS" type="javax.sql.DataSource"> 
    jdbcDriver com.mysql.jdbc.Driver 
    jdbcUrl jdbc:mysql://localhost:3306/wcm?useUnicode=yes&amp;characterEncoding=utf8&amp;autoReconnect=true 
    jtaManaged false 
    password pass 
    userName user 
    InitialSize 50 
    MaxActive 100 
    MaxIdle 3 
</Resource> 

В моем бобе я извлечь DataSource

@PostConstruct 
public void postConstruct() { 
    InitialContext context = new InitialContext(); 
    String dataSourceName="java:/comp/env/"+getDatasourceJndiName(); 
    DataSource dataSource = (DataSource) context.lookup(dataSourceName); 
    DATASOURCE = dataSource; 

В методе боба, который выполняет запрос, я использую извлеченную DataSource для получить соединение.

Connection connection = DATASOURCE.getConnection(); 

Тогда я построить PreparedStatement

connection.prepareStatement("select * from myTableName"); 

При подготовке заявления, я бегу в javax.el.ELException: org.hsqldb.HsqlException: user lacks privilege or object not found: myTableName

================== ==========================================

Обратите внимание, это не проблема на стороне базы данных. Когда я заменяю jndi-поиск с помощью созданного вручную источника данных, все работает нормально.

MysqlDataSource datasource = new MysqlDataSource(); 
datasource.setURL("jdbc:mysql://localhost:3306/wcm?useUnicode=yes&amp;characterEncoding=utf8&amp;autoReconnect=true"); 
datasource.setUser("user"); 
datasource.setPassword("pass"); 
DATASOURCE=datasource; 

=========================================== ==================

Таким образом, ошибка, которую я получаю, должна иметь какое-то отношение к источнику данных, управляемому TomEE. Почему связь с таким источником данных мешает мне создавать заявления?

+0

вы скопировать последнюю MySQL-разъем-5.1.x.jar в ваш 'tomee/lib' папку? Если это не так, это может быть причиной, так как контейнер не имеет драйвера mysql на ранней стадии запуска, когда контейнер инициализирует источник данных из конфигурации на основе xml. По этой причине по умолчанию создается дочерний hqqldb (который не имеет ничего общего с вашим mysql DB). – MWiesner

+0

Да, у меня есть mysql-connector-java-5.1.18-bin.jar в 'C:/TomEE_1_7_2/lib'. – jacekn

ответ

0

ресурс не создан, и вместо этого вы получили источник данных hsqldb по умолчанию.

Вы бы описали его в conf/tomee.xml?

Подсказка: вы можете проверить настроенный источник данных с помощью JMX консоли в OpenEJB

+0

Я добавил его к tomee.xml, как к фрагменту в моем вопросе. Я также попробовал 'type =" com.mysql.jdbc.jdbc2.optional.MysqlDataSource ". Обратите внимание: я не получаю исключение NameNotFound. Он находит управляемый источник данных с GeronimoTransactionManager. – jacekn

+0

Я нашел сообщение, в котором говорится, что есть проблема с настройкой источников данных TomEE на серверах под Eclipse. Поэтому я должен добавить к своему вопросу, что я работаю в Eclipse. Я скопировал tomee.xml в директорию '/ servers /', но это не имело никакого значения. – jacekn

+0

тип должен быть «DataSource» (это тип ресурса, но не квалифицированное имя), а MysqlDataSource должно быть значением свойства JdbcDriver или атрибутом атрибута класса в зависимости от конфигурации, которую вы выполняете. –

0

Так что это, кажется, проблема с TomEE под Eclipse. Другой пользователь столкнулся с этой проблемой и представил свои выводы. Я выполнил его инструкции, и теперь я получаю источник данных MySQL.

How to define MySQL data source in TomEE?

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