| /* |
| * Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0, which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * This Source Code may also be made available under the following Secondary |
| * Licenses when the conditions for such availability set forth in the |
| * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, |
| * version 2 with the GNU Classpath Exception, which is available at |
| * https://www.gnu.org/software/classpath/license.html. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 |
| */ |
| |
| package test; |
| |
| import jakarta.ejb.*; |
| import javax.naming.*; |
| |
| /** |
| * This SessionBean is used to test setting CMP field 'name' to a value |
| * that is too large for the column size that it is mapped to. |
| * The test is expected to be executed with flush after business method |
| * set to true for setNameWithFlush() and to false for setName(). |
| * The test is executed for CMP1.1 bean (A1) and CMP2.x bean (A2). |
| */ |
| public class TestBean implements SessionBean { |
| |
| private A1LocalHome a1Home = null; |
| private A2LocalHome a2Home = null; |
| private A1Local a1bean = null; |
| private A2Local a2bean = null; |
| |
| // SessionBean methods |
| |
| public void ejbCreate() throws CreateException { |
| System.out.println("TestBean ejbCreate"); |
| try { |
| a1Home = lookupA1(); |
| a2Home = lookupA2(); |
| |
| } catch (NamingException ex) { |
| throw new EJBException(ex.getMessage()); |
| } |
| } |
| |
| public void ejbActivate() { |
| System.out.println("TestBean ejbActivate"); |
| } |
| |
| public void ejbPassivate() { |
| a1Home = null; |
| a2Home = null; |
| } |
| |
| public void ejbRemove() { |
| |
| } |
| |
| public void setSessionContext(SessionContext sc) { |
| |
| } |
| |
| private A1LocalHome lookupA1() throws NamingException { |
| Context initial = new InitialContext(); |
| Object objref = initial.lookup("java:comp/env/ejb/A1Flush"); |
| return (A1LocalHome) objref; |
| } |
| |
| private A2LocalHome lookupA2() throws NamingException { |
| Context initial = new InitialContext(); |
| Object objref = initial.lookup("java:comp/env/ejb/A2Flush"); |
| return (A2LocalHome) objref; |
| } |
| |
| /** |
| * Run test for CMP1.1 bean without flush after business |
| * method. This method will fail at commit and the client |
| * will get a RuntimeException. |
| */ |
| public void testA1() throws CreateException { |
| a1bean = a1Home.create("A1"); |
| a1bean.setName("A12345678901234567890"); |
| } |
| |
| /** |
| * Run test for CMP2.x bean without flush after business |
| * method. This method will fail at commit and the client |
| * will get a RuntimeException. |
| */ |
| public void testA2() throws CreateException { |
| a2bean = a2Home.create("A2"); |
| a2bean.setName("A12345678901234567890"); |
| } |
| |
| /** |
| * Run test for CMP1.1 bean with flush after business |
| * method. This method will fail at flush and the client |
| * will get our FlushException. |
| */ |
| public void testA1WithFlush() throws CreateException, FlushException { |
| a1bean = a1Home.create("B1"); |
| try { |
| a1bean.setNameWithFlush("A12345678901234567890"); |
| } catch (EJBException e) { |
| if (isExpectedException(e)) |
| throw new FlushException(e.toString()); |
| else |
| throw e; |
| } |
| } |
| |
| /** |
| * Run test for CMP2.x bean with flush after business |
| * method. This method will fail at flush and the client |
| * will get our FlushException. |
| */ |
| public void testA2WithFlush() throws CreateException, FlushException { |
| a2bean = a2Home.create("B2"); |
| try { |
| a2bean.setNameWithFlush("A12345678901234567890"); |
| } catch (EJBException e) { |
| if (isExpectedException(e)) |
| throw new FlushException(e.toString()); |
| else |
| throw e; |
| } |
| |
| } |
| |
| private boolean isExpectedException (Exception e) { |
| boolean expected = false; |
| |
| Throwable c = e.getCause(); |
| if (c != null && |
| (c instanceof com.sun.jdo.api.persistence.support.JDODataStoreException)) { |
| |
| String msg = c.getMessage(); |
| expected = (msg != null) && (msg.indexOf("JDO76400") > -1); |
| } |
| |
| return expected; |
| } |
| } |