Monday, November 28, 2022

Maven helper plugin - add sources, compile plugin - include/exclude sources, JAR plugin - include/exclude classes, create additional JARs from module with classifier

 HOWTO

Control what is compiled in Maven module - non-standard configuration

Input

  • Add other Java sources 
  • Add other resource files
  • Filter sources

Output 

  •  Filter classes  added into JAR
  •  Create additional JARs from compiled sources

buider-helper-maven-plugin configuration

add sources from other modules
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main/generated</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

maven-compile-plugin configuration 

  • define different main source dir
  • add sources from other modules
<build>
    <sourceDirectory>../moduleB</sourceDirectory>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.10.1</version>
        <configuration>
        <includes>
            <include>../moduleC/src/main/java/**/*.java</include>
            <include>../moduleD/src/main/java/**/*.java</include>
        </includes>
        </configuration>
        </plugin>
    </plugins>
</build>

maven-resources-plugin

  • add additional files to resources to be included in package
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
              <resources>          
                <resource>
                  <directory>src/non-packaged-resources</directory>
                  <filtering>true</filtering>
                </resource>
              </resources>              
            </configuration>            
          </execution>
        </executions>
      </plugin>


maven-jar-plugin configuration 

  • - include/exclude classes from module JAR
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <includes>
                        <include>**/generics/*</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>test-ldap</classifier>
                            <includes>
                                <include>**/ldap/*</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

JARs created

[INFO] --- maven-jar-plugin:3.3.0:jar (default-jar) @ tutorial ---
[INFO] Building jar: /git/java-tutorial/target/tutorial.jar
[INFO] 
[INFO] --- maven-jar-plugin:3.3.0:jar (default) @ tutorial ---
[INFO] Building jar: /git/java-tutorial/target/tutorial-test-ldap.jar

Sunday, November 20, 2022

Install SSL proxy intercept certificate for Azure CLI on Ubuntu

HOWTO

 

Add SSL intercept certificate to local OS storage

sudo cp SSL-intercept.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

Add into .bashrc

export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

Add SSL intercept certificate to Python

cp SSL-intercept.crt  /usr/lib/python3/dist-packages/certifi/

Thursday, October 20, 2022

Docker UBI RedHat image

HOWTO 

 

Search for image

Pastdave@dave ~]$ docker search registry.access.redhat.com/ubi
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubi8/go-toolset           Platform for building and running Go 1.11.5 …   0                    
ubi9/go-toolset           rhcc_registry.access.redhat.com_ubi9/go-tool…   0                    
ubi7                      The Universal Base Image is designed and eng…   0                    
ubi9-beta/ubi             Provides the latest release of Red Hat Unive…   0                    
ubi8/openjdk-8-runtime    OpenJDK 1.8 runtime-only image on Red Hat Un…   0                    
ubi8/openjdk-11-runtime   OpenJDK 11 runtime-only image on Red Hat Uni…   0                    
ubi8/openjdk-17-runtime   OpenJDK 17 runtime-only image on Red Hat Uni…   0                    
ubi7/ubi-minimal          The Universal Base Image Init is designed to…   0                    
ubi7/ubi-init             The Universal Base Image Init is designed to…   0                    
ubi8-minimal              The Universal Base Image Minimal is a stripp…   0                    
ubi7-minimal              The Universal Base Image Minimal is a stripp…   0                    
ubi8/ubi-micro            Provides the latest release of Micro Univers…   0                    
ubi9-beta/ubi-minimal     Provides the latest release of the Minimal R…   0                    
ubi9/ubi-init             rhcc_registry.access.redhat.com_ubi9/ubi-init   0                    
ubi9-init                 rhcc_registry.access.redhat.com_ubi9-init       0                    
ubi9-micro                rhcc_registry.access.redhat.com_ubi9-micro      0                    
ubi7/ubi                  The Universal Base Image is designed and eng…   0                    
ubi8/ubi                  Provides the latest release of the Red Hat U…   0                    
ubi8                      The Universal Base Image is designed and eng…   0                    
ubi9/ubi                  rhcc_registry.access.redhat.com_ubi9/ubi        0                    
ubi9                      rhcc_registry.access.redhat.com_ubi9            0                    
ubi8/ubi-minimal          Provides the latest release of the Minimal R…   0                    
ubi8/ubi-init             Provides the latest release of the Red Hat U…   0                    
ubi8-init                 The Universal Base Image Init is designed to…   0                    
ubi7-init                 The Universal Base Image Init is designed to…   0                    
ubi8-micro                Provides the latest release of Micro Univers…   0                    
ubi9-beta/ubi-init        Provides the latest release of the Red Hat U…   0                    
ubi9-beta/ubi-micro       Provides the latest release of Micro Univers…   0                    
ubi9/ubi-minimal          rhcc_registry.access.redhat.com_ubi9/ubi-min…   0                    
ubi9/ubi-micro            rhcc_registry.access.redhat.com_ubi9/ubi-mic…   0                    
ubi9-minimal              rhcc_registry.access.redhat.com_ubi9-minimal    0                    
ubi7/php-72               Apache 2.4 with PHP 7.2                         0                    
ubi8/php-72               Platform for building and running PHP 7.2 ap…   0                    
ubi8/s2i-core             Base image which allows using of source-to-i…   0                    
ubi8/s2i-base             Base image with essential libraries and tool…   0                    
ubi8/python-27            Platform for building and running Python 2.7…   0                    
ubi8/python-36            Platform for building and running Python 3.6…   0                    
ubi7/nodejs-8             Platform for building and running Node.js 8 …   0                    
ubi7/ruby-25              Platform for building and running Ruby 2.5 a…   0                    
ubi7/python-27            Python 2.7 platform for building and running…   0                    
ubi8/dotnet-21            .NET Core 2.1 SDK and Runtime on RHEL 8         0                    
ubi7/go-toolset           Platform for building and running Go Applica…   0                    
ubi8/ruby-26              Platform for building and running Ruby 2.6 a…   0                    
ubi8/nodejs-12            Platform for building and running Node.js 12…   0                    
ubi8/php-73               Platform for building and running PHP 7.3 ap…   0                    
ubi7/nodejs-10            Platform for building and running Node.js 10…   0                    
ubi8/dotnet-30            .NET Core 3.0 SDK and Runtime on RHEL 8         0                    
ubi7/php-73               Platform for building and running PHP 7.3 ap…   0                    
ubi7/nodejs-12            Platform for building and running Node.js 12…   0                    
ubi8/openjdk-8            Source To Image (S2I) image for Red Hat Open…   0                    
ubi8/python-38            Platform for building and running Python 3.8…   0                    
ubi8/dotnet-31-runtime    .NET Core 3.1 runtime only on RHEL 8            0                    
ubi8/nginx-118            Platform for running nginx 1.18 or building …   0                    
ubi8/ruby-27              Platform for building and running Ruby 2.7 a…   0                    
ubi8/dotnet-50            .NET 5.0 SDK and Runtime on RHEL 8              0                    
ubi7/nginx-118            Platform for running nginx 1.18 or building …   0                    
ubi8/pause                Podman pod infrastructure container             0                    
ubi8/skopeo               Containerized version of Skopeo                 0                    
ubi8/python-39            Platform for building and running Python 3.9…   0                    
ubi8/httpd-24             Platform for running Apache httpd 2.4 or bui…   0                    
ubi7/ruby-30              Ruby 3.0                                        0                    
ubi8/podman               Containerized version of Podman                 0                    
ubi7/nginx-120            Platform for running nginx 1.20 or building …   0                    
ubi8/openjdk-17           Source To Image (S2I) image for Red Hat Open…   0                    
ubi8/php-80               rhcc_registry.access.redhat.com_ubi8/php-80     0                    
ubi8/perl-532             rhcc_registry.access.redhat.com_ubi8/perl-532   0                    
ubi8/dotnet-21-runtime    Provides the latest release of Red Hat Enter…   0                    
ubi8/perl-526             Platform for building and running Perl 5.26 …   0                    
ubi8/nodejs-10            Platform for building and running Node.js 10…   0                    
ubi8/ruby-25              Platform for building and running Ruby 2.5 a…   0                    
ubi7/python-36            Platform for building and running Python 3.6…   0                    
ubi7/s2i-core             Base image which allows using of source-to-i…   0                    
ubi7/s2i-base             Base image with essential libraries and tool…   0                    
ubi8/dotnet-30-runtime    .NET Core 3.0 runtime only on RHEL 8            0                    
ubi7/ruby-26              Platform for building and running Ruby 2.5 a…   0                    
ubi8/openjdk-11           Source To Image (S2I) image for Red Hat Open…   0                    
ubi8/dotnet-31            .NET Core 3.1 SDK and Runtime on RHEL 8         0                    
ubi7/ruby-27              Platform for building and running Ruby 2.7 a…   0                    
ubi7/python-38            Python 3.8 platform for building and running…   0                    
ubi8/nodejs-14            Platform for building and running Node.js 14…   0                    
ubi8/perl-530             Platform for building and running Perl 5.26 …   0                    
ubi8/php-74               Platform for building and running PHP 7.4 ap…   0                    
ubi8/dotnet-50-runtime    .NET 5.0 runtime only on RHEL 8                 0                    
ubi7/nodejs-14            Platform for building and running Node.js 14…   0                    
ubi8/buildah              Containerized version of Buildah                0                    
ubi8/nodejs-14-minimal    Minimal image for running Node.js 14 applica…   0                    
ubi8/toolbox              Toolbox containerized shell image based in U…   0                    
ubi8/ruby-30              Platform for building and running Ruby 3.0 a…   0                    
ubi8/nginx-120            Platform for running nginx 1.20 or building …   0                    
ubi8/nodejs-16            Platform for building and running Node.js 16…   0                    
ubi8/nodejs-16-minimal    Minimal image for running Node.js 16 applica…   0                    
ubi8/dotnet-60-runtime    .NET 6.0 runtime only on RHEL 8                 0                    
ubi8/dotnet-60            .NET 6.0 SDK and Runtime on RHEL 8              0                    
ubi8/openssl              rhcc_registry.access.redhat.com_ubi8/openssl    0                    
ubi9-beta/toolbox         Toolbox containerized shell image based in U…   0                    
rhel8/toolbox             Toolbox containerized shell image based in U…   0                    
rhel9-beta/toolbox        Toolbox containerized shell image based in U…   0                    
ubi9/toolbox              rhcc_registry.access.redhat.com_ubi9/toolbox    0                    
ubi9/openjdk-11-runtime   rhcc_registry.access.redhat.com_ubi9/openjdk…   0                    
ubi9/openjdk-17-runtime   rhcc_registry.access.redhat.com_ubi9/openjdk…   0                    
e your text here.

 

Create container 

dave@dave ~]$ docker run -it --name  ubi-test registry.access.redhat.com/ubi8/ubi bash
Unable to find image 'registry.access.redhat.com/ubi8/ubi:latest' locally
latest: Pulling from ubi8/ubi
7985264c26f7: Pull complete 
0689084f485b: Pull complete 
Digest: sha256:38e7c463209e3c5b7f1fcb79bb250e4653a66f3be9f23f5d175eeeadf8c3da79
Status: Downloaded newer image for registry.access.redhat.com/ubi8/ubi:latest
[root@634052a6ad62 /]# more /etc/redhat-release 
Red Hat Enterprise Linux release 8.6 (Ootpa)
[root@634052a6ad62 /]# ls /
bin  boot  dev    etc  home  lib    lib64  lost+found  media  mnt  opt  proc  root    run  sbin  srv    sys  tmp  usr  var

Sample custom image


[dave@dave simple]$ more Dockerfile 
FROM registry.access.redhat.com/ubi8/ubi

RUN dnf install -y python3

CMD mkdir /myapp

WORKDIR /myapp

COPY ./myapp.sh .

CMD ./myapp.sh

Build image

$ docker build -t redhat-ubi-myapp .
Sending build context to Docker daemon  4.096kB
Step 1/6 : FROM registry.access.redhat.com/ubi8/ubi
 ---> 16fb1f57c5af
Step 2/6 : RUN dnf install -y python3
 ---> Using cache
 ---> 22a66860e864
Step 3/6 : CMD mkdir /myapp
 ---> Using cache
 ---> 1c724139c1c9
Step 4/6 : WORKDIR /myapp
 ---> Using cache
 ---> 3ca288265be2
Step 5/6 : COPY ./myapp.sh .
 ---> 22db0568addf
Step 6/6 : CMD ./myapp.sh
 ---> Running in 5328a64d06ad
Removing intermediate container 5328a64d06ad
 ---> af70183187f5
Successfully built af70183187f5
Successfully tagged redhat-ubi-myapp:latest

Run image

[dave@dave simple]$ docker run redhat-ubi-myapp
Hello,world!
Red Hat Enterprise Linux release 8.7 (Ootpa)

Saturday, October 15, 2022

Remove deprecated Oracle JDBC classes oracle.sql.ArrayDescriptor, oracle.sql.STRUCT, oracle.sql.StructDescriptor

 HOWTO

 
 
package dave.service;

import java.sql.Array;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Struct;

import javax.annotation.sql.DataSourceDefinition;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import dave.entity.Account;
import oracle.jdbc.OracleConnection;
import oracle.sql.ArrayDescriptor;
import oracle.sql.SQLName;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;

@Stateless
//Data Source defined for JPA. It assume the derby database is started up and listen to localhost:1527
@DataSourceDefinition(name = "java:module/env/mavenArchetypeDataSource", className = "org.apache.derby.jdbc.ClientXADataSource", portNumber = 1527, serverName = "localhost", databaseName = "examples", user = "examples", password = "examples", properties = {
        "create=true", "weblogic.TestTableName=SQL SELECT 1 FROM SYS.SYSTABLES" })
public class AccountManagerImpl implements AccountManager {

    @PersistenceContext
    private EntityManager em;

    public void depositOnAccount(String name, float amount) {
        Account account = em.find(Account.class, name);
        if (account == null) {
            account = new Account();
            account.setName(name);
        }
        account.setAmount(account.getAmount() + amount);
        em.persist(account);
    }

    public Account findAccount(String name) {

        em.getTransaction().begin();
        Connection connection = em.unwrap(java.sql.Connection.class);

        try {
            useDeprecatedOracleConnection(connection);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            useOracleConnection(connection);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return em.find(Account.class, name);
    }

    private void useDeprecatedOracleConnection(java.sql.Connection connection) throws SQLException {

        OracleConnection oracleConnection = null;

        if (connection.isWrapperFor(OracleConnection.class)) {
            oracleConnection = connection.unwrap(OracleConnection.class);
        } else {
            // recover, not an oracle connection
        }

        Object[] reportArray = new Object[3];
        STRUCT[] struct = new STRUCT[1];

        ArrayDescriptor arrayDescriptor = new ArrayDescriptor(
                new SQLName("T_REPORT_TABLE", (OracleConnection) connection), connection);
        StructDescriptor structDescriptor = StructDescriptor.createDescriptor("R_REPORT_OBJECT", connection);

        oracle.sql.ARRAY reportsArray = new oracle.sql.ARRAY(arrayDescriptor, connection, struct);

    }

    private void useOracleConnection(java.sql.Connection connection) throws SQLException {

        OracleConnection oracleConnection = null;

        if (connection.isWrapperFor(OracleConnection.class)) {
            oracleConnection = connection.unwrap(OracleConnection.class);
        } else {
            // recover, not an oracle connection
        }

        Object[] reportArray = new Object[3];
        Struct[] struct = new Struct[1];

        int arrayIndex = 0;

        struct[arrayIndex++] = connection.createStruct("R_REPORT_OBJECT", reportArray);

        Array reportsArray = ((OracleConnection) connection).createOracleArray("T_REPORT_TABLE", struct);

    }
}

Wednesday, May 18, 2022

Disable Spring DEBUG in log4j2 logs on Weblogic

HOWTO 

 

There is dump of all environment variables in Weblogic log due to Spring initialization

2022-05-12 14:13:43,673;DEBUG;com.bea.core.repackaged.springframework.core.env.AbstractEnvironment;<init>();125;Initialized StandardEnvironment with PropertySources

 

To remove it add logger for com.bea.core.repackaged.springframework into log4j.xml file

    <logger name="com.bea.core.repackaged.springframework" additivity="false">
        <level value="error" />
        <appender-ref ref="some-appender"/>
    </logger>

 

Check in Weblogic logs

weblogic.log:<May 18, 2022 10:24:09,804 AM CEST> <Notice> <Stdout> <BEA-000000> <2022-05-18 10:24:09,804 [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' DEBUG Level value for com.bea.core.repackaged.springframework is [error].>
weblogic.log:<May 18, 2022 10:24:09,804 AM CEST> <Notice> <Stdout> <BEA-000000> <2022-05-18 10:24:09,804 [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' DEBUG com.bea.core.repackaged.springframework level set to ERROR>

Sunday, April 3, 2022

Running JSF 1.1 application on Weblogic 12.2.1.4 with latest patches

 HOWTO

 

javax.faces.FacesException: Expression Error: Named Object: not found 

 

Web app configuration files - placed into WEB-INF

  • faces-config.xml - JSF specific
  • web.xml - web app
  • weblogic.xml - app server specific

Debug compiled JSP pages - use keepgenerated in weblogic.xml to see produced Java code

jsp-descriptor https://docs.oracle.com/cd/E11035_01/wls100/webapp/weblogic_xml.html#wp1038491 

 


working-dir
internally generated directory
The name of a directory where WebLogic Server saves the generated Java and compiled class files for a JSP.

keepgenerated
false
Saves the Java files that are generated as an intermediary step in the JSP compilation process. Unless this parameter is set to true, the intermediate Java files are deleted after they are compiled.

TLD files - add custom files into WEB-INF

<%@ taglib uri="/WEB-INF/tags/customTags.tld"  prefix="tt"%>

 

Faces config - add custom files in faces-config.xml

  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/custom-config.xml,/WEB-INF/other-custom-config.xml
   </param-value>
  </init-param>

Java EE: XML Schemas for Java EE Deployment Descriptors

 Java EE: XML Schemas for Java EE Deployment Descriptors


- Java EE 8 Schema Resources
- Java EE 7 Schema Resources
- Java EE 6 Schema Resources
- Java EE 5 Schema Resources
- J2EE 1.4 XML Schemas
- J2EE 1.3 DTDs
- J2EE 1.2 DTDs