---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    funktion.fabric8.io/kind: Connector
  name: ejb
data:
  deployment.yml: |
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        funktion.fabric8.io/kind: Subscription
        connector: ejb
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            funktion.fabric8.io/kind: Subscription
            connector: ejb
        spec:
          containers:
          - image: funktion/connector-ejb:${project.version}
            name: connector
  schema.yml: |
    ---
    component:
      kind: component
      scheme: ejb
      syntax: ejb:beanName
      title: EJB
      description: The ejb component is for invoking EJB Java beans from Camel.
      label: endpoint,java
      deprecated: false
      async: false
      producerOnly: true
      javaType: org.apache.camel.component.ejb.EjbComponent
      groupId: org.apache.camel
      artifactId: camel-ejb
      version: 2.18.3
    componentProperties:
      context:
        kind: property
        type: object
        javaType: javax.naming.Context
        deprecated: false
        secret: false
        description: The Context to use for looking up the EJBs
        order: 0
      properties:
        kind: property
        type: object
        javaType: java.util.Properties
        deprecated: false
        secret: false
        description: Properties for creating javax.naming.Context if a context has not been configured.
        order: 1
    properties:
      beanName:
        kind: path
        group: producer
        required: true
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Sets the name of the bean to invoke
        order: 0
      method:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Sets the name of the method to invoke on the bean
        order: 1
      cache:
        kind: parameter
        group: advanced
        label: advanced
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: If enabled Camel will cache the result of the first Registry look-up. Cache can be enabled if the bean in the Registry is defined as a singleton scope.
        order: 2
      multiParameterArray:
        kind: parameter
        group: advanced
        label: advanced
        type: boolean
        javaType: boolean
        deprecated: true
        secret: false
        defaultValue: false
        description: 'How to treat the parameters which are passed from the message body.true
          means the message body should be an array of parameters. Note: This option is
          used internally by Camel and is not intended for end users to use.'
        order: 3
      parameters:
        kind: parameter
        group: advanced
        label: advanced
        type: object
        javaType: java.util.Map<java.lang.String,java.lang.Object>
        prefix: bean.
        multiValue: true
        deprecated: false
        secret: false
        description: Used for configuring additional properties on the bean
        order: 4
      synchronous:
        kind: parameter
        group: advanced
        label: advanced
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        order: 5
  documentation.adoc: "[[EJB-EJBComponent]]\nEJB Component\n~~~~~~~~~~~~~\n\n*Available\
    \ as of Camel 2.4*\n\nThe *ejb:* component binds EJBs to Camel message exchanges.\n\
    \nMaven users will need to add the following dependency to their `pom.xml`\nfor\
    \ this component:\n\n[source,xml]\n------------------------------------------------------------\n\
    <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-ejb</artifactId>\n\
    \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
    \ version -->\n</dependency>\n------------------------------------------------------------\n\
    \n[[EJB-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n---------------------\n\
    ejb:ejbName[?options]\n---------------------\n\nWhere *ejbName* can be any string\
    \ which is used to look up the EJB in\nthe Application Server JNDI link:registry.html[Registry]\n\
    \n[[EJB-Options]]\nOptions\n^^^^^^^\n\n\n\n// component options: START\nThe EJB\
    \ component supports 2 options which are listed below.\n\n\n\n{% raw %}\n[width=\"\
    100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
    | Name | Java Type | Description\n| context | Context | The Context to use for\
    \ looking up the EJBs\n| properties | Properties | Properties for creating javax.naming.Context\
    \ if a context has not been configured.\n|=======================================================================\n\
    {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
    The EJB component supports 6 endpoint options which are listed below:\n\n{% raw\
    \ %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
    | Name | Group | Default | Java Type | Description\n| beanName | producer |  |\
    \ String | *Required* Sets the name of the bean to invoke\n| method | producer\
    \ |  | String | Sets the name of the method to invoke on the bean\n| cache | advanced\
    \ | false | boolean | If enabled Camel will cache the result of the first Registry\
    \ look-up. Cache can be enabled if the bean in the Registry is defined as a singleton\
    \ scope.\n| multiParameterArray | advanced | false | boolean | How to treat the\
    \ parameters which are passed from the message body.true means the message body\
    \ should be an array of parameters. Note: This option is used internally by Camel\
    \ and is not intended for end users to use.\n| parameters | advanced |  | Map\
    \ | Used for configuring additional properties on the bean\n| synchronous | advanced\
    \ | false | boolean | Sets whether synchronous processing should be strictly used\
    \ or Camel is allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
    {% endraw %}\n// endpoint options: END\n\n\n[[EJB-BeanBinding]]\nBean Binding\n\
    ^^^^^^^^^^^^\n\nHow bean methods to be invoked are chosen (if they are not specified\n\
    explicitly through the *method* parameter) and how parameter values are\nconstructed\
    \ from the link:message.html[Message] are all defined by the\nlink:bean-binding.html[Bean\
    \ Binding] mechanism which is used throughout\nall of the various link:bean-integration.html[Bean\
    \ Integration]\nmechanisms in Camel.\n\n[[EJB-Examples]]\nExamples\n^^^^^^^^\n\
    \nIn the following examples we use the Greater EJB which is defined as\nfollows:\n\
    \n*GreaterLocal.java*\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    public interface GreaterLocal {\n \n    String hello(String name);\n \n    String\
    \ bye(String name);\n \n}\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    \nAnd the implementation\n\n*GreaterImpl.java*\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    @Stateless\npublic class GreaterImpl implements GreaterLocal {\n \n    public\
    \ String hello(String name) {\n        return \"Hello \" + name;\n    }\n \n \
    \   public String bye(String name) {\n        return \"Bye \" + name;\n    }\n\
    \ \n}\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    \n[[EJB-UsingJavaDSL]]\nUsing Java DSL\n++++++++++++++\n\nIn this example we want\
    \ to invoke the `hello` method on the EJB. Since\nthis example is based on an\
    \ unit test using Apache OpenEJB we have to\nset a `JndiContext` on the link:ejb.html[EJB]\
    \ component with the OpenEJB\nsettings.\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    @Override\nprotected CamelContext createCamelContext() throws Exception {\n  \
    \  CamelContext answer = new DefaultCamelContext();\n \n    // enlist EJB component\
    \ using the JndiContext\n    EjbComponent ejb = answer.getComponent(\"ejb\", EjbComponent.class);\n\
    \    ejb.setContext(createEjbContext());\n \n    return answer;\n}\n \nprivate\
    \ static Context createEjbContext() throws NamingException {\n    // here we need\
    \ to define our context factory to use OpenEJB for our testing\n    Properties\
    \ properties = new Properties();\n    properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,\
    \ \"org.apache.openejb.client.LocalInitialContextFactory\");\n \n    return new\
    \ InitialContext(properties);\n}\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    \nThen we are ready to use the EJB in the Camel route:\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    from(\"direct:start\")\n    // invoke the greeter EJB using the local interface\
    \ and invoke the hello method\n    .to(\"ejb:GreaterImplLocal?method=hello\")\n\
    \    .to(\"mock:result\");\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    \n*In a real application server*\n\nIn a real application server you most likely\
    \ do not have to setup a\n`JndiContext` on the link:ejb.html[EJB] component as\
    \ it will create a\ndefault `JndiContext` on the same JVM as the application server,\
    \ which\nusually allows it to access the JNDI registry and lookup the\nlink:ejb.html[EJB]s.\
    \ However if you need to access a application server on a remote JVM or\nthe likes,\
    \ you have to prepare the properties beforehand.\n\n[[EJB-UsingSpringXML]]\nUsing\
    \ Spring XML\n++++++++++++++++\n\nAnd this is the same example using Spring XML\
    \ instead:\n\nAgain since this is based on an unit test we need to setup the\n\
    link:ejb.html[EJB] component:\n\n[source,XML]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    <!-- setup Camel EJB component -->\n<bean id=\"ejb\" class=\"org.apache.camel.component.ejb.EjbComponent\"\
    >\n    <property name=\"properties\" ref=\"jndiProperties\"/>\n</bean>\n \n<!--\
    \ use OpenEJB context factory -->\n<p:properties id=\"jndiProperties\">\n    <prop\
    \ key=\"java.naming.factory.initial\">org.apache.openejb.client.LocalInitialContextFactory</prop>\n\
    </p:properties>\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    \nBefore we are ready to use link:ejb.html[EJB] in the Camel routes:\n\n[source,XML]\n\
    -------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    <camelContext xmlns=\"http://camel.apache.org/schema/spring\">\n    <route>\n\
    \        <from uri=\"direct:start\"/>\n        <to uri=\"ejb:GreaterImplLocal?method=hello\"\
    />\n        <to uri=\"mock:result\"/>\n    </route>\n</camelContext>\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
    \n[[EJB-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
    \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n*\
    \ link:getting-started.html[Getting Started]\n* link:bean.html[Bean]\n* link:bean-binding.html[Bean\
    \ Binding]\n* link:bean-integration.html[Bean Integration]\n\n"
