Hi all,
I am trying to call some of my DAOs (which in turn, use the Entity Manager) from inside a java migration with flyway, here is the relevant code:
V2__AddAdminUser.java:
import conf.Module;
import dao.UserDao;
public class V2__AddAdminUser implements JdbcMigration {
@Override
public void migrate(final Connection connection) throws Exception {
final Injector injector = Guice.createInjector(new Module());
// create admin user
final UserDao userDao = new UserDao();
injector.injectMembers(userDao);
userDao.create("admin", "password");
LOG.info("Admin user created.");
}
}
UserDao.java
public class UserDao extends AbstractDao {
private Provider<EntityManager> entityManagerProvider;
protected EntityManager getEntityManager() {
return entityManagerProvider.get();
}
@Inject
public void setEntityManagerProvider(final Provider<EntityManager> entityManagerProvider) {
this.entityManagerProvider = entityManagerProvider;
}
@Transactional
public UserEntity create(final String username, final String password) {
// create the entity
final UserEntity user = new UserEntity();
user.setUsername(username);
// compute password salt/hash, other irrelevant stuff
// ...
// persist
getEntityManager().persist(user);
getEntityManager().flush();
return user;
}
}
This spits out the following stacktrace:
...
Caused by: com.google.inject.ConfigurationException: Guice configuration errors:
1) No implementation for javax.persistence.EntityManager was bound.
while locating com.google.inject.Provider<javax.persistence.EntityManager>
for parameter 0 at dao.UserDao.setEntityManagerProvider(UserDao.java:18)
at dao.UserDao.setEntityManagerProvider(UserDao.java:18)
while locating dao.UserDao
1 error
at com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:992) ~[guice-4.0.jar:na]
at com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:997) ~[guice-4.0.jar:na]
at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:983) ~[guice-4.0.jar:na]
at db.migration.V2__AddAdminUserAndWelcomeArticle.migrate(V2__AddAdminUserAndWelcomeArticle.java:29) ~[classes/:na]
at org.flywaydb.core.internal.resolver.jdbc.JdbcMigrationExecutor.execute(JdbcMigrationExecutor.java:45) ~[flyway-core-4.0.jar:na]
... 45 common frames omitted
I looked online how to execute java migrations in Ninja, but I haven't found anything so far, does anyone knows how to do this?
Thank you,
Anthony