Apache Camel и CDI: как зарегистрировать источник данных? java .lang.NullPointerException - PullRequest
0 голосов
/ 06 марта 2020

Следующий код работает нормально во время развертывания, даже когда я получаю объект Datasouce и регистрирую его в контексте:

Класс 1:

@ApplicationScoped
public class ApplicationCamelContext extends DefaultCamelContext {
    private static final Logger LOGGER = LoggerFactory.getLogger( ApplicationCamelContext.class.getName() );

    @Resource(lookup = "java:/datasources/IntegratorMasterdataDS")
    DataSource masterdata;




    @PostConstruct
    void customize() throws SQLException {
        LOGGER.info("Started ApplicationCamelContext: customize");
        setName("acm-ftp-delievery");
        getShutdownStrategy().setTimeout(2L);

        SimpleRegistry registry = new SimpleRegistry();
        Connection c = masterdata.getConnection();
        Statement m = c.createStatement();
        ResultSet rs = m.executeQuery("SELECT * FROM EMPLOYEE");

        while(rs.next()) {
            System.out.println(""+ rs.getString(1));
            break;
        }
        registry.put("masterdata", masterdata);

        setRegistry(registry);

        LOGGER.info("Shutdown ApplicationCamelContext: customize");
    }

}

Класс 2 - это ROute Builder: просто псевдокод здесь, я доступ к мастер-данным, которые я зарегистрировал, но получил NPE

public class ApplicationRoutesBuilder extends RouteBuilder {
   configure{
       from ("jdbc:masterdata")
   }
}

При попытке доступа к jdb c выдается исключение нулевого указателя:

Исключение:

2020-03-06 12:20:27,219 ERROR [CCM_ROUTE] (Camel (ccm-ftp-delievery) thread #1 - timer://ccmdelievery) Exchange[
, Id: ID-alq-esb-app01-unix-cosng-net-1583493465421-1-3
, ExchangePattern: InOnly
, Properties: {CamelCreatedTimestamp=Fri Mar 06 12:20:27 CET 2020, CamelExceptionCaught=java.lang.NullPointerException, CamelExternalRedelivered=false, CamelFailureEndpoint=jdbc://masterdata?outputClass=com.evry.integrator.Employee, CamelFailureRouteId=route2, CamelFatalFallbackErrorHandler=[route2], CamelMessageHistory=[DefaultMessageHistory[routeId=route1, node=log1], DefaultMessageHistory[routeId=route1, node=to1], DefaultMessageHistory[routeId=route2, node=log2], DefaultMessageHistory[routeId=route2, node=log3], DefaultMessageHistory[routeId=route2, node=setBody1], DefaultMessageHistory[routeId=route2, node=to2], DefaultMessageHistory[routeId=route2, node=transform1], DefaultMessageHistory[routeId=route2, node=error-exception-log]], CamelTimerCounter=2, CamelTimerFiredTime=Fri Mar 06 12:20:27 CET 2020, CamelTimerName=ccmdelievery, CamelTimerPeriod=160000, CamelToEndpoint=log://CCM_ROUTE?level=ERROR&maxChars=500000&multiline=true&showBody=false&showBodyType=false&showCaughtException=true&showException=true&showExchangeId=true&showHeaders=true&showProperties=true&showStackTrace=true}
, Headers: {breadcrumbId=ID-alq-esb-app01-unix-cosng-net-1583493465421-1-3, CamelJdbcColumnNames=[LOC_LOCATIONNAME, ORGSTR_UNITID, LOCATIONID, CM_COMPANYNAME, MOBILEPHONE, UNITID, LEADER_USERID, FIRSTNAME, EMAIL, ENDDATE, LEADERLEVEL, EMPLOYMENTTYPE, IMAGEPROFILE, COUNTRY, LASTNAME, USERID, MANAGER, COMPANYID, ORG_UNITNAME], firedTime=Fri Mar 06 12:20:27 CET 2020}
, CaughtExceptionType: java.lang.NullPointerException, CaughtExceptionMessage: null, StackTrace: java.lang.NullPointerException
        at org.apache.camel.util.ObjectHelper.newInstance(ObjectHelper.java:1738)
        at org.apache.camel.util.ReflectionInjector.newInstance(ReflectionInjector.java:32)
        at org.apache.camel.impl.DefaultInjector.newInstance(DefaultInjector.java:45)
        at org.apache.camel.cdi.CdiCamelInjector.lambda$newInstance$0(CdiCamelInjector.java:39)
        at java.util.Optional.orElseGet(Optional.java:267)
        at org.apache.camel.cdi.CdiCamelInjector.newInstance(CdiCamelInjector.java:39)
        at org.apache.camel.component.jdbc.JdbcProducer.newBeanInstance(JdbcProducer.java:369)
        at org.apache.camel.component.jdbc.JdbcProducer.extractRows(JdbcProducer.java:341)
...