2012-01-21 42 views
18

Tôi đã nghiên cứu giải pháp này cả tuần và trong khi đã có giải pháp cho các vấn đề tương tự, không có địa chỉ đó và khắc phục trực tiếp vấn đề này.Java Google App Engine và Google Cloud SQL chạy trên máy chủ dev cục bộ

Tôi đã tạo một dự án ứng dụng web bằng cách sử dụng Google App Engine và Google Cloud SQL. Chạy ứng dụng GAE bằng cách sử dụng plugin Google eclipse và máy chủ MySQL cục bộ mà ứng dụng hoạt động tốt.

Khi chạy ứng dụng từ dòng lệnh sử dụng: -

sudo /opt/appengine-java-sdk-1.6.1/bin/dev_appserver.sh --jvm_flag=-Drdbms.server=local --jvm_flag=-Drdbms.driver=com.mysql.jdbc.Driver --jvm_flag=-Drdbms.url=jdbc:mysql://localhost:3306/twincam?user=root --port=7070 /home/ben/workspace/Twincam/war 

tôi nhận được như sau: -

java.lang.IllegalStateException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
at com.google.appengine.api.rdbms.dev.LocalRdbmsServiceLocalDriver.registerDriver(LocalRdbmsServiceLocalDriver.java:95) 

Tôi có classpath tham khảo mysql-connector.jar nằm ở/Twincam /war/WEB-INF/lib/mysql-connector-java-5.1.18-bin.jar được tham chiếu bởi thư viện người dùng của tôi như trong tệp .classpath sau và cấu trúc thư mục: -

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="lib" path="war/WEB-INF/lib/mysql-connector-java-5.1.18-bin.jar"/> 
    <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1-javadoc.jar"/> 
    <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1-sources.jar"/> 
    <classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1.jar"/> 
    <classpathentry kind="output" path="war/WEB-INF/classes"/> 
</classpath> 

enter image description here

Cập nhật: Tôi đã kiểm tra quyền truy cập file và tất cả đều đặt ở mặc định 664 vì vậy tôi tự tin rằng đây không phải là vấn đề.

Trả lời

36

Tôi gặp sự cố tương tự.

Tôi đã giải quyết nó bằng cách thả mysql .jar trong appengine-java-sdk-x.x.x/lib/impl.

+0

@MattFenwick, tôi có thể tìm appengine-java-sdk-xxx/lib/impl ở đâu? Tôi sử dụng nhật thực trong các cửa sổ .. –

+0

@AlonShmiel tìm trong các thuộc tính eclipse> google> công cụ ứng dụng> định cấu hình sdk – auval

2

AFAIK Nếu bạn đang sử dụng GAE thì bạn không thể sử dụng trình điều khiển JDBC. Tôi không biết làm thế nào nó có thể làm việc trong nhật thực trong khi lớp Socet bị hạn chế trong GAE. Bạn nên sử dụng trình điều khiển GAE nội bộ thay vì mysql JDBC.

com.google.appengine.api.rdbms.AppEngineDriver 

Sau đó, trong nhật thực bạn có thể cấu hình kết nối tới db mysql địa phương của bạn như trong example cũng thấy example này như thế nào nó được cấu hình

Biên soạn như tinh khiết GWT và đưa nó vào Tomcat với JDBC, nên làm việc , nhưng không phải là ứng dụng GAE.

+0

Cảm ơn bạn đã trả lời nhưng [link] đầu tiên (http://code.google.com/intl/pl-PL/eclipse/docs/cloudsql-createapp.html) cung cấp một cách rõ ràng liên kết để donwload Trình điều khiển JDBC cho sử dụng với nhật thực. Các đối số VM mà tôi đã sử dụng là trực tiếp từ [ở đây] (https://developers.google.com/cloud-sql/docs/developers_guide_java#without_eclipse) và cũng tham chiếu đến một gói trong mysql-connector-java-5.1.18-bin .jar –

9

Câu trả lời của Matt đã giúp tôi rất nhiều, tôi tin rằng đây là giải thích hoàn chỉnh hơn.

Tôi có thể xác minh rằng bạn có thể nhận một cá thể MYSQL cục bộ để làm việc với Google App Engine đang chạy trong chế độ phát triển, để không phải chịu các chi phí sắp tới liên quan đến tùy chọn Cloud SQL từ Google, trong khi phát triển.

Đầu tiên, vì Matt cho biết bạn phải đặt lọ kết nối mysql vào APPENGINE_HOME/lib/impl.

Tôi đang ở trên cửa sổ. Tôi đã làm điều này bằng cách đầu tiên tìm nơi SDK của tôi cư trú. Trong dự án của tôi trong nhật thực trong trình thám hiểm gói tôi nhấp chuột phải vào "App Engine SDK [App Engine - 1.6.4]", tôi chọn Properties từ trình đơn thả xuống, và trong cửa sổ pop up kết quả, hãy nhấp vào "Configure SDKs" màu xanh lam ... "liên kết.

Điều này cho thấy vị trí của SDK ứng dụng của tôi. Đi đến thư mục đó trong cửa sổ Windows Explorer, mở lib/impl và thả trong lọ kết nối mysql của bạn, được sao chép từ dự án nhật thực GAE của bạn.con đường của tôi là:

C: \ Software \ eclipse \ plugins \ com.google.appengine.eclipse.sdkbundle_1.6.4.v201203300216r37 \ appengine-java-sdk-1.6.4 \ lib \ impl

mỗi người hướng dẫn ở đây (https://developers.google.com/eclipse/docs/cloudsql-createapp) bạn có nghĩa vụ phải để lại chuỗi kết nối mã java của bạn chỉ vào prod (jdbc: google: rdbms: // ... thay vì jdbc: mysql: // ...) NHƯNG bạn cần phải đi vào các thuộc tính dự án Eclipse, Google, Máy ứng dụng, Google Cloud SQL và trong "Phiên bản SQL phát triển (được sử dụng bởi máy chủ phát triển cục bộ)", hãy chọn nút radio "Sử dụng cá thể MySQL". Lần sau khi bạn khởi chạy GAE, chuỗi kết nối trong mã java của bạn sẽ bị bỏ qua để ủng hộ máy chủ MySQL cục bộ của bạn.

Đảm bảo dịch vụ MySQL đang chạy và bạn sẵn sàng sử dụng.

Điều này khiến tôi mất nhiều thời gian hơn con số cần thiết. Tôi nghĩ điều quan trọng là từ Google Documents, nếu bạn không hiểu/sử dụng thông tin này, bạn sẽ thử và sử dụng chuỗi jdbc mysql và chạy vào lỗi cho phép socket vì GAE không thể chuyển đến cổng 3306 trừ khi bạn làm như tôi mô tả :

Bạn không cần kết nối rõ ràng với cá thể SQL phát triển trong mã của mình - điều này được thực hiện tự động khi bạn chạy ứng dụng của mình trong máy chủ phát triển. Ví dụ SQL phát triển để kết nối được chuyển tự động đến máy chủ phát triển của bạn thông qua các đối số VM bởi GPE khi chạy.

(Tôi đã tải lên 4 hình ảnh để giúp với lời giải thích này và chỉ sau khi tôi hoàn thành nó cho tôi biết bạn cần 10 điểm uy tín để tải hình ảnh - jeesh)

+0

Cảm ơn bạn đã chỉ ra điều về URL. Tôi nghĩ rằng đó là một chút không rõ ràng trong các tài liệu. Đối với tất cả những người đã dành thời gian tìm ra lý do tại sao họ nhận được AccessRestrictedExceptions: ** KHÔNG SỬ DỤNG URL TRỰC TIẾP ĐẾN MYSQL INSTANCE KHI APPENGINE ĐƯỢC BẬT **. Sử dụng "URL Google" chuẩn như * jdbc: google: rdbms: // instance_name/guestbook * và công cụ ứng dụng sẽ thay thế nó trên bay –

+0

@mark scheel bạn là người hùng của tôi trong ngày. Tôi đã phá vỡ đầu của tôi với lỗi này gây phiền nhiễu và đã bất lực cho đến khi tôi tìm thấy bạn trả lời. – LostPuppy

+0

Cảm ơn bạn ... rất nhiều –

1

Tôi chỉ cần cài đặt Eclipse + GPE4.2 trong một máy mới sử dụng GAE SDK1.7.5 trên dịch vụ Juno Release 1 Build id: 20121004-1855 và buộc phải sao chép trình điều khiển JDBC tại appengine-java-sdk-xxx/lib/impl. Ban đầu tôi đã quên mất điều này và tôi đã dành khoảng 2 ngày để gỡ lỗi mã của mình.

Sẽ thật tuyệt nếu có thêm thông tin về các vấn đề về trang GPE. Sẽ rất tuyệt khi có thể cung cấp thêm thông tin cho Google.

0

Vâng, sau khi đọc tất cả viết cho các bạn, và đọc một nội dung khác, cuối cùng tôi có thể liệt kê dữ liệu của tôi từ một bảng của cá thể Google ... Điện thoại

1. tôi đi theo ví dụ này: [Using Google Cloud SQL with App Engine Java SDK

nhưng trong guestbook.jsp tôi đã thêm dòng này:

<%@ page import="com.google.appengine.api.rdbms.AppEngineDriver" %> 

sau đó, tôi đã thay đổi kết nối URL vào đó, không có tên trong trường hợp của tôi.

url = "jdbc:google:rdbms:INSTANCE_NAME/DATABASE_NAME"; 

cũng tôi nhận xét dòng này

// Class.forName("com.mysql.jdbc.GoogleDriver"); 

2.- Như đã trình bày ở trên, tôi đã sao chép mysql-connector.jar thả nó trong appengine-java-sdk-x.x.x/lib/impl.

3. Tôi cấu hình dự án như được mô tả ở đây Create a New Web App with Cloud SQL Support

4.- Tôi cấu hình ví dụ Google SQL của tôi như được mô tả ở đây Configuring Access

5. Cuối cùng tôi đã triển khai dự án như đã mô tả ở đây Uploading Your Application

tôi có thể chạy nó tại địa phương và cũng hoạt động tốt.

Vâng, tôi hy vọng điều này sẽ giúp ích cho bạn!

Các vấn đề liên quan