You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by cleophus p <cl...@hotmail.com> on 2019/01/16 06:55:57 UTC

Transaction not get commited from Camel JMS Route Call

Hi,

I am learning and  observed the  transaction are not getting committed in oracle database.  I am using Apace Camel 2.16.0 with Spring Boot

I have following code.  It doesnt camit and doesnt throw any error. It shows in logs it has  executed end to end successfully.  But when i see in database nothing is committed.  What i observed is
if i change to below transaction works when it calls function saveDepartment(String jobType).  Please help need your assistance and any sample or example will help to resolve

.to("bean:exportJob?method=saveDepartment(${header.jobType})");
or .bean(exportJob, "saveDepartment");

@Configuration
@Profile("camel")
public class MyCamelConfiguration extends CamelConfiguration {
    @Value(value = "${route.jms.myschedule}")
    private String myschedule;

@Bean
    public RouteBuilder route() {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
   from(myschedule).routeId("myschedule id").log("------------------------------------ job Header ${in.header.job} -----------------------------")
   .bean(exportJob.saveDepartment("SOMEID")).id("myscheduleID");
  }
 }
}
}


@Service
@Slf4j
public class ExportJob {

    @Autowired
  private DepartmentRepository deptRepo;

@Transactional
    public Processor saveDepartment(String jobType) throws Exception {
     try {
  Department dept = new Department();
  dept.setId((new Date()).getTime());
  dept.setName("Hello");
  deptRepo.save(dept);
  return e -> saveDepartment(e, jobType);
     } catch (Throwable e) {
      e.printStackTrace();
     }
     return null;
    }


    @Transactional
    public void saveDepartment(Exchange exchange, String jobType) throws Exception {
     try {
  Department dept = new Department();
  dept.setId((new Date()).getTime());
  dept.setName("Hello");
  deptRepo.save(dept);
     } catch (Throwable e) {
      e.printStackTrace();
     }
    }
}

@Repository
public interface DepartmentRepository extends CrudRepository<Department, Long>{
}

@Entity
@Data
@AllArgsConstructor
@DynamicUpdate
@Table(name = "department")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
public Department() {
 super();
}

public Long getId() {
 return id;
}

public void setId(Long id) {
 this.id = id;
}

public String getName() {
 return name;
}

public void setName(String name) {
 this.name = name;
}

@Override
public String toString() {
 return "Department [id=" + id + ", Name=" + name +"]";
}

}


@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = { "com.spring", "com.mypackage" }, entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "entityTransactionManager")
public class MainDBConfiguration {

@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource MainDataSource() {
 return DataSourceBuilder.create().build();
}

@Bean(name = "entityManagerFactory")
@Primary
@PersistenceContext(unitName = "primary")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
 return builder.dataSource(primaryDataSource()).packages("com.mypackage").persistenceUnit("primary").build();
}

@Primary
@Bean(name = "entityTransactionManager")
public PlatformTransactionManager entityTransactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
 return new JpaTransactionManager(entityManagerFactory);
}

}