2013-05-24 8 views
14

Tôi đang cố gắng để tìm hiểu lý do tại sao ứng dụng web của tôi ném mộtjavax.naming.NameNotFoundException: Tên không bị ràng buộc trong Bối cảnh này. Không tìm thấy

javax.naming.NameNotFoundException: Name [flexeraDS] is not bound in this Context. Unable to find [flexeraDS]. 

khi một em gái một từ mà tôi đang sao chép các cấu hình âm thầm chạy.

tôi có:

  1. tạo từ netbeans một kiên trì mới bằng cách nhấp chuột phải và chọn "kiên trì mới", tôi không quan tâm đến giá trị thực tế tôi cho nhưng tôi chỉ cần cho các tập tin persistence.xml được tạo trong thư mục bên phải.
  2. sửa context.xml của tôi như sau phù hợp với một trong những dự án từ chị làm việc
  3. sửa web.xml của tôi để chứa một DataSource tài nguyên như hình dưới đây
  4. sửa persistence.xml của tôi như sau lại phù hợp với các giá trị tương tự mà trên công việc dự án chị em.
  5. thêm tất cả thư viện có trong dự án khác vào trong thư mục lib của tôi và thêm chúng từ NetBeans để được đưa vào bên trong chiến tranh một cách chính xác.

context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/PetLogin"> 
    <ResourceLink global="ds/flexeraDS" name="ds/flexeraDS" type="javax.sql.DataSource"/> 
</Context> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app ....> 
<resource-ref> 
     <description>DB Connection</description> 
     <res-ref-name>ds/flexeraDS</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 
</web-app> 

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
      xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd "> 
    <persistence-unit name="flexerajpa"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <non-jta-data-source>java:/comp/env/ds/flexeraDS</non-jta-data-source> 
     <properties> 

      <property name="eclipselink.ddl-generation" value="create-tables" /> 
      <property name="eclipselink.ddl-generation.output-mode" 
         value="database" /> 
      <property name="eclipselink.weaving" value="static" /> 
      <property name="eclipselink.logging.level" value="WARNING" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Bây giờ dự án syster tôi một số kiến ​​thức quản lý để tạo thư mục cơ sở dữ liệu của nó bên trong apache-tomcat-7.0.40/bin/exampleDB khi khởi động trong khi tôi không tạo nó và ném một lỗi như trên.

Các mã nơi lỗi được ném là lần đầu tiên tôi kết nối với cơ sở dữ liệu:

EntityManager entityManager = PersistenceProvider.createEntityManager(); 

nơi lớp PersistenceProvider là:

public final class PersistenceProvider 
{ 

    private static Map<String, Object> lOptions = new HashMap<String, Object>(); 

    static 
    { 
     lOptions.put(PersistenceUnitProperties.CACHE_SHARED_DEFAULT, "false"); 
    } 
    private static EntityManagerFactory factory = Persistence 
      .createEntityManagerFactory("flexerajpa", lOptions); 

    private PersistenceProvider() 
    { 
    } 

    /** 
    * @return 
    */ 
    public static EntityManager createEntityManager() 
    { 
     return factory.createEntityManager(); 
    } 

    /** 
    * @return 
    */ 
    public static Metamodel getMetamodel() 
    { 
     return factory.getMetamodel(); 
    } 
} 

tôi ra khỏi lý do có thể cho điều này .. nếu có ai có đề nghị. Cảm ơn bạn

+0

Trong trường hợp của tôi là phần quan trọng là nó là 'java:/comp/env//' –

Trả lời

12

Ok phát hiện ra tệp máy chủ Tomcat phải được định cấu hình để nguồn dữ liệu hoạt động. Vì vậy, chỉ cần thêm:

<Resource 
auth="Container" 
driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 
maxActive="20" 
maxIdle="10" 
maxWait="-1" 
name="ds/flexeraDS" 
type="javax.sql.DataSource" 
url="jdbc:derby:flexeraDB;create=true" 
    /> 
+1

Tôi nghĩ Đó là không nên đặt yếu tố trực tiếp trong server.xml tệp, như được chỉ định trong tài liệu Apache? –

5

Bạn cũng có thể thêm

<Resource 
auth="Container" 
driverClassName="org.apache.derby.jdbc.EmbeddedDriver" 
maxActive="20" 
maxIdle="10" 
maxWait="-1" 
name="ds/flexeraDS" 
type="javax.sql.DataSource" 
url="jdbc:derby:flexeraDB;create=true" 
/> 

dưới META-INF/context.xml tập tin (Điều này sẽ chỉ ở mức ứng dụng).

0

ugh, chỉ để lặp lại trường hợp của riêng tôi, trong đó đưa ra khoảng cùng một lỗi - trong khai báo tài nguyên (server.xml) đảm bảo KHÔNG bỏ qua driverClassName và ví dụ: đối với Oracle, nó là "oracle.jdbc.OracleDriver" và tệp JAR phù hợp (ví dụ: ojdbc14.jar) tồn tại trong% CATALINA_HOME%/lib