나는 followgin 구성 파일을 가지고 있으며 최대 절전 모드 세션을 가져 오는 동안 다음 예외가 발생합니다. hibernate.cfg.xml에 문제가 있거나 누락 된 속성이 있습니까?weblogic (10.3.4) 콘솔의 이상한 최대 절전 모드
의 persistence.xml
<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="test" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>test-ds</jta-data-source>
<properties>
<property name="hibernate.jndi.url" value="t3://127.0.0.1:7001" />
<property name="hibernate.connection.datasource" value="test-ds" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WeblogicTransactionManagerLookup" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.current_session_context_class" value="jta" />
</properties>
<!-- For WebLogic AppSer. -->
<class>test.model.BaseEntity</class>
<class>test.model.InvoiceDetail</class>
<class>test.model.InvoiceMovement</class>
<class>test.model.InvoicePaymentItem</class>
<class>test.model.Job</class>
<class>test.model.Member</class>
</persistence-unit>
나는 또한 웹 로직 구성 파일의 클래스 경로 jpa2.0 단지를 추가하고를 만든
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>
<session-factory>
<property name="hibernate.jndi.url">t3://127.0.0.1:7001</property>
<property name="hibernate.connection.datasource">test-ds</property>
<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WeblogicTransactionManagerLookup</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.current_session_context_class">jta</property>
<mapping class="test.model.BaseEntity" />
<mapping class="test.model.InvoiceDetail" />
<mapping class="test.model.InvoiceMovement" />
<mapping class="test.model.InvoicePaymentItem" />
<mapping class="test.model.Job" />
<mapping class="test.model.Member" />
</session-factory>
있는 hibernate.cfg.xml weblogic 관리 콘솔을 통해 test-ds라는 이름의 데이터 소스와 jndi 이름이 test-ds라는 이름으로 저장됩니다. 모든 모델 조작 메소드를 ModelOperations 클래스로 어셈블했습니다. 이 클래스에서
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class ModelOperations implements ModelOperationsLocal {
@PersistenceContext(unitName = "beyazfatura")
private EntityManager em;
...
나는 방법은 아래에 언급 한 :
@Override
@SuppressWarnings("unchecked")
public List<Member> getMembers(int first, int pageSize, String sortField,
String sortOrder, Map<String, String> filters, Date beginDate,
Date endDate) {
Session session = null;
List<Member> memberList = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
Criteria crit = session.createCriteria(Member.class);
Criterion betweenDate = null;
if (beginDate != null) {
if (endDate == null) {
endDate = new Date();// now
}
betweenDate = Restrictions.between("createTime", beginDate,
endDate);
}
if (betweenDate != null) {
crit.add(betweenDate);
}
// sorting
if (sortField != null && !sortField.isEmpty()) {
if (!sortOrder.equalsIgnoreCase("UNSORTED")) {
if (sortOrder.equalsIgnoreCase("ASCENDING")) {
crit = crit.addOrder(Order.asc(sortField));
} else {
crit = crit.addOrder(Order.desc(sortField));
}
}
}
// filtering
if (filters != null && !filters.isEmpty()) {
Iterator<Entry<String, String>> iterator = filters.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
Class<?> type = Member.class.getDeclaredField(
entry.getKey()).getType();
try {
if (type.isEnum()
|| Number.class.isAssignableFrom(type)) {
crit = crit.add(Restrictions.eq(
entry.getKey(),
type.getDeclaredMethod("valueOf",
String.class).invoke(null,
entry.getValue())));
} else {
crit = crit.add(Restrictions.like(entry.getKey(),
entry.getValue(), MatchMode.START));
}
} catch (Exception ex) {
// Aim: return the list anyway.
LOG.warn(ex, ex);
}
}
}
if (first != -1) {
crit = crit.setFirstResult(first);
}
if (pageSize != -1) {
crit = crit.setMaxResults(pageSize);
}
memberList = crit.list();
} catch (Exception e) {
LOG.error(e, e);
} finally {
session.close();
}
return memberList;
}
@Override
public Long getMemberCount(Date beginDate, Date endDate) {
Session session = null;
Long returnValue = 0L;
try {
session = HibernateUtil.getSessionFactory().openSession();
Criteria crit = session.createCriteria(Member.class);
Criterion betweenDate = null;
if (beginDate != null) {
if (endDate == null) {
endDate = new Date();// now
}
betweenDate = Restrictions.between("createTime", beginDate,
endDate);
}
if (betweenDate != null) {
crit.add(betweenDate);
}
crit.setProjection(Projections.rowCount());
if(crit.list() != null){
returnValue = (Long) crit.list().get(0);
} else {
returnValue = 0L;
}
} catch (Exception e) {
LOG.error(e, e);
} finally {
session.close();
}
return returnValue;
}
이는 HibernateUtil과 클래스입니다 : 내가 getMember 전화
public class HibernateUtil {
private static final Logger LOG = Logger.getLogger(HibernateUtil.class);
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
} catch (Throwable e) {
LOG.error(e, e);
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
클래스의 헤더는 다음과 같다 및 getMemberCount 메소드를 (데이터 테이블의) 백업 빈에서 가져올 수 있습니다. 나는 backing-bean에서 modeloperations 클래스에 주석을 달았다. @EJB 주석을 사용하기 위해 weblogic에 jsf2.war을 라이브러리로 배포합니다. 관리 빈과 LazyDataModel의 헤더는 다음과 같습니다 :
백업 콩 헤더 :
@ManagedBean(name = "memberManagement")
@SessionScoped
public class MemberManagement {
@EJB
private ModelOperationsLocal modelOperations;
private static final Logger LOG = Logger.getLogger(MemberManagement.class);
private MemberLazyDataModel memberModel;
@PostConstruct
public void initModel() {
memberModel = new MemberLazyDataModel(pageSize, beginDate, endDate,
modelOperations);
}
LazyDataModel
public class MemberLazyDataModel extends LazyDataModel<Member> {
private ModelOperationsLocal modelOperations;
private static final Logger LOG = Logger.getLogger(MemberLazyDataModel.class);
private int pageSize;
private Date beginDate;
private Date endDate;
public MemberLazyDataModel() {
}
public MemberLazyDataModel(int pageSize, Date beginDate, Date endDate,
ModelOperationsLocal modelOperations) {
this.pageSize = pageSize;
this.beginDate = beginDate;
this.endDate = endDate;
this.modelOperations = modelOperations;
super.setPageSize(pageSize);
super.setRowCount(modelOperations.getMemberCount(beginDate, endDate).intValue());
}
@Override
public List<Member> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String, String> filters) {
super.setRowCount(modelOperations.getMemberCount(beginDate, endDate).intValue());
return modelOperations.getMembers(first, pageSize, sortField,
sortOrder.name(), filters, beginDate, endDate);
}
@Override
public String getRowKey(Member member) {
return member.getId() + "";
}
@Override
public Member getRowData(String rowKey) {
List<Member> members = (List<Member>) getWrappedData();
for (Member member : members) {
if ((member.getId() + "").equals(rowKey)) {
return member;
}
}
return null;
}
}
나는 다음 내가 할 멤버 데이터 테이블을 포함하는 페이지를 클릭하면 예외 (처음으로 hibernate.cfg.xml을 얻은 것처럼) :
INFO Configuration - configuring from resource: /hibernate.cfg.xml
INFO Configuration - Configuration resource: /hibernate.cfg.xml
INFO Configuration - Configured SessionFactory: null
일부 테이블 바인딩 로그 다음 로그 및 예외 :
INFO TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
INFO ransactionManagerLookupFactory - instantiating TransactionManagerLookup: org.hibernate.transaction.WeblogicTransactionManagerLookup
INFO ransactionManagerLookupFactory - instantiated TransactionManagerLookup
INFO SettingsFactory - Automatic flush during beforeCompletion(): disabled
INFO SettingsFactory - Automatic session close at end of transaction: disabled
INFO SettingsFactory - JDBC batch size: 15
INFO SettingsFactory - JDBC batch updates for versioned data: disabled
INFO SettingsFactory - Scrollable result sets: enabled
INFO SettingsFactory - JDBC3 getGeneratedKeys(): enabled
INFO SettingsFactory - Connection release mode: auto
INFO SettingsFactory - Default batch fetch size: 1
INFO SettingsFactory - Generate SQL with comments: disabled
INFO SettingsFactory - Order SQL updates by primary key: disabled
INFO SettingsFactory - Order SQL inserts for batching: disabled
INFO SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
INFO ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
INFO SettingsFactory - Query language substitutions: {}
INFO SettingsFactory - JPA-QL strict compliance: disabled
INFO SettingsFactory - Second-level cache: enabled
INFO SettingsFactory - Query cache: disabled
INFO SettingsFactory - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
INFO SettingsFactory - Optimize cache for minimal puts: disabled
INFO SettingsFactory - Structured second-level cache entries: disabled
INFO SettingsFactory - Statistics: disabled
INFO SettingsFactory - Deleted entity synthetic identifier rollback: disabled
INFO SettingsFactory - Default entity-mode: pojo
INFO SettingsFactory - Named query checking : enabled
INFO SettingsFactory - Check Nullability in Core (should be disabled when Bean Validation is on): disabled
INFO SessionFactoryImpl - building session factory
INFO BasicTypeRegistry - Type registration [materialized_blob] overrides previous : [email protected]
INFO SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
INFO SchemaUpdate - Running hbm2ddl schema update
INFO SchemaUpdate - fetching database metadata
ERROR SchemaUpdate - could not get database metadata
java.sql.SQLException: Cannot set auto commit to "true" when in distributed transaction.
at weblogic.jdbc.wrapper.JTSConnection.setAutoCommit(JTSConnection.java:625)
at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:60)
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:168)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:375)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
이 예외에 대한 귀하의 생각은 어떻습니까? 감사합니다. .
Weblogic에 대해 많이 알지 못하지만 응용 프로그램에서 java : space에 최대 절전 모드 항목을 만들 수 없기 때문에 Weblogic 구성 문제와 같은 것 같습니다. 나는 다른 이름을 시도 할 것이다. – beny23
'hibernate.session_factory_name'에서 http://stackoverflow.com/questions/1665086/how-to-access-sessionfactory-of-hibernate-using-jndi-in-weblogic-9-2-server/에서 주어진대로 시도하십시오. 1665191 # 1665191 – JoseK