I want to connect Informix and Play framework but I have a problem.
My application.conf
contains the following code:
db.default.jndiName=DefaultDS
db.default.driver=com.informix.jdbc.IfxDriver
db.default.url="jdbc:informix-sqli://servername:1526/dbname:informixserver=informixserver_name"
db.default.user=user
db.default.password=pass
jpa.default=defaultPersistenceUnit
and my build.sbt
contains:
name := """ProjectExample"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayJava)
scalaVersion := "2.11.6"
libraryDependencies ++= Seq(
javaJdbc,
cache,
javaJpa,
"org.hibernate" % "hibernate-entitymanager" % "4.3.5.Final",
"com.informix.jdbc" % "com.springsource.com.informix.jdbc" % "3.0.0.JC3"
)
// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator
But it did'nt work .. Someone can help me , please?
CreationException: Unable to create injector, see the following errors: 1) Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]] while locating play.api.db.DBApiProvider while locating play.api.db.DBApi for field at play.api.db.NamedDatabaseProvider.dbApi(DBModule.scala:80) while locating play.api.db.NamedDatabaseProvider at com.google.inject.util.Providers$GuicifiedProviderWithDependencies.initialize(Providers.java:149) at play.api.db.DBModule$$anonfun$namedDatabaseBindings$1.apply(DBModule.scala:34): Binding(interface play.api.db.Database qualified with QualifierInstance(@play.db.NamedDatabase(value=default)) to ProviderTarget(play.api.db.NamedDatabaseProvider@5a42eb15)) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1) Caused by: Configuration error: Configuration error[Cannot connect to database [default]] at play.api.Configuration$.configError(Configuration.scala:178) at play.api.Configuration.reportError(Configuration.scala:829) at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:48) at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:42) at scala.collection.immutable.List.foreach(List.scala:381) at play.api.db.DefaultDBApi.connect(DefaultDBApi.scala:42) at play.api.db.DBApiProvider.get$lzycompute(DBModule.scala:72) at play.api.db.DBApiProvider.get(DBModule.scala:62) at play.api.db.DBApiProvider.get(DBModule.scala:58) at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81) at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72) at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61) at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62) at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132) at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93) at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:62) at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:984) at com.google.inject.util.Providers$GuicifiedProviderWithDependencies.initialize(Providers.java:149) at com.google.inject.util.Providers$GuicifiedProviderWithDependencies$$FastClassByGuice$$2a7177aa.invoke(<generated>) at com.google.inject.internal.cglib.reflect.$FastMethod.invoke(FastMethod.java:53) at com.google.inject.internal.SingleMethodInjector$1.invoke(SingleMethodInjector.java:57) at com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:91) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132) at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93) at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80) at com.google.inject.internal.Initializer$InjectableReference.get(Initializer.java:174) at com.google.inject.internal.Initializer.injectAll(Initializer.java:108) at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:174) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110) at com.google.inject.Guice.createInjector(Guice.java:96) at com.google.inject.Guice.createInjector(Guice.java:73) at com.google.inject.Guice.createInjector(Guice.java:62) at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126) at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93) at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:153) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:150) at play.utils.Threads$.withContextClassLoader(Threads.scala:21) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:150) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:121) at scala.Option.map(Option.scala:146) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:121) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:119) at scala.util.Success.flatMap(Try.scala:230) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:119) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:111) at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1689) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) Caused by: Configuration error: Configuration error[Exception during pool initialization] at play.api.Configuration$.configError(Configuration.scala:178) at play.api.PlayConfig.reportError(Configuration.scala:1048) at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:69) at play.api.db.PooledDatabase.createDataSource(Databases.scala:199) at play.api.db.DefaultDatabase.dataSource$lzycompute(Databases.scala:124) at play.api.db.DefaultDatabase.dataSource(Databases.scala:122) at play.api.db.DefaultDatabase.getConnection(Databases.scala:143) at play.api.db.DefaultDatabase.getConnection(Databases.scala:139) at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:44) ... 56 more Caused by: com.zaxxer.hikari.pool.PoolInitializationException: Exception during pool initialization at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:542) at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:171) at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:60) at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:48) at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:80) at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:58) at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:54) at scala.util.Try$.apply(Try.scala:191) at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:54) ... 62 more Caused by: java.sql.SQLException: JDBC4 Connection.isValid() method not supported, connection test query must be configured at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:441) at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:540) ... 70 more 2) Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]] while locating play.api.db.DBApiProvider while locating play.api.db.DBApi for parameter 0 at play.db.DefaultDBApi.<init>(DefaultDBApi.java:28) at play.db.DefaultDBApi.class(DefaultDBApi.java:28) while locating play.db.DefaultDBApi while locating play.db.DBApi for field at play.db.DBModule$NamedDatabaseProvider.dbApi(DBModule.java:61) while locating play.db.DBModule$NamedDatabaseProvider at com.google.inject.util.Providers$GuicifiedProviderWithDependencies.initialize(Providers.java:149) at play.db.DBModule.bindings(DBModule.java:40): Binding(interface play.db.Database qualified with QualifierInstance(@play.db.NamedDatabase(value=default)) to ProviderTarget(play.db.DBModule$NamedDatabaseProvider@7f43038b)) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1) Caused by: Configuration error: Configuration error[Cannot connect to database [default]] at play.api.Configuration$.configError(Configuration.scala:178) at play.api.Configuration.reportError(Configuration.scala:829) at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:48) at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:42) at scala.collection.immutable.List.foreach(List.scala:381) at play.api.db.DefaultDBApi.connect(DefaultDBApi.scala:42) at play.api.db.DBApiProvider.get$lzycompute(DBModule.scala:72) at play.api.db.DBApiProvider.get(DBModule.scala:62) at play.api.db.DBApiProvider.get(DBModule.scala:58) at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81) at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72) at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61) at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62) at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:104) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132) at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93) at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:62) at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:984) at com.google.inject.util.Providers$GuicifiedProviderWithDependencies.initialize(Providers.java:149) at com.google.inject.util.Providers$GuicifiedProviderWithDependencies$$FastClassByGuice$$2a7177aa.invoke(<generated>) at com.google.inject.internal.cglib.reflect.$FastMethod.invoke(FastMethod.java:53) at com.google.inject.internal.SingleMethodInjector$1.invoke(SingleMethodInjector.java:57) at com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:91) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132) at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93) at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80) at com.google.inject.internal.Initializer$InjectableReference.get(Initializer.java:174) at com.google.inject.internal.Initializer.injectAll(Initializer.java:108) at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:174) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110) at com.google.inject.Guice.createInjector(Guice.java:96) at com.google.inject.Guice.createInjector(Guice.java:73) at com.google.inject.Guice.createInjector(Guice.java:62) at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:126) at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:93) at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:153) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:150) at play.utils.Threads$.withContextClassLoader(Threads.scala:21) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:150) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:121) at scala.Option.map(Option.scala:146) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:121) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:119) at scala.util.Success.flatMap(Try.scala:230) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:119) at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:111) at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1689) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) Caused by: Configuration error: Configuration error[Exception during pool initialization] at play.api.Configuration$.configError(Configuration.scala:178) at play.api.PlayConfig.reportError(Configuration.scala:1048) at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:69) at play.api.db.PooledDatabase.createDataSource(Databases.scala:199) at play.api.db.DefaultDatabase.dataSource$lzycompute(Databases.scala:124) at play.api.db.DefaultDatabase.dataSource(Databases.scala:122) at play.api.db.DefaultDatabase.getConnection(Databases.scala:143) at play.api.db.DefaultDatabase.getConnection(Databases.scala:139) at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:44) ... 67 more Caused by: com.zaxxer.hikari.pool.PoolInitializationException: Exception during pool initialization at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:542) at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:171) at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:60) at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:48) at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:80) at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:58) at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:54) at scala.util.Try$.apply(Try.scala:191) at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:54) ... 73 more Caused by: java.sql.SQLException: JDBC4 Connection.isValid() method not supported, connection test query must be configured at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:441) at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:540) ... 81 more 2 errors
build.sbt
name := """PROJECTNAME"""
version := "1.0-SNAPSHOT"
playJavaSettings
ebeanEnabled := false
libraryDependencies ++= Seq(
javaCore,
javaJpa,
"org.hibernate" % "hibernate-entitymanager" % "4.3.5.Final"
)
conf/application.conf
# This is the main configuration file for the application.
# ~~~~~
# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions.
# If you deploy your application to several instances be sure to use the same key!
application.secret="ZA<lBCf^q]e33>XiDQksVlgsH^5<FNul7O/rCThH7sPylH8h72/K06BS>ML;?EHn"
# Database configuration
#
db.default.driver=com.informix.jdbc.IfxDriver
db.default.url="jdbc:informix-sqli://host:port>/database:informixserver=dbservername"
db.default.user=user
db.default.password=pass
db.default.jndiName=DefaultDS
jpa.default=defaultPersistenceUnit
# Evolutions
# ~~~~~
# You can disable evolutions if needed
evolutionplugin=disabled
conf/META-INF/persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>DefaultDS</non-jta-data-source>
<class>models.Company</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.InformixDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
conf/routes
# Routes # This file defines all application routes (Higher priority routes first) # ~~~~ # Home page - we use the @controllers syntax here so that the router knows we are referring to a class. In turn it # will call on the GlobalSettings.getController method to resolve the actual controller instance. GET / @controllers.Application.index # Map static resources from the /public folder to the /assets URL path GET /assets/*file controllers.Assets.at(path="/public", file)
app/models/Company.java
package models; import java.util.*; import javax.persistence.*; import play.data.validation.*; import play.db.jpa.*; @Entity public class Company { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long id; @Constraints.Required public String name; public static Company findById(Long id) { return JPA.em().find(Company.class, id); } public void update() { JPA.em().merge(this); } public void save() { JPA.em().persist(this); } }
app/controllers/Application.java
package controllers; import models.Company; import play.mvc.*; public class Application extends Controller { @play.db.jpa.Transactional public Result index() { Company c1 = Company.findById(new Long(1)); c1.name = "Computer 1"; c1.update(); // Atualiza um registo já existente Company c2 = new Company(); c2.name = "Computer 2"; c2.save(); // Cria um registo novo return ok(views.html.index.render("Found id: " + c2.name + " of person/people")); } }
app/views/index.scala.html
@(message: String) @main("Welcome to Play 2.1") { @play20.welcome(message) }
app/views/main.scala.html
@(title: String)(content: Html) <!DOCTYPE html> <html> <head> <title>@title</title> <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")"> <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")"> <script src="@routes.Assets.at("javascripts/jquery-1.9.0.min.js")" type="text/javascript"></script> </head> <body> @content </body> </html>