2011-10-18 34 views
15

Tôi đã thực hiện thành công kết nối đến máy chủ MySQL từ xa thông qua Glassfish, tuy nhiên mỗi lần tôi thực hiện thay đổi đối với mã hoặc tệp XHTML, tôi cần mở bảng điều khiển quản trị viên Glassfish và xóa hồ bơi kết nối. lỗi khi tôi chỉ làm mới trang. Có ai có kinh nghiệm này không? Tôi có thể đăng mã hoặc thông tin khác nếu cần.Tại sao tôi cần xóa hồ bơi kết nối mỗi khi tôi triển khai lại?

HTTP Status 500 -

báo cáo loại ngoại lệ

nhắn

DESCRIPTIONTHE chủ đã gặp lỗi nội bộ() ngăn nó từ thực hiện yêu cầu này.

ngoại lệ

javax.servlet.ServletException: HÀN-000.049 Không thể gọi [phương pháp] @PostConstruct công com.myapp.QuestionController.initialize() trên [email protected]

nguyên nhân gốc rễ

org.jboss.weld.exceptions.WeldException: HÀN-000.049 Không thể gọi [phương pháp] @PostConstruct công com.myapp.interfaces.QuestionController.initialize() trên com.[email protected]

nguyên nhân gốc rễ

java.lang.reflect.InvocationTargetException

nguyên nhân gốc rễ

javax.ejb.EJBException

nguyên nhân gốc rễ

javax.persistence.PersistenceException: Ngoại lệ [EclipseLink-4002] (Dịch vụ kiên trì Eclipse - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Internal Ngoại lệ: java.sql.SQLException: Lỗi khi cấp phát kết nối. Nguyên nhân: java.lang.RuntimeException: Chấn ngoại lệ trong XAResource.start: Error Code: 0

nguyên nhân gốc rễ

ngoại lệ [EclipseLink-4002] (Eclipse Persistence Dịch vụ - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Internal Ngoại lệ: java.sql.SQLException: Lỗi khi cấp phát kết nối. Nguyên nhân: java.lang.RuntimeException: Chấn ngoại lệ trong XAResource.start: Error Code: 0

nguyên nhân gốc rễ

java.sql.SQLException: Lỗi trong phân bổ một kết nối. Nguyên nhân: java.lang.RuntimeException: Có ngoại lệ trong XAResource.bắt đầu:

nguyên nhân gốc rễ

javax.resource.spi.ResourceAllocationException: Lỗi trong phân bổ một kết nối . Nguyên nhân: java.lang.RuntimeException: Chấn ngoại lệ trong XAResource.start:

nguyên nhân gốc rễ

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Chấn ngoại lệ trong XAResource.start:

nguyên nhân gốc rễ

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Chấn ngoại lệ trong XAResource.start:

012.

nguyên nhân gốc rễ

java.lang.RuntimeException: Chấn ngoại lệ trong XAResource.start:

nguyên nhân gốc rễ

javax.transaction.xa.XAException: com.sun.appserv.connectors.internal. api.PoolingException: javax.resource.spi.LocalTransactionException: truyền thông liên kết thất bại

các gói cuối cùng nhận được thành công từ máy chủ là 435.409 milliseco nds trước. Gói cuối cùng được gửi thành công tới máy chủ là 7 mili giây trước.

Image of config

Persistence XML

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.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_2_0.xsd"> 
    <persistence-unit name="SertifikatPU" transaction-type="JTA"> 
     <jta-data-source>jdbc/sertifikatdb</jta-data-source> 
    </persistence-unit> 
</persistence> 

Trong mục "thuộc tính bổ sung" trong Glassfish thiết lập hồ kết nối Tôi vừa cấu hình: servername, URL, người dùng và mật khẩu.


TÔI ĐÃ giải quyết vấn đề này

enter image description here

tôi làm bảng kép của riêng tôi, tương tự như một trong Oracle.

CREATE TABLE dual 
(
    x VARCHAR(1) 
); 

INSERT INTO dual(x) VALUES('y'); 
+0

Non giao dịch Connections, giao dịch Isolation :, Isolation Level: -> Đây là những nhóm dưới giao dịch, ai trong số họ? – LuckyLuke

+0

Bạn có được kết nối như thế nào? Điều đó có thể gây ra ngoại lệ này. Ngoài ra cấu hình hồ bơi kết nối là gì. – r0ast3d

+0

Có tham chiếu đến kết nối đang được giữ ở đâu đó không? Bạn có thể thêm thông tin thêm ... Ngoài ra trên máy chủ từ xa, cấu hình cho số lượng khách hàng và kết nối là gì? – r0ast3d

Trả lời

20

nguyên nhân gốc rễ của bạn, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure có liên quan đến this Glassfish bug, điều này giải thích (trong tab bình luận ở phía dưới) mà bạn có thể cần phải làm mới kết nối không hợp lệ của bạn.

Nhận xét lỗi theo số Jagadish nói để kiểm tra loại xác thực kết nối của bạn. Nếu nó được đặt thành "tự động" (mặc định), trình điều khiển JDBC có thể lưu trữ dữ liệu xác thực kết nối trước đó và không có tương tác cơ sở dữ liệu thực tế nào xảy ra trong quá trình xác thực kết nối trong tương lai.

Để giải quyết sự cố, hãy đặt connection-validation-method="table"validation-table-name="any_table_you_know_exists" (thay thế any_table_you_know_exists bằng tên của bất kỳ bảng hiện có nào). Làm điều này buộc các kết nối phải nói chuyện với cơ sở dữ liệu thay vì cache; nếu kết nối không hợp lệ, kết nối sẽ bị xóa và được tạo lại. Bạn cũng có thể cần chỉ định is-connection-validation-required="true".

bài viết để giúp với cấu hình bổ sung:

  1. This article cũng giải thích các vấn đề cụ thể.
  2. Jagadish's Oracle Blog Article về chủ đề này có thêm thông tin.
  3. Article giải thích chi tiết Xác thực kết nối JDBC của Glassfish.

văn bản từ blog của Jagadish của:

AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required=true 
domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required = true 

AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method=table 
domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method = table 

bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name=sys.systables 
domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name = sys.systables 

Lưu ý rằng mã mẫu đề cập đến sys.systables, mà là một bảng MS SQL mà được đảm bảo để tồn tại. Đối với Oracle, hãy tham khảo bảng được bảo đảm dual. Đối với MySQL, tạo một bảng 1 cột chỉ cho mục đích xác nhận; chơi an toàn và điền trước bảng bằng cách chèn một hàng dữ liệu.

+0

Cảm ơn bạn đã trả lời. Tôi mới đến điều này vì vậy tôi có thể cần một chút giúp đỡ về nơi để cấu hình này. Tôi đã đi đến localhost: 4848 -> JDBC hồ bơi kết nối -> chọn kết nối của tôi -> sau đó nâng cao tab. Tôi đã tìm thấy phương thức xác thực kết nối mà bạn đang nói đến và cũng đã chọn yêu cầu xác thực kết nối. Nhưng tôi không thấy tên bảng hợp lệ. – LuckyLuke

+0

Ngoài ra, hãy xem [bài viết này] (http://blogs.oracle.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc) càng sớm càng tốt. Dường như 'nó cũng được viết bởi cùng một Jagadish mà tôi đề cập trước đó (blog của anh ấy!) Và gợi ý sử dụng 'fail-all-connections' để làm mới thất bại. [Ở đây] (http://alexandru-ersenie.com/2011/03/01/glassfish-jdbc-connection-validation-explained/) là bài viết thứ hai giải thích chi tiết về Xác thực Kết nối JDBC của glassfish. Cả hai đều là lần đọc tuyệt vời! – JoshDM

+0

Trong 'domain.xml' của bạn, mã kết nối xml của bạn trông như thế nào? Tôi tin rằng đó là nơi bạn đặt các thuộc tính mà tôi đã đề xuất. – JoshDM

1

Nếu bạn đang sử dụng trình điều khiển này?

com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 

Tôi thấy rằng bạn đang sử dụng một trình điều khiển khác với hình ảnh đính kèm ...

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