目录

1.前言

■实现原理:容器管理事务

■代码实现简单描述:

2.EJB 标签

2.1.EJB中的有状态与无状态( @stateless/@stateful )

2.1.@Stateless 与 @ApplicationScoped

2.JPA

■定义

■1.1.配置文件  ---  persistence.xml

・1.1.1.配置文件  ---  persistence.xml  --- 中指定数据源

■1.2.OSS jar

■1.3.一些JPA的类(举例)

■1.4. jpa 框架在实体类(Entity)中添加非数据库字段的属性---@Transient

■1.5. JPA 原生配置

■1.6. EntityManager 管理事务

■1.7.ORM框架

■1.8.javax.persistence

■1.9.transaction-type

■1.10.JTA 与 RESOURCE_LOCAL 之间的区别

■1.11.JPA原生代码

■1.12.关于【persistence.xml】 中的【transaction-type】

■1.13. 关于【persistence.xml】 中的【shared-cache-mode】

■1.14.JPA介绍

■1.15.JPA原生代码

■1.16.xx

■1.17.xx

■1.18.xx

■1.19.xx

2.EJB-事务管理

2.1.EJB默认事物

2.2.EJB的事务管理分如下两个方面

2.3.容器管理事务

3.WebSphere架构

・cell,node,server,app

・Cluster

4.WebSphere常用功能呢

【システム管理】

・查看部署的主机的信息

【セキュリティ】【証明書】

・客户端证明书

【故障检修】【トラブルシューティング】

・查看Cell,Node,Server的构造---  【树形结构】

・查看jar加载顺序

【アプリケーション】【Application】 

・查看Application的数据源 (比如 JNDI)

・查看Application的EJB

  ( ↑ ★ EJB中的各个方法,都是一个事物,中间处理出错,可以回滚 ★)

・查看Cluster

・查看所有的Application

・查看所有的Application部署的位置(Context root) 上下文

・查看Application发布的位置

・配布した後の資材の構造 (赤字は固定)

・查看引用的资源文件(配置文件)

【リソース】

・指定配置文件(资源文件)的位置

【服务】【サーバー】 

・查看Server,Node,Cluster的构造--- 【一览表】

・查看Server的JDK版本

・查看Server的端口号

・查看Server上面部署的App

・查看Server上面部署的App的资源情报(比如 JNDI)

■5.WebSphere 错误调查

5.1. Failed to load webapp: Context root /xxx/***

5.2.openjpa-2.2.3-SNAPSHOT-r422266:1764177 nonfatal store error

└org.apache.openjpa.persistence.EntityNotFoundException

最终解决2:清空缓存

5.3.org.apache.openjpa.lib.jdbc.ReportingSQLException

5.4.XXX

5.5.XXX

【数据源】【データ・ソース】

・配置1

・配置2

■6.各种目录

6.1.缓存目录(实际运行目录)

6.2.配置文件目录

6.3.启动Log目录

6.4.XXX

6.5.XXX

6.6.XXX


=====

1.前言

看了一段业务对于的处理代码,

代码里面没有任何事物处理的相关处理,

却实现了事物功能。

■实现原理:容器管理事务

容器管理事务主要是通过容器自动控制事务的开启,提交和回滚,开发人员不需要手工编写代码,由容器来控制事务的边界,一般来说是业务方法的开始

■代码实现简单描述:

・ 代码部署在WebSphere上

・数据库处理在Service层中,在Sevice层中,有多个对数据库的操作。

・是使用JPA (ORM)实现数据库操作的。可以实现回滚功能。

・有关于JPA的配置文件WEB-INF/classes/META-INF/persistence.xml

・JPA的配置文件中,管理事务管理方式是JTA,即是由应用程序服务器的实现事物管理。

・ service层中,使用了一个EJB的标签:@Stateless。

2.EJB 标签

2.1.EJB中的有状态与无状态( @stateless/@stateful )

1.Stateful session bean的每个用户都有自己的一个实例,所以两者对stateful session bean的操作不会影响对方。另外注意:如果后面需要操作某个用户的实例,你必须在客户端缓存Bean的Stub对象(JSP通常的做法是用Session缓存),这样在后面每次调用中,容器才知道要提供相同的bean实例。 
2.Stateless Session Bean不负责记录使用者状态,Stateless Session Bean一旦实例化就被加进会话池中,各个用户都可以共用。如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响。
3.从内存方面来看,Stateful Session Bean与Stateless Session Bean比较,Stateful Session Bean会消耗J2EE Server 较多的内存,然而Stateful Session Bean的优势却在于他可以维持使用者的状态。

2.1.@Stateless 与 @ApplicationScoped

・@Stateless标注的类,会被作为EJB,在WebSphere的EJB管理中被看到
・@Stateless标注的类,因为是EJB,每一个方法,都有事务。(整个方法的开始,结束,作为一个事务被管理)
・被@Stateless 或 @ApplicationScoped 标注的类,都是被EJB容器管理的,可以在别的类中,使用@inject类,注入进来

===

2.JPA

jpa详解_java菜鸟1的博客-CSDN博客

■定义

JPA(Java Persistence API)和JDBC类似,也是官方定义的一组接口,但是它相比传统的JDBC,它是为了实现ORM而生的,即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间形成一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

=========================================================

■1.1.配置文件  ---  persistence.xml

persistence.xml   // JPA persistence.xml

JPA persistence.xml 文件初学者指南_allway2的博客-CSDN博客_persistence.xml

persistence.xml在下面这个目录中

WEB-INF/classes/META-INF

・1.1.1.配置文件  ---  persistence.xml  --- 中指定数据源

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistencehttp://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"version="2.1"><!-- 有一个或者多个persistence-unit --><!-- transaction-type:在J2EE应用服务器中缺省为JTA(Java Transaction API),在J2SE和简单的servlet容器中缺省为标准本地事务 RESOURCE_LOCAL。为避免歧义,我们应明确设置 --><!-- persistence-unit里面可以为空,但是如果设置,必须要顺序 --><persistence-unit name="EntityMappingsTest" transaction-type="RESOURCE_LOCAL"><!-- 首先是<description>,小例子不提供 --><!-- provider:具体的javax.persistence.spi.PersistenceProvider实现,缺省值为classpath中第一个JPA的实现 --><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><!-- 如果persistence-unit的transaction-type为JTA,使用<jta-data-source>,如果为RESOURCE_LOCAL,使用<non-jta-data-source>。他们的区别在于后者使用EntityTransaction接口,而前者使用UserTransaction接口,缺省是前者(JTA)。它们均采用JNDI(Java Naming and Directory Interface)方式,给出数据源。 --><non-jta-data-source>java:comp/env/jdbc/learnTest</non-jta-data-source><!-- <mapping-file>:基于classpath的XML mapping file,如果不指定,缺省为orm.xml,可以设置多个mapping-file --><!-- <jar-file>:JPA实现将对jar包进行绑定标记扫描,如果里面有@Entity,@Embeddable,@javax.persistence.MappedSuperclass或者@javax.persistence.Converter,加入本持续化单元中,可以设置多个jar-file --><!-- <class>:JPA实现将对这个class加入到持续化单元中,这个class必须带有@Entity,@Embeddable,@javax.persistence.MappedSuperclass或者@javax.persistence.Converter。可以设置多个class --><!-- 设置<exclude-unlisted-classes/>或者<exclude-unlisted-classes>true</exclude-unlisted-classes>表示只关注在jar-file和在class中所设置的,不扫描其他。删除<exclude-unlisted-classes/>或者<exclude-unlisted-classes>false</exclude-unlisted-classes>则表示将扫描classpath位置;如果本文件在JAR文件,则扫描JAR文件的classes,如果本文件位于classes中的某个特定目录,则只扫描该目录下的文件(例如指定到某个package)。 --><exclude-unlisted-classes>false</exclude-unlisted-classes><!-- <shared-cache-mode>:是否缓存entity,--><!-- ➤ NONE表示不缓存,--><!-- ➤ ALL表示缓存所有的entities。--><!-- ➤ ENABLE_SELECTIVE 表示只缓存带有@Cacheable或者@Cacheable(true)标识的entity --><!-- ➤ DISABLE_SELECTIVE 表示除了@Cacheable(false)外均缓存 --><!-- ➤ UNSPECIFIED 表示有JPA的提供者来决定,Hibernate ORM缺省为ENABLE_SELECTIVE,但采用这种方式,对于移植可能会存在混淆,应明确设定 --><shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode><!-- <validation-mode> --><!-- ➤ NONE表示不使用Bean validator,--><!-- ➤ CALLBACK表示在写操作(insert,update,delete)前进行validate --><!-- ➤ AUTO,如果classpath中存在Bean validator provider,则CALLBACK,不存在则NONE --><!-- 如果使用validate,而我们自定义了spring framework的validator,JPA将忽略这个自定义。因此建议使用NONE,在数据持久化之前进行校验,而不是在持久化这个层面。 --><validation-mode>NONE</validation-mode><!-- <properties>以name-value的方式提供其他JPA属性(如JDBC连接,用户,密码,schema产生成设置等)以及提供者特有的属性(如Hibernate设置)。 --><properties><!-- 禁止schema生成,即不根据entity创建表格 --><property name="javax.persistence.schema-generation.database.action" value="none" /></properties></persistence-unit>
</persistence>

=========

JNDI

java:comp/env 是环境命名上下文(environment naming context(ENC)),是在EJB规范1.1以后引入的,引入这个是为了解决原来JNDI查找所引起的冲突问题,也是为了提高EJB或者J2EE应用的移植性。

java:comp/env/jdbc/
java:comp/env/jdbc/YourDataSourceName

https://www.cnblogs.com/dekn/archive/2006/02/14/330308.html

=========

■1.2.OSS jar

org.eclipse.persistence.jpa

java - 我对Maven依赖感到困惑:“org.eclipse.persistence.jpa”和“org.hibernate” | persistence

■1.3.一些JPA的类(举例)

javax.persistence.PersistenceContext
(所属jar  javax.persistence-2.x.x.jar )

■1.4. jpa 框架在实体类(Entity)中添加非数据库字段的属性---@Transient

问:jpa表实体的字段和表的字段是一一对应的。比如,那么,如果我在查询时,想在表字段的基础上添加几个返回的字段,怎么办?
解:在实体类中添加我们想添加的字段,并加上注解:@Transient,

@Transient
privite String  userId;

效果:这样在调用此类返回时,便有了此字段,我们可以给这个字段赋值,进行操作,而且不会在数据库中添加这个字段。

■1.5. JPA 原生配置

JPA原生配置和使用_Chgl16的博客-CSDN博客

■1.6. EntityManager 管理事务

import javax.persistence.EntityManager;
import javax.persistence.Persistence;public class EMUtil {public static EntityManager getEM() {return Persistence.createEntityManagerFactory("hotel").createEntityManager();}
}import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;

----

public void insertMember(Member member) {em.getTransaction().begin();em.persist(member);em.getTransaction().commit();// 仅仅一个数据库连接,就不关了
//  em.close();
}

----

import javax.persistence.*;@Entity
@Table(name = "member")
public class Member {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private int id;private String phone;private String identity;private String username;private String password;/** getter and setter **/
}

----

■1.7.ORM框架

JPA(Java Persistence API), JPA是一个ORM的标准规范,而不是一个具体的ORM框架
    (  ORM(object relation mapping) 对象关系映射关系 ,面向对象的对象模型和关系型数据之间的相互转换。)

介绍几种ORM框架_火腿编程的博客-CSDN博客

・Hibernate: Hibernate是一个全自动的ORM模型,Hibernate可以自动生成SQL语句,自动执行。
・MyBatis:MyBatis是一款半自动的ORM模型,它支持定制化 SQL、存储过程及高级映射。
・【javax.persistence-2.x.x.jar】或【javaee-web-api-7.0.jar】中的接口,类
  javax.persistence.Query和javax.persistence.EntityManager都是JAP发布的接口,是用于对象持久化API。
    使用,[em.createNativeQuery(sql);]创建Query

■1.8.javax.persistence

javax.persistence.Persistence - JPA class

■1.9.transaction-type

JPA 事务策略,它可以采用以下两个值之一:
・JTA
・RESOURCE_LOCAL

如果您使用的是 JTA,您可以使用jta-data-source为关联的 JTA 指定 JNDI 名称DataSource,
而对于RESOURCE_LOCAL,您需要使用non-jta-data-source.

■1.10.JTA 与 RESOURCE_LOCAL 之间的区别

JPA实现可以选择自己管理事务(RESOURCE_LOCAL),还是由应用程序服务器的JTA实现对其进行管理。

在大多数情况下,RESOURCE_LOCAL可以。这将使用基本的JDBC级事务。缺点是该事务对于JPA持久性单元而言是本地的,因此,如果您想要一个跨多个持久性单元(或其他数据库)的事务,则RESOURCE_LOCAL可能不够好。

JTA还用于跨JMS和JCA之类的系统管理事务,但这对我们大多数人来说是相当奇特的用法。

要使用JTA,您需要在应用程序服务器中对其进行支持,并且还需要JDBC驱动程序的支持

■1.11.JPA原生代码

【JAVA】-【JPA】-orm思想及jpa配置_刘晓伟-liu的博客-CSDN博客

■1.12.关于【persistence.xml】 中的【transaction-type】

默认值

(属性)使用的事物类型。
 有两种:JTA和RESOURCE_LOCAL(在J2EE环境中默认是【JTA】而在J2SE环境中默认是【RESOURCE_LOCAL】)
 当使用的是jta数据源时,默认的事物类型是JTA,如果使用的不是jta数据源时,默认的事物类型就是RESOURCE_LOCAL。

内容说明

比较RESOURCE_LOCAL和JTA持久性上下文

==========
使用<persistence-unit transaction-type =“RESOURCE_LOCAL”> 您负责EntityManager(PersistenceContext / Cache)创建和跟踪...

-----

您必须使用EntityManagerFactory来获取EntityManager
生成的EntityManager实例是 PersistenceContext / Cache
EntityManagerFactory只能通过@PersistenceUnit注释注入(不是@PersistenceContext)
不允许使用@PersistenceContext来引用RESOURCE_LOCAL类型的单元
您必须使用EntityTransaction API开始/提交对EntityManger的每次调用
两次调用entityManagerFactory.createEntityManager()会导致两个独立的EntityManager实例,从而产生两个独立的PersistenceContexts / Caches。
使用多个EntityManager 实例 几乎绝不是一个好主意(除非你已经破坏了第一个实体 ,否则不要创建第二个实例 )

==============
使用<persistence-unit transaction-type =“JTA”> CONTAINER将执行EntityManager(PersistenceContext / Cache)创建和跟踪...

-----

您不能使用EntityManagerFactory来获取EntityManager
您只能获取容器提供的EntityManager
可以通过@PersistenceContext注释注入EntityManager (不是@PersistenceUnit)
您不能使用@PersistenceUnit来引用JTA类型的单位
容器给出的EntityManager是对与JTA事务关联的PersistenceContext / Cache的引用 。
如果没有正在进行的JTA事务, 则无法使用 EntityManager,因为没有PersistenceContext / Cache。
具有EntityManager引用到同一事务中 相同单元的每个人都将自动引用相同的PersistenceContext / Cache
在JTA 提交时刷新并清除PersistenceContext / Cache

自己负责创建 EntityManager

======================================

package com.dmsd.test;import com.dmsd.jpa.Customer;
import org.junit.jupiter.api.Test;import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;public class jpaTest1 {/*** 测试jpa保存* jpa操作步骤* 1、加载配置文件创建工程对象* 2、通过实体管理类工程获取实体管理器* 3、开启事务* 4、完成CRUD* 5、提交事务-回滚事务* 6、释放资源*/@Testpublic void testSave(){//加载配置文件EntityManagerFactory factory= Persistence.createEntityManagerFactory("myjpa");//参数为配置文件中的持久化单元名称//通过实体管理器工厂获取实体管理器EntityManager em = factory.createEntityManager();//获取事务对象,开启事务EntityTransaction tx = em.getTransaction();//获取事务对象tx.begin();//开始事务//完成增删改查操作Customer customer=new Customer();customer.setCustName("test201127");customer.setCustINdustry("beijing");customer.setCustAddress("111");customer.setCustLevel("1");customer.setCustPhone("029833904");customer.setCustSource("333");//保存em.persist(customer);//将实体保存到数据表中//提交事务tx.commit();//释放资源em.close();//释放实体管理器factory.close();//释放工厂}
}

自己负责创建时的persistence.xml文件。(要放到main下面的【src/resources】的【META-INF】目录下面)

main

└java

└resources

└META-INF

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<!--配置persistence-unit节点称为持久化单元name:持久化单元名称transaction-type:事务管理的方式JTA:分布式事务管理RESOURCE_LOCAL:本地事务管理
--><persistence-unit name="myjpa" transaction-type="RESOURCE_LOCAL"><!--       配置jpa实现方式--><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><properties><!--    配置数据库信息用户名:javax.persistence.jdbc.user密码: javax.persistence.jdbc.password驱动: javax.persistence.jdbc.driver数据库地址: javax.persistence.jdbc.url--><property name="javax.persistence.jdbc.user" value="root"/><property name="javax.persistence.jdbc.password" value="root"/><property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><!-- value中:mysql:///代表本地mysql数据库-3306端口。jpa代表数据库名            --><property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/><!--  可选配置,配置jpa实现方的配置信息显示sql:          false|true  true为显示数据库表,false为不显示数据库表自动创建数据库表:   hibernate.hbm2ddl.auto可选值:create:程序运行时创建数据库,如果有表先删除在创建update:程序运行时创建表,如果有表,不会创建表none:不会创建表--><property name="hibernate.show_sql" value="true"/><property name="hibernate.hbm2ddl.auto" value="update"/></properties></persistence-unit>
</persistence>

======================================

■1.13. 关于【persistence.xml】 中的【shared-cache-mode】

https://www.cnblogs.com/zr520/p/5024127.html

■1.14.JPA介绍

https://localhost01.blog.csdn.net/article/details/83422893

===

https://www.cnblogs.com/zhuxiang1029/p/14900749.html

■1.15.JPA原生代码

【JAVA】-【JPA】-orm思想及jpa配置_刘晓伟-liu的博客-CSDN博客

■1.16.xx

xxx

■1.17.xx

xxx

■1.18.xx

xxx

■1.19.xx

xxx

=========================================================

2.EJB-事务管理

2.1.EJB默认事物

EJB--事务管理 ._51CTO博客_ejb服务

@TransactionManagement(TransactionManagementType.CONTAINER)

表示指定事务的类型。如果省略,默认为CMT方式。

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;@Stateless(name = "UserManager")
@Remote
@TransactionManagement(TransactionManagementType.CONTAINER)
public class UserManagerBean implements UserManager {@PersistenceContextprivate EntityManager em ;@TransactionAttribute(TransactionAttributeType.REQUIRED)public void addUser(String name) {User s = new User();s.setName(name);em.persist(s);System.out.println("服务器端执行成功:保存姓名" + name);}}

2.2.EJB的事务管理分如下两个方面

1、CMT(容器管理事务)(默认)
2、BMT(Bean管理事务)

EJB事务控制(CMT和BMT两种方式以及JTA事务) - 姜师爷闯世界 - 博客园

2.3.容器管理事务

容器管理事务主要是通过容器自动控制事务的开启,提交和回滚,开发人员不需要手工编写代码,由容器来控制事务的边界,一般来说是业务方法的开始

================================

15.

3.WebSphere架构

・cell,node,server,app

基本结构:单元(cell) ——> 多个节点(node) ——> 多个服务(server) ——> 多个应用(app)

WebSphere8集群配置_websphere集群配置共享库_chjttony的博客-CSDN博客

・单元Cell:整个分布式网络中一个或多个节点的逻辑分组,是一个管理上的概念, 是管理员将节点间逻辑关联起来的实现方法, 可以将单元看作是WAS最大的作用域
・节点Node:是受管服务器(Server)的逻辑分组, 节点通常与具有唯一IP主机地址的逻辑或物理计算机系统对应, 节点不能跨多台计算机,它也是管理使用上的概念
・服务Server:Application Server Instance,即实际部署应用的地方,在ND版本中一个节点

可能有多个Server,但非ND版本(Single Server版本),一个节点只能使用一个Server

・Cluster

对WebSphere中Cell、Node、Server、Node Agent、Cluster 的理解_websphere cluster_仁王_雅治的博客-CSDN博客

・Cluster(集群)是一组Server的集合,通常这些Server在一起处理同一类业务请求。集群负责平衡服务器之间的工作负载。当在集群上安装应用程序时,会在每个集群成员上自动安装此应用程序。

===

====

4.WebSphere常用功能呢

【システム管理】

・查看部署的主机的信息

一个节点下面,有多个Node (ノード)

一个Node,      对应i1个【XXXXCell_XXX_dmger】,即DM(Deployment Manager)

一个Node,      对应多1个主机(Host)

一个Node(1个主机),      对应多个 服务(Server)

【システム管理】----【Cell】【Node】【Host】
   ⇒セル
     └ノード
       └XXXXCell_XXX_dmgr
       └XXXXCell_node01
       └XXXXCell_node02
          ★ 在这个,可以查看节点对应的  【host名】

【セキュリティ】【証明書】

・客户端证明书

・セキュリティ
   └SSL証明書および鍵管理
       └エンドポイント・セキュリティ構成の管理
           インバウンド
             XXXCell
                nodes
                  XXXnodes
                  XXXnodes
                  XXXnodes●

                     Servers
                        XXX Servers1
                        XXX Servers2
                        XXX Servers3
                clusters
                  XXXCluster
                  XXXCluster
                  XXXCluster
           
           
           アウトバウンド
             XXXCells
                nodes
                  XXXnodes
                  XXXnodes
                  XXXnodes
                clusters
                  XXXCluster
                  XXXCluster
                  XXXCluster

    ●⇒鍵ストアおよび証明書
        └CellDefaultKeyStore
        └CellDefaultTrustStore
        └NodeDefaultKeyStore  ?
        └NodeDefaultTrustStore●●
        
        
           ●●⇒個人証明書

====================

【故障检修】【トラブルシューティング】

・查看Cell,Node,Server的构造---  【树形结构】

【トラブルシューティング】 ( trouble shooting 故障检修)
   ⇒サーバー・ローダー・ビューアー
      ⇒XXXCell
       └【ノード】
         └XXX Node1
           └【サーバー】
              └XXX Server1
              └XXX Server2
         └XXX Node2

・查看jar加载顺序

websphere7.0 jar包冲突解决办法,类加载顺序-蒲公英云

【トラブルシューティング】 // 故障检修
    ⇒クラス・ローダー・ビューアー
        ⇒Cell
          ⇒ノード
            ⇒サーバー
               ⇒XXXServer
                   ⇒アプリケーション
                      ⇒YourApplication
                          ⇒ClassLoader - 検索順序
                           1.
                           2.
                           3.
                           4.
                           ..
                           n.工程的目录 // 工程的下面的jar是最后被加载的。

シューティング 【名】【英】shooting 射击

==============================

【アプリケーション】【Application】 

・查看Application的数据源(比如 JNDI)

【アプリケーション】
   ⇒すべてのアプリケーション
      ⇒YourApplicationName

         javax.sql.DataSource
              【ターゲット・リソースJNDI名】的部分  
                  //jdbc/xxxDB      // 可以在数据源配置中,查到这个
              【リソース参照】的部分                           
                  //jdbc/xxxSchema  //     在数据源配置中,查不到这个,是数据库的Schema

・查看Application的EJB

【アプリケーション】
   ⇒すべてのアプリケーション
      ⇒YourApplicationName

         ⇒ビジネス・インターフェースを持つエンタープライズBean

  ( ↑ ★ EJB中的各个方法,都是一个事物,中间处理出错,可以回滚 ★)

・查看Cluster

【アプリケーション】
   ⇒すべてのアプリケーション
      ⇒YourApplicationName

           └ターゲット特定アプリケーションの状況
              ↑ここで、所属のClusterが表示あれる。

xxxClusterX

・查看所有的Application

【アプリケーション】
   ⇒すべてのアプリケーション

      ⇒YourApplicationName
      ⇒XXX。。。

         ↑ 部分Application在这里并没有显示
   ⇒アプリケーション・タイプ
      ⇒WebSphere エンタープライズ・アプリケーション

          ⇒YourServerName
          ⇒XXX。。。

         ↑ 这里可以查看所有的Application

・查看所有的Application部署的位置(Context root) 上下文

【アプリケーション】
   ⇒アプリケーション・タイプ
      ⇒WebSphere エンタープライズ・アプリケーション
          ⇒YourServerName

             ⇒「Web モジュールのコンテキスト・ルート」
                 ↑ 可以看到Context root情报「/xxx/」路径

・查看Application发布的位置

【アプリケーション】
   ⇒アプリケーション・タイプ
      ⇒WebSphere エンタープライズ・アプリケーション
          ⇒YourServerName

             ⇒詳細プロパティー

               ⇒アプリケーション・バイナリ

                 ↑ * ロケーション(絶対パス)

                                        【/Apl/XXSystem/installedApps/】

配布した後の資材の構造 (赤字は固定)

/Apl/XXSystem/installedApps

└YourEarName-editionYourEditionName.ear

└META-INF

└YourEarName.war

└META-INF

└persistence.xml   // (JPAの配置ファイル)

└WEB-INF

└classes

└lib

└*.xml

・查看引用的资源文件(配置文件)

【アプリケーション】
   ⇒アプリケーション・タイプ
      ⇒WebSphere エンタープライズ・アプリケーション
          ⇒YourServerName

             ⇒参照

               リソース参照

==============================

【リソース】

・指定配置文件(资源文件)的位置

【リソース】 (指定配置文件(资源文件)的位置)
  └URL
    xxxx.properties ファイル Location
    
    file:///AAA/BBB/xxxx.properties

==============================

【服务】【サーバー】 

・查看Server,Node,Cluster的构造--- 【一览表】

可以通过 在【アプリケーション】找到的xxxClusterX,在这里找到对应的xxxxServer X

サーバー 
   ⇒すべてのサーバー

显示了下面的信息

==============
名前(Server)、ノード、クラスター名、状況、保守モード、バージョン、。。。

xxxxServer XxxxClusterX

==============

・查看Server的JDK版本

【サーバー】 
   ⇒すべてのサーバー
      ⇒YourServerName

           ⇒Java SDK

・查看Server的端口号

【サーバー】  
   ⇒すべてのサーバー
      ⇒YourServerName

         ⇒通信
           ⇒ポート
             ⇒WC_defaulthost(应用程序访问端口)

・查看Server上面部署的App

【サーバー】 
   ⇒すべてのサーバー
      ⇒YourServerName

           ⇒インストール済みアプリケーション
             
(一个Server上面,可以部署多个App,多个App使用同一个端口号)
10.123.123.126:12006/web1
10.123.123.126:12006/web2
10.123.123.126:12006/web3

・查看Server上面部署的App的资源情报(比如 JNDI)

【サーバー】 
   ⇒すべてのサーバー
      ⇒YourServerName

           ⇒インストール済みアプリケーション
              ⇒YourApplicationName

⇒リソース参照

└「javax.sql.DataSource 」的部分

                           └【リソース参照】的部分                           
                   //jdbc/xxxSchema  //     在数据源配置中,查不到这个,是数据库的Schema

                            └【ターゲット・リソースJNDI名】的部分  
                    //jdbc/xxxDB      // 可以在数据源配置中,查到这个

===

■5.WebSphere 错误调查

5.1. Failed to load webapp: Context root /xxx/***

Caused by: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load webapp: Context root /xxx/*** is already bound. Cannot start application ideal。

原因:

Application中,「コンテキスト・ルート」这里、可以查看路径「/xxx/」
有别的Application也使用了这个「/xxx/」路径。
停止占用了这个「コンテキスト・ルート」的Application即可。

===

5.2.openjpa-2.2.3-SNAPSHOT-r422266:1764177 nonfatal store error

└org.apache.openjpa.persistence.EntityNotFoundException

前言:新增了一个EJB

===

org.apache.openjpa.persistence.EntityNotFoundException

タイプ "xxxxx.xxxx.xxxx.XXXEntity"、oid "A12345" のインスタンスは、データ・ストアにもう存在していません。これは別のトレサビリティでそのインスタンスを削除したが、キャッシュされたものがこのコンテキストにまだ含まれることを意味している可能性があります。

FailedObject:xxxxx.xxxx.xxxx.XXXEntity-A12345

oid "A12345" : 是查询的表的主键的值。

=====

原因:执行了2次查询,

第一次查询时,使用的是代码的SQL (Schema666),对应的表中有数据。

第二次查询,是框架自己的查询 (Schema Default),对应的表中,没有数据。

所以,在错误信息中,才会出现事务相关的信息。

(临时解决:

发布时,对应数据库关联的 Entity, 指定Schema666,这样第二次查询时,和第一次查询时,就是同一个Schema了。

@Table(name=“xxxxx”, schema="Schema666"))

=====

===

尝试解决1:(看看有没有主表,子表直接的关系。)

=== === === === === === === ===

javax.persistence.EntityNotFoundException: Unable to find 某个类 with id 
原因:

无论是@OneToOne 还是@ManyToOne,出现这个原因都是因为子表(被关联表)中没有主表(关联表)中ID所对应的记录。

解决办法:

检查为什么子表中没有主表中ID对应的记录

如果子表中没有主表ID对应的记录也可以正常加载数据,那么需要在主表字段上加一个@NotFound Annotation。示例如下:

@OneToOne(optional=true )
@JoinColumn(name="UserId ",insertable=false, updatable=false)
@NotFound(action=NotFoundAction.IGNORE)
private UserId userId;

这样,当子表中没找到数据时,主表中对应的field就是null,而不会报错了。

尝试失败,定义的表结构,根本没有主表,子表的关联。

补足说明:主表和子表

====

补足说明:DB2中,创建外键约束

-- 创建测试主表. ID 是主键.CREATE TABLE test_main (  id      INT   NOT NULL,  value   VARCHAR(10),  PRIMARY KEY(id)  );

-- 创建测试子表. CREATE TABLE test_sub (  id      INT  NOT NULL,  main_id INT ,  value   VARCHAR(10),  PRIMARY KEY(id)  )

-- 插入测试主表数据.INSERT INTO test_main(id, value) VALUES (1, 'ONE');INSERT INTO test_main(id, value) VALUES (2, 'TWO');
-- 插入测试子表数据.INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');

默认外键约束方式
db2 => ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id)REFERENCES test_main;

=== === === === === === === ===

尝试解决2:

=================================

下面的链接中,虽然出现的和我是同样的错误,但是,他的错误应该是子表造成的。

java - OpenJPA : Cascade Delete issue - Stack Overflow

===

//Parent
@Entity
@Table(name = "PARENT")
public class Parent  implements Serializable {
private static final long serialVersionUID = 1L;@Id
@Column(name = "PRIMARY_ID", updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer primaryID;@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, targetEntity = Child.class)
private List<Child> child;//Child@Entity
@Table(name = "CHILD")
public class Child  implements Serializable {private static final long serialVersionUID = 1L;@EmbeddedId
private ChildPK id;@MapsId("primaryID") //Maps to primaryID in ChildPK
@ManyToOne
@JoinColumn(name = "PRIMARY_ID",nullable=false)
private Parent parent;public Child() {
}

===

public static void main(String[] args) {EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa-test");EntityManager entityManager = entityManagerFactory.createEntityManager();Parent parent = entityManager.find(Parent.class, 15149);entityManager.getTransaction().begin();entityManager.remove(parent);entityManager.getTransaction().commit();
}

===

下面只是一个类似的例子,我本次遇到的问题,并没有出现【RollbackException】异常

Exception in thread "main" <openjpa-2.2.3-SNAPSHOT-r422266:1715851 fatal store error> org.apache.openjpa.persistence.RollbackException: The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
FailedObject: com.entity.test.Parent -15149
    at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:594)
    at com.test.Test.main(Test.java:76)
Caused by: <openjpa-2.2.3-SNAPSHOT-r422266:1715851 fatal general error> org.apache.openjpa.persistence.PersistenceException: The transaction has been rolled back.  See the nested exceptions for details on the errors that occurred.
FailedObject: com.entity.test.Parent-15149
    at org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2352)
    at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2189)
    at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2087)

==========================================
最终解决1:

更换了一个IT环境,问题就解决了。。。(并非彻底解决,之前的一个环境废掉了。。。)

最终解决2:清空缓存

/xxx/yourInstallFolder/WebSphere/AppServer/profiles/yourWebSphereApplication/config/cells/YourCellName/applications/yourApplicationName

删除:yourApplicationName  目录,重新启动WebSphere的Application,问题解决

===

5.3.org.apache.openjpa.lib.jdbc.ReportingSQLException

前言:在数据库中,添加了几个字段,然后新增查询,更新处理。

===

org.apache.openjpa.lib.jdbc.ReportingSQLException: 使用されているコンテキストで、"T0.NewColumn"は無効です。. SQLCODE=-206,SQLSTATE=42703.

"NewColumn" :テーブルで、新規追加のColumn

com.ibm.db2.jcc.am.SqlException:。。。エラー関連えて戻された情報 SQLCODE=-206,SQLSTATE=42703. およびメッセージトークン "XXXXX_ID"が含まれています。.SQLCODE=-727,SQLSTATE=56098.

===
下面这篇文字也是类似的错误。(但是我新增的字段,都是用大写定义的呀!)

DB2 SQLCODE=-206, SQLSTATE=42703 定义表字段问题_sqlcode -206_dearbaba_8520的博客-CSDN博客

"STATUS" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=3.53.71

更多例外 ... An error occurred during implicit system action type "2". Information returned for the error includes SQLCODE "-206", SQLSTATE "42703" and message tokens "STATUS".. SQLCODE=-727, SQLSTATE=56098, DRIVER=3.53.71

======

执行SQL文时总是报这个错误,原因是:

在DB2中,默认情况下所有的名称都可包含一下字符:A-Z(大写) 0到9  @、#、$和_(下划线) 名称不能以数字和下划线开头。

数据库对象的表,其命名遵循以上规则,所以即使利用命令创建表时,使用的是小写,DB2仍会将其转换为大写。

但需要注意的是,并非db client软件也会自动转换,我在使用ibm data studio4或Aqua data studio等客户端时,发现统计studio 提供的图形界面创建,并不能自动转换为大写,

比如使用studio创建表时将字段定义为小写的status,这样再使用普通的SQL语句操作,例如:

select * from LARGE_RECEIPT where status='E' 就会报错

解决方法:定义时用大写字母

=====

【TODO】解决:。。。

5.4.XXX

xxx

5.5.XXX

xxx

【数据源】【データ・ソース】

・配置1

websphere环境下JPA多对多时关闭result set-百度经验

・配置2

xxx

========================

■6.各种目录

6.1.缓存目录(实际运行目录)

/app/WebSphere/AppServer/profiles/AppSrv01/config/cells/YDZYTNode01Cell/applications/yourApplicationName

/xxx/yourInstallFolder/WebSphere/AppServer/profiles/yourWebSphereApplication/config/cells/YourCellName/applications/yourApplicationName

===

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/config/cells/DefaultCell01

===

6.2.配置文件目录

=====

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/config/cells/DefaultCell01/nodes/DefaultNode01

=======

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/config/cells/DefaultCell01/nodes/DefaultNode01/servers/server1

====

6.3.启动Log目录

/Logs/IMB/was/YourCell/YourServer/SystemOut.log

6.4.XXX

xxx

6.5.XXX

xxx

6.6.XXX

=====

JPA、EJB、事物管理、WebSphere ---相关内容整理相关推荐

  1. 病理图像相关内容整理

    乳腺癌论文: [1] Spanhol, F., Oliveira, L. S., Petitjean, C., Heutte, L., A Dataset for Breast Cancer Hist ...

  2. 哈格管理信息系统【内容整理】

    管理信息系统:涉及对信息技术工具的规划.开发.管理和运用,其目的是帮助人们完成与信息处理和信息管理相关的一切任务. 管理信息系统中的三种重要资源:人.信息.信息技术. 关于信息技术投资在不同活动中所占 ...

  3. 清除string内容_前端面试之javascript相关内容整理一

    1.js有哪些数据类型?(死记就行,好嗨哟) 答:js基本数据类型:String.Number.Boolean.Null.undefined 混合数据类型:Object(Array) 2.手写AJAX ...

  4. C++中“map和set”相关内容整理分析

    目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 4. set 和 map简单使用: set简单使用 insert erase vs multiset find erase map的简 ...

  5. 汽车发动机和变速箱相关内容整理

    1, 发动机功率计算公式: 其中P为发动机功率(KW),T为扭矩(Nm),n为发动机转速(rpm) 2, 发动机.离合器和变速箱介绍: -发动机提供车辆的动力输出,但是正常工作转速区间很窄,导致车辆速 ...

  6. 【项目管理】Scrum内容整理

    针对Scrum相关内容整理如下:(持续更新补充) 目录 定义 角色 四个会议 实施流程 工具 通用实践 敏捷价值观 (更重视左边) 敏捷原则 相关观点 定义 Scrum是迭代式增量软件开发过程,通常用 ...

  7. 【项目管理】RUP内容整理

    针对RUP相关内容整理如下:(持续更新补充) 目录 定义 核心概念 三大特点 核心工作流 十大要素 相关观点 定义 RUP(Rational Unified Process),统一软件开发过程,统一软 ...

  8. 【项目管理】PMO内容整理

    针对PMO相关内容整理如下:(持续更新补充) 目录 定义 职责 引入作用 工作思路 具体落地建议 相关观点 定义 PMO (Project Management Office)一般称为项目管理办公室. ...

  9. OHDSI 相关内容 1

    OHDSI相关内容整理 前言 一.OHDSI简介 二.工具介绍 1.ATLAS CDM Atlas WebAPI 1. 配置文件修改,需要修改的配置文件主要是 `application.propert ...

最新文章

  1. 给新创建的用户 赋予所有的权利 *.* 查看权限 删除用户 ---------DCL用户权限管理篇...
  2. CSU 1204 Rectangles
  3. 学习Oracle分析函数(Analytic Functions)
  4. [转]Windows server 2008网络负载均衡集群
  5. java反编译class文件,一种最最简单的方法
  6. 单片机c语言加到4归0,单片机C语言教程四
  7. 如何查找qq邮箱的服务器地址
  8. 在win10系统中安装多个不同版本的python环境
  9. 手机间高速传输---微传
  10. Pycharm安装打包工具
  11. 关于网络上的刷钻方法
  12. 17.答题卡识别判卷
  13. C++将小数化成分数
  14. 剑指offer.把数字翻译成字符串
  15. 自学抓去淘女郎所有模特美女的图片 手稿
  16. c#通过winform实现地磅称重管理客户端
  17. 转载百度百科 python
  18. [精华] 思科、华为、H3C命令对照表【网络技术联盟站】
  19. 投稿攻略——利益冲突声明(Conflict of Interest)是什么?如何写好它?
  20. WIZnet产品选型指南,解决90%的选型需求

热门文章

  1. ModBus(RTU TCP UDP通信)及利用socket通信(DTU)实现Modbus-RTU通信协议
  2. 2018年度获取工作日节假日API
  3. 数据立方体的基本计算
  4. 软件安全漏洞测试报告_现实生活中的软件安全漏洞以及如何确保安全
  5. Google Colab中把pyth3.7版本更换成python3.6(tensorflow1.13)
  6. ArcGIS 对道路名称进行标注
  7. echarts做了一个气泡图
  8. MATLAB设计课题推荐及选择老师技巧
  9. 嗯… 无法访问此页面 www.bing.com 花了太长时间进行响应解决办法
  10. 美团机器学习——特征工程