:index-group: DataSources
:jbake-type: page
:jbake-status: status=published
= Resources Declared in Webapp

_Help us document this example! Click the blue pencil icon in the upper
right to edit this page._

== Manager

[source,java]
----
package org.superbiz.bean;

import org.superbiz.resource.ManagerResource;

import javax.annotation.Resource;
import javax.ejb.Singleton;

@Singleton
public class Manager {
    @Resource(name = "My Manager Team", type = ManagerResource.class)
    private ManagerResource resource;

    public String work() {
        return "manage a resource of type " + resource.resourceType();
    }
}
----

== ManagerResource

[source,java]
----
package org.superbiz.resource;

public class ManagerResource {
    public String resourceType() {
        return "team";
    }
}
----

== ManagerServlet

[source,java]
----
package org.superbiz.servlet;

import org.superbiz.bean.Manager;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "manager servlet", urlPatterns = "/")
public class ManagerServlet extends HttpServlet {
    @EJB
    private Manager manager;

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getOutputStream().print(manager.work());
    }
}
----

== ejb-jar.xml

[source,xml]
----
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<ejb-jar/>
----

== service-jar.xml

[source,xml]
----
<ServiceJar>
  <ServiceProvider id="ManagerResource" service="Resource"
                   type="org.superbiz.resource.ManagerResource"
                   class-name="org.superbiz.resource.ManagerResource"/>
</ServiceJar>
----

== resources.xml

[source,xml]
----
<resources>
  <Resource id="My Manager Team" type="org.superbiz.resource.ManagerResource" provider="org.superbiz#ManagerResource"/>
</resources>
----

== web.xml

[source,xml]
----
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"/>
----
