I have the correct @Transactional annotation. Here is my config:
Also one thing we do a little differently is:
Instead of doing @Inject, we do the following
AMPAssetsAPI assetsAPI =
GrabBag.getGuice().getInstance(AMPAssetsAPI.class);
assetsAPI.deleteAsset(asset);
(GrabBag is a class with some static fields that we use to keep
certain things around such as the Guice Injector)
package server;
import java.util.Properties;
import org.apache.log4j.Logger;
import server.global.repo.AMPDocumentHeaderRepository;
import server.global.repo.AdminRepository;
import server.global.repo.AdvisorRepository;
import server.global.repo.AnalystOpinionCommentRepository;
import server.global.repo.AnalystOpinionRepository;
import server.global.repo.AnalystRepository;
import server.global.repo.AnalystTopicRepository;
import server.global.repo.AssetRepository;
import server.global.repo.CashFlowItemRepository;
import server.global.repo.ClientRepository;
import server.global.repo.CustomWidgetRepository;
import server.global.repo.JobStatusRepository;
import server.global.repo.ReportPageRepository;
import server.global.repo.ReportTemplateRepository;
import server.global.repo.UserRepository;
import server.global.repo.jpa.AMPDocumentHeaderRepositoryJPA;
import server.global.repo.jpa.AdminRepositoryJPA;
import server.global.repo.jpa.AdvisorRepositoryJPA;
import server.global.repo.jpa.AnalystOpinionCommentRepositoryJPA;
import server.global.repo.jpa.AnalystOpinionRepositoryJPA;
import server.global.repo.jpa.AnalystRepositoryJPA;
import server.global.repo.jpa.AnalystTopicRepositoryJPA;
import server.global.repo.jpa.AssetRepositoryJPA;
import server.global.repo.jpa.CashFlowItemRepositoryJPA;
import server.global.repo.jpa.ClientRepositoryJPA;
import server.global.repo.jpa.CustomWidgetRepositoryJPA;
import server.global.repo.jpa.JobStatusRepositoryJPA;
import server.global.repo.jpa.ReportPageRepositoryJPA;
import server.global.repo.jpa.ReportTemplateRepositoryJPA;
import server.global.repo.jpa.UserRepositoryJPA;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Key;
import com.google.inject.Singleton;
import com.web.repository.AnalystInviteRepository;
import com.web.repository.AnalystInviteRepositoryJPA;
import com.wideplay.warp.persist.PersistenceService;
import com.wideplay.warp.persist.UnitOfWork;
import com.wideplay.warp.persist.jpa.JpaUnit;
import common.global.GrabBag;
import common.global.MachinePrefs;
public class RepositoryModule extends AbstractModule {
private static final Logger logger =
Logger.getLogger(RepositoryModule.class);
@Override
protected void configure() {
bind(Key.get(Properties.class,
JpaUnit.class)).toInstance(getHibernateProperties());
bindConstant().annotatedWith(JpaUnit.class).to("AMP_JPA_UNIT");
install(PersistenceService.usingJpa().across(UnitOfWork.TRANSACTION).buildModule());
doBindings();
}
private Properties getHibernateProperties() {
MachinePrefs machinePrefs =
GrabBag.getGuice().getInstance(MachinePrefs.class);
Properties properties = new Properties();
String databaseIP = machinePrefs.get("database_ip",
GrabBag.DATABASE_SERVER_IP);
int databasePort = machinePrefs.getInt("database_port",
GrabBag.DATABASE_SERVER_PORT);
properties.put("hibernate.connection.url", "jdbc:mysql://" +
databaseIP + ":" + databasePort
+ "/amp?
autoReconnect=true&zeroDateTimeBehavior=round&useUnicode=true&characterEncoding=utf-8");
return properties;
}
protected void doBindings() {
bind(AnalystOpinionRepository.class).to(AnalystOpinionRepositoryJPA.class).in(Singleton.class);
bind(AnalystTopicRepository.class).to(AnalystTopicRepositoryJPA.class).in(Singleton.class);
bind(AnalystOpinionCommentRepository.class).to(AnalystOpinionCommentRepositoryJPA.class).in(Singleton.class);
bind(UserRepository.class).to(UserRepositoryJPA.class).in(Singleton.class);
bind(AdvisorRepository.class).to(AdvisorRepositoryJPA.class).in(Singleton.class);
bind(ClientRepository.class).to(ClientRepositoryJPA.class).in(Singleton.class);
bind(AnalystRepository.class).to(AnalystRepositoryJPA.class).in(Singleton.class);
bind(AssetRepository.class).to(AssetRepositoryJPA.class).in(Singleton.class);
bind(ReportTemplateRepository.class).to(ReportTemplateRepositoryJPA.class).in(Singleton.class);
bind(ReportPageRepository.class).to(ReportPageRepositoryJPA.class).in(Singleton.class);
bind(CustomWidgetRepository.class).to(CustomWidgetRepositoryJPA.class).in(Singleton.class);
bind(CashFlowItemRepository.class).to(CashFlowItemRepositoryJPA.class).in(Singleton.class);
bind(JobStatusRepository.class).to(JobStatusRepositoryJPA.class).in(Singleton.class);
bind(AnalystInviteRepository.class).to(AnalystInviteRepositoryJPA.class).in(Singleton.class);
bind(AdminRepository.class).to(AdminRepositoryJPA.class).in(Singleton.class);
bind(AMPDocumentHeaderRepository.class).to(AMPDocumentHeaderRepositoryJPA.class).in(Singleton.class);
bind(Initializer.class).asEagerSingleton();
}
@Singleton
public static class Initializer {
private final PersistenceService service;
private static Initializer instance;
@Inject
Initializer(PersistenceService service) {
instance = this;
this.service = service;
logger.debug("Starting persistance service...");
service.start();
}
public static Initializer getInstance() {
return instance;
}
public void shutdown() {
service.shutdown();
}
}
}
On May 21, 6:24 pm, "Dhanji R. Prasanna" <
dha...@gmail.com> wrote:
> Or have you imported a different @Transactional (check the imports top of
> the file, it should be com.wideplay.warp.persist.Transactional)?
>
> On Fri, May 21, 2010 at 6:23 PM, Dhanji R. Prasanna <
dha...@gmail.com>wrote:
>
>
>
> > No, it definitely looks wrong. Im guessing it's something very simple like
> > you have not installed the PersistenceModule in the correct place. Can you
> > paste your entire injector config?
>
> > Dhanji.
>
> >>
warp-core+...@googlegroups.com<
warp-core%2Bunsu...@googlegroups.com>
> >> .
> >> --
> >> You received this message because you are subscribed to the Google Groups
> >> "warp-core" group.
> >> To post to this group, send email to
warp...@googlegroups.com.
> >> To unsubscribe from this group, send email to
> >>
warp-core+...@googlegroups.com<
warp-core%2Bunsu...@googlegroups.com>
> >> .