@Override
  public void configure() throws Exception {

    // [ENTESB-3281] Wildfly-Camel build fails on OpenJDK
    String vmname = System.getProperty("java.vm.name");
    if (vmname.contains("OpenJDK")) return;

    // Configure our JaxbDataFormat to point at our 'model' package
    JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
    jaxbDataFormat.setContextPath(Customer.class.getPackage().getName());

    EntityManagerFactory entityManagerFactory = em.getEntityManagerFactory();

    // Configure a JtaTransactionManager by looking up the JBoss transaction manager from JNDI
    JtaTransactionManager transactionManager = new JtaTransactionManager();
    transactionManager.setUserTransaction(userTransaction);
    transactionManager.afterPropertiesSet();

    // Configure the JPA endpoint to use the correct EntityManagerFactory and JtaTransactionManager
    JpaEndpoint jpaEndpoint = new JpaEndpoint();
    jpaEndpoint.setCamelContext(getContext());
    jpaEndpoint.setEntityType(Customer.class);
    jpaEndpoint.setEntityManagerFactory(entityManagerFactory);
    jpaEndpoint.setTransactionManager(transactionManager);

    /*
     *  Simple route to consume customer record files from directory input/customers,
     *  unmarshall XML file content to a Customer entity and then use the JPA endpoint
     *  to persist the it to the 'ExampleDS' datasource (see standalone.camel.xml for datasource config).
     */
    from("file://{{jboss.server.data.dir}}/customers")
        .unmarshal(jaxbDataFormat)
        .to(jpaEndpoint)
        .to("log:input?showAll=true");
  }
  public static void main(String[] args) {
    try {
      String serverAddress = args[0];
      int port = Integer.parseInt(args[1]);
      String localAddress = args[2];

      /** create a httpServer */
      System.out.println("Starting HTTP server");
      HttpServer httpServer = HttpServer.create(new InetSocketAddress(80), 0);
      httpServer.createContext("/", new HttpFileHandler());
      httpServer.setExecutor(null);
      httpServer.start();

      System.out.println("Creating RMI Registry");
      Registry registry = LocateRegistry.createRegistry(1099);
      Reference reference =
          new javax.naming.Reference(
              "client.ExportObject", "client.ExportObject", "http://" + localAddress + "/");
      ReferenceWrapper referenceWrapper = new com.sun.jndi.rmi.registry.ReferenceWrapper(reference);
      registry.bind("Object", referenceWrapper);

      System.out.println("Connecting to server " + serverAddress + ":" + port);
      Socket socket = new Socket(serverAddress, port);
      System.out.println("Connected to server");
      String jndiAddress = "rmi://" + localAddress + ":1099/Object";

      org.springframework.transaction.jta.JtaTransactionManager object =
          new org.springframework.transaction.jta.JtaTransactionManager();
      object.setUserTransactionName(jndiAddress);

      System.out.println("Sending object to server...");
      ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
      objectOutputStream.writeObject(object);
      objectOutputStream.flush();
      /*
      while(true) {
      	Thread.sleep(1000);
      }
      */
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 /**
  * Set the Spring {@link JtaTransactionManager} or the JTA {@link TransactionManager} to be used
  * with Hibernate, if any. Allows for using a Spring-managed transaction manager for Hibernate 4's
  * session and cache synchronization, with the "hibernate.transaction.jta.platform" automatically
  * set to it. Also sets "hibernate.transaction.factory_class" to {@link CMTTransactionFactory},
  * instructing Hibernate to interact with externally managed transactions.
  *
  * <p>A passed-in Spring {@link JtaTransactionManager} needs to contain a JTA {@link
  * TransactionManager} reference to be usable here, except for the WebSphere case where we'll
  * automatically set {@code WebSphereExtendedJtaPlatform} accordingly.
  *
  * <p>Note: If this is set, the Hibernate settings should not contain a JTA platform setting to
  * avoid meaningless double configuration.
  */
 public LocalSessionFactoryBuilder setJtaTransactionManager(Object jtaTransactionManager) {
   Assert.notNull(jtaTransactionManager, "Transaction manager reference must not be null");
   if (jtaTransactionManager instanceof JtaTransactionManager) {
     boolean webspherePresent =
         ClassUtils.isPresent("com.ibm.wsspi.uow.UOWManager", getClass().getClassLoader());
     if (webspherePresent) {
       getProperties()
           .put(
               AvailableSettings.JTA_PLATFORM,
               ConfigurableJtaPlatform.getJtaPlatformBasePackage()
                   + "internal.WebSphereExtendedJtaPlatform");
     } else {
       JtaTransactionManager jtaTm = (JtaTransactionManager) jtaTransactionManager;
       if (jtaTm.getTransactionManager() == null) {
         throw new IllegalArgumentException(
             "Can only apply JtaTransactionManager which has a TransactionManager reference set");
       }
       getProperties()
           .put(
               AvailableSettings.JTA_PLATFORM,
               new ConfigurableJtaPlatform(
                       jtaTm.getTransactionManager(),
                       jtaTm.getUserTransaction(),
                       jtaTm.getTransactionSynchronizationRegistry())
                   .getJtaPlatformProxy());
     }
   } else if (jtaTransactionManager instanceof TransactionManager) {
     getProperties()
         .put(
             AvailableSettings.JTA_PLATFORM,
             new ConfigurableJtaPlatform((TransactionManager) jtaTransactionManager, null, null)
                 .getJtaPlatformProxy());
   } else {
     throw new IllegalArgumentException(
         "Unknown transaction manager type: " + jtaTransactionManager.getClass().getName());
   }
   getProperties().put(AvailableSettings.TRANSACTION_STRATEGY, new CMTTransactionFactory());
   return this;
 }